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
"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 = []
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)
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)
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,
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()