예제 #1
0
    def button_press_event(self, text_view, event):
        """callback for mouse click events"""
        # we only react on left or right mouse clicks
        if event.button != 1 and event.button != 3:
            return False

        # try to get a selection
        try:
            (start, end) = self.buffer.get_selection_bounds()
        except ValueError:
            pass
        else:
            if start.get_offset() != end.get_offset():
                return False

        # get the iter at the mouse position
        (x, y) = self.window_to_buffer_coords(Gtk.TextWindowType.WIDGET, int(event.x), int(event.y))
        iter = self.get_iter_at_location(x, y)

        # call open_url or menu.popup if an URL is assigned to the iter
        tags = iter.get_tags()
        for tag in tags:
            url = tag.get_data("url")
            if url != None:
                if event.button == 1:
                    open_url(url)
                    break
                if event.button == 3:
                    self.create_context_menu(url)
                    self.menu.popup(None, None, None, None, event.button, event.time)
                    return True
예제 #2
0
 def handle_context_menu(self, menuitem, action, url):
     """Handle activate event for the links' context menu"""
     if action == "open":
         open_url(url)
     if action == "copy":
         # the following two lines used to be enough - then gtk3/pygi
         # came along ...
         # cb = Gtk.Clipboard()
         # cb.set_text(url)
         display = Gdk.Display.get_default()
         selection = Gdk.Atom.intern("CLIPBOARD", False)
         cb = Gtk.Clipboard.get_for_display(display, selection)
         cb.set_text(url, -1)
         cb.store()
 def _on_navigation_policy_decision_requested(self, view, frame, request, action, policy):
     open_url(request.get_uri())
     policy.ignore()
     return True