CursurInvoker: add long-press gesture to raise Palette
This adds long-press gesture detection to the CursorInvoker used in the EventIcon. This will make this gesture available for the View icons for example. We need to keep a boolean around to detect when a lon-press event has happened and ignore the button-release event in that case. We add as well checks in the CursorInvoker and WidgetInvoker for the enter events if they are of type Gdk.CrossingMode.NORMAL, otherwise the Gdk.CrossingMode.TOUCH_BEGIN enter events that are detected when a touch starts are handled and interfere. Signed-off-by: Simon Schampijer <simon@laptop.org> Acked-by: Manuel Quiñones <manuq@laptop.org>
This commit is contained in:
parent
590785f7d1
commit
a36ada99fd
@ -29,6 +29,7 @@ from gi.repository import Gdk
|
|||||||
from gi.repository import Gtk
|
from gi.repository import Gtk
|
||||||
from gi.repository import GObject
|
from gi.repository import GObject
|
||||||
|
|
||||||
|
from gi.repository import SugarGestures
|
||||||
from sugar3.graphics import palettegroup
|
from sugar3.graphics import palettegroup
|
||||||
from sugar3.graphics import animator
|
from sugar3.graphics import animator
|
||||||
from sugar3.graphics import style
|
from sugar3.graphics import style
|
||||||
@ -1062,7 +1063,8 @@ class WidgetInvoker(Invoker):
|
|||||||
gap[0], gap[1], gap[1] + gap[2])
|
gap[0], gap[1], gap[1] + gap[2])
|
||||||
|
|
||||||
def __enter_notify_event_cb(self, widget, event):
|
def __enter_notify_event_cb(self, widget, event):
|
||||||
self.notify_mouse_enter()
|
if event.mode == Gdk.CrossingMode.NORMAL:
|
||||||
|
self.notify_mouse_enter()
|
||||||
|
|
||||||
def __leave_notify_event_cb(self, widget, event):
|
def __leave_notify_event_cb(self, widget, event):
|
||||||
if event.mode == Gdk.CrossingMode.NORMAL:
|
if event.mode == Gdk.CrossingMode.NORMAL:
|
||||||
@ -1104,6 +1106,9 @@ class CursorInvoker(Invoker):
|
|||||||
self._leave_hid = None
|
self._leave_hid = None
|
||||||
self._release_hid = None
|
self._release_hid = None
|
||||||
self._item = None
|
self._item = None
|
||||||
|
self._long_pressed_recognized = False
|
||||||
|
self._long_pressed_hid = None
|
||||||
|
self._long_pressed_controller = SugarGestures.LongPressController()
|
||||||
|
|
||||||
if parent:
|
if parent:
|
||||||
self.attach(parent)
|
self.attach(parent)
|
||||||
@ -1118,12 +1123,18 @@ class CursorInvoker(Invoker):
|
|||||||
self.__leave_notify_event_cb)
|
self.__leave_notify_event_cb)
|
||||||
self._release_hid = self._item.connect('button-release-event',
|
self._release_hid = self._item.connect('button-release-event',
|
||||||
self.__button_release_event_cb)
|
self.__button_release_event_cb)
|
||||||
|
self._long_pressed_hid = self._long_pressed_controller.connect('pressed', \
|
||||||
|
self.__long_pressed_event_cb, self._item)
|
||||||
|
self._long_pressed_controller.attach(self._item, \
|
||||||
|
SugarGestures.EventControllerFlags.NONE)
|
||||||
|
|
||||||
def detach(self):
|
def detach(self):
|
||||||
Invoker.detach(self)
|
Invoker.detach(self)
|
||||||
self._item.disconnect(self._enter_hid)
|
self._item.disconnect(self._enter_hid)
|
||||||
self._item.disconnect(self._leave_hid)
|
self._item.disconnect(self._leave_hid)
|
||||||
self._item.disconnect(self._release_hid)
|
self._item.disconnect(self._release_hid)
|
||||||
|
self._long_pressed_controller.detach(self._item)
|
||||||
|
self._long_pressed_controller.disconnect(self._long_pressed_hid)
|
||||||
|
|
||||||
def get_default_position(self):
|
def get_default_position(self):
|
||||||
return self.AT_CURSOR
|
return self.AT_CURSOR
|
||||||
@ -1138,7 +1149,8 @@ class CursorInvoker(Invoker):
|
|||||||
return rect
|
return rect
|
||||||
|
|
||||||
def __enter_notify_event_cb(self, button, event):
|
def __enter_notify_event_cb(self, button, event):
|
||||||
self.notify_mouse_enter()
|
if event.mode == Gdk.CrossingMode.NORMAL:
|
||||||
|
self.notify_mouse_enter()
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def __leave_notify_event_cb(self, button, event):
|
def __leave_notify_event_cb(self, button, event):
|
||||||
@ -1147,6 +1159,9 @@ class CursorInvoker(Invoker):
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
def __button_release_event_cb(self, button, event):
|
def __button_release_event_cb(self, button, event):
|
||||||
|
if self._long_pressed_recognized:
|
||||||
|
self._long_pressed_recognized = False
|
||||||
|
return True
|
||||||
if event.button == 1:
|
if event.button == 1:
|
||||||
if self.props.toggle_palette:
|
if self.props.toggle_palette:
|
||||||
self.notify_toggle_state()
|
self.notify_toggle_state()
|
||||||
@ -1156,6 +1171,10 @@ class CursorInvoker(Invoker):
|
|||||||
else:
|
else:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
def __long_pressed_event_cb(self, controller, x, y, widget):
|
||||||
|
self._long_pressed_recognized = True
|
||||||
|
self.notify_right_click()
|
||||||
|
|
||||||
def get_toplevel(self):
|
def get_toplevel(self):
|
||||||
return self._item.get_toplevel()
|
return self._item.get_toplevel()
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user