Ticket #3997: pressed.patch

File pressed.patch, 2.5 KB (added by erikos, 12 years ago)

first implementation, missing the differntiation between the click and the long press

  • palettes.py

    diff --git a/palettes.py b/palettes.py
    index bbebce8..4d5f176 100644
    a b from gi.repository import Gtk 
    2626from gi.repository import Gdk
    2727from gi.repository import WebKit
    2828
     29from gi.repository import SugarGestures
     30
    2931from sugar3.graphics.palette import Palette, Invoker
    3032from sugar3 import profile
    3133
    class ContentInvoker(Invoker): 
    3840        self._position_hint = self.AT_CURSOR
    3941        self._browser = browser
    4042        self._browser.connect('button-press-event', self.__button_press_cb)
     43        self._browser.connect('realize', self.__browser_realize_cb)
    4144        self.attach(self._browser)
    4245
    4346    def get_default_position(self):
    4447        return self.AT_CURSOR
    4548
     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
    4673    def get_rect(self):
    4774        allocation = self._browser.get_allocation()
    4875        window = self._browser.get_window()
    class ContentInvoker(Invoker): 
    73100    def __button_press_cb(self, browser, event):
    74101        if event.button != 3:
    75102            return False
     103        self._handle_event(event)
     104        return True
     105
     106    def _handle_event(self, event):
    76107        hit_test = self._browser.get_hit_test_result(event)
    77108        if hit_test.props.context & WebKit.HitTestResultContext.LINK:
    78109            link_uri = hit_test.props.link_uri
    class ContentInvoker(Invoker): 
    104135            self.palette = SelectionPalette(self._browser, title, None, None)
    105136            self.notify_right_click()
    106137
    107         return True
    108 
    109138
    110139class SelectionPalette(Palette):
    111140    def __init__(self, browser, title, url, owner_document):