diff --git a/palettes.py b/palettes.py
index bbebce8..4d5f176 100644
a
|
b
|
from gi.repository import Gtk |
26 | 26 | from gi.repository import Gdk |
27 | 27 | from gi.repository import WebKit |
28 | 28 | |
| 29 | from gi.repository import SugarGestures |
| 30 | |
29 | 31 | from sugar3.graphics.palette import Palette, Invoker |
30 | 32 | from sugar3 import profile |
31 | 33 | |
… |
… |
class ContentInvoker(Invoker): |
38 | 40 | self._position_hint = self.AT_CURSOR |
39 | 41 | self._browser = browser |
40 | 42 | self._browser.connect('button-press-event', self.__button_press_cb) |
| 43 | self._browser.connect('realize', self.__browser_realize_cb) |
41 | 44 | self.attach(self._browser) |
42 | 45 | |
43 | 46 | def get_default_position(self): |
44 | 47 | return self.AT_CURSOR |
45 | 48 | |
| 49 | def __long_pressed_cb(self, controller, x, y): |
| 50 | event = Gdk.EventButton() |
| 51 | event.type = Gdk.EventType._3BUTTON_PRESS |
| 52 | gdk_window = self._browser.get_window() |
| 53 | event.window = gdk_window |
| 54 | event.time = Gtk.get_current_event_time() |
| 55 | event.x = x |
| 56 | event.y = y |
| 57 | x_root, y_root = gdk_window.get_root_coords(x, y) |
| 58 | event.x_root = x_root |
| 59 | event.y_root = y_root |
| 60 | self._handle_event(event) |
| 61 | return True |
| 62 | |
| 63 | def __browser_realize_cb(self, browser): |
| 64 | x11_window = browser.get_window() |
| 65 | x11_window.set_events(x11_window.get_events() | |
| 66 | Gdk.EventMask.POINTER_MOTION_MASK | |
| 67 | Gdk.EventMask.TOUCH_MASK) |
| 68 | |
| 69 | lp = SugarGestures.LongPressController(trigger_delay=1000) |
| 70 | lp.connect('pressed', self.__long_pressed_cb) |
| 71 | lp.attach(browser, SugarGestures.EventControllerFlags.NONE) |
| 72 | |
46 | 73 | def get_rect(self): |
47 | 74 | allocation = self._browser.get_allocation() |
48 | 75 | window = self._browser.get_window() |
… |
… |
class ContentInvoker(Invoker): |
73 | 100 | def __button_press_cb(self, browser, event): |
74 | 101 | if event.button != 3: |
75 | 102 | return False |
| 103 | self._handle_event(event) |
| 104 | return True |
| 105 | |
| 106 | def _handle_event(self, event): |
76 | 107 | hit_test = self._browser.get_hit_test_result(event) |
77 | 108 | if hit_test.props.context & WebKit.HitTestResultContext.LINK: |
78 | 109 | link_uri = hit_test.props.link_uri |
… |
… |
class ContentInvoker(Invoker): |
104 | 135 | self.palette = SelectionPalette(self._browser, title, None, None) |
105 | 136 | self.notify_right_click() |
106 | 137 | |
107 | | return True |
108 | | |
109 | 138 | |
110 | 139 | class SelectionPalette(Palette): |
111 | 140 | def __init__(self, browser, title, url, owner_document): |