From fbac42a0d137286b9320842ad465a42c6d28397c Mon Sep 17 00:00:00 2001 From: Aiwota Programmer Date: Wed, 12 Dec 2007 00:38:16 +0900 Subject: [PATCH] implement uri click event --- src/FukuiNoNamari/thread_view.py | 39 +++++++++++++++++++++++++++++++++++++- src/FukuiNoNamari/thread_window.py | 14 ++++++++++++++ 2 files changed, 52 insertions(+), 1 deletion(-) diff --git a/src/FukuiNoNamari/thread_view.py b/src/FukuiNoNamari/thread_view.py index 78a14da..83f70be 100644 --- a/src/FukuiNoNamari/thread_view.py +++ b/src/FukuiNoNamari/thread_view.py @@ -36,7 +36,9 @@ class ThreadView(gtk.HBox): self.drawingarea.add_events( gtk.gdk.SCROLL_MASK | - gtk.gdk.POINTER_MOTION_MASK) + gtk.gdk.POINTER_MOTION_MASK | + gtk.gdk.BUTTON_PRESS_MASK | + gtk.gdk.BUTTON_RELEASE_MASK) self.adjustment.step_increment = 20 self.drawingarea_prev_width = 0 @@ -51,11 +53,23 @@ class ThreadView(gtk.HBox): "scroll-event", self.on_drawingarea_scroll_event) self.drawingarea.connect( "motion-notify-event", self.on_drawingrarea_motion_notify_event) + self.drawingarea.connect( + "button-press-event", self.on_drawingrarea_button_press_event) + self.drawingarea.connect( + "button-release-event", self.on_drawingrarea_button_release_event) self.vscrollbar.connect( "value-changed", self.on_vscrollbar_value_changed) self.initialize_buffer() + self.on_uri_clicked = self._on_uri_clicked + + self.button1_pressed = False + self.current_pressed_uri = None + + def _on_uri_clicked(self, uri): + print uri, "clicked!!!!" + def initialize_buffer(self): self.pangolayout = [] @@ -229,6 +243,9 @@ class ThreadView(gtk.HBox): self.prevent_adjustment_overflow() def on_drawingrarea_motion_notify_event(self, widget, event, data=None): + if event.state & gtk.gdk.BUTTON1_MASK != gtk.gdk.BUTTON1_MASK: + self.button1_pressed = False + cursor = ThreadView.regular_cursor uri, layout, index = self.ptrpos_to_uri(event.x, event.y) @@ -239,3 +256,23 @@ class ThreadView(gtk.HBox): cursor = ThreadView.hand_cursor self.drawingarea.window.set_cursor(cursor) + + def on_drawingrarea_button_press_event(self, widget, event, data=None): + if event.button == 1: + self.current_pressed_uri = None + self.button1_pressed = True + uri, layout, index = self.ptrpos_to_uri(event.x, event.y) + if uri is not None and layout is not None and index is not None: + self.current_pressed_uri = (uri, layout, index) + + def on_drawingrarea_button_release_event(self, widget, event, data=None): + if event.button == 1: + button1_pressed = self.button1_pressed + self.button1_pressed = False + + if button1_pressed and self.current_pressed_uri is not None: + uri, layout, index = self.ptrpos_to_uri(event.x, event.y) + p_uri, p_layout, p_index = self.current_pressed_uri + self.current_preesed_uri = None + if uri == p_uri and layout == p_layout and index == p_index: + self.on_uri_clicked(uri) diff --git a/src/FukuiNoNamari/thread_window.py b/src/FukuiNoNamari/thread_window.py index f9b4e6e..bdcca76 100644 --- a/src/FukuiNoNamari/thread_window.py +++ b/src/FukuiNoNamari/thread_window.py @@ -150,6 +150,8 @@ class WinWrap(winwrapbase.WinWrapBase): self.vbox.pack_start(self.threadview) self.vbox.reorder_child(self.threadview, 2) + self.threadview.on_uri_clicked = self.on_threadview_uri_clicked + self.initialize_buffer() sigdic = {"on_refresh_activate": self.update, @@ -247,6 +249,18 @@ class WinWrap(winwrapbase.WinWrapBase): except OSError: traceback.print_exc() + def on_threadview_uri_clicked(self, uri): + + if not uri.startswith("http://"): + # maybe a relative uri. + uri = urlparse.urljoin(self.bbs_type.get_uri_base(), uri) + + try: + uri_opener.open_uri(uri) + except bbs_type_exception.BbsTypeError: + # not supported, show with the web browser. + gnome.url_show(uri) + def http_get_dat(self, on_get_res): datfile_url = self.bbs_type.get_dat_uri() -- 2.11.0