diff options
Diffstat (limited to 'src/sugar/graphics/palettewindow.py')
-rw-r--r-- | src/sugar/graphics/palettewindow.py | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/src/sugar/graphics/palettewindow.py b/src/sugar/graphics/palettewindow.py index 5281e54..4603c16 100644 --- a/src/sugar/graphics/palettewindow.py +++ b/src/sugar/graphics/palettewindow.py @@ -845,6 +845,68 @@ class CanvasInvoker(Invoker): return hippo.get_canvas_for_item(self._item).get_toplevel() +class CursorInvoker(Invoker): + + def __init__(self, parent=None): + Invoker.__init__(self) + + self._position_hint = self.AT_CURSOR + self._enter_hid = None + self._leave_hid = None + self._release_hid = None + self._item = None + + if parent: + self.attach(parent) + + def attach(self, parent): + Invoker.attach(self, parent) + + self._item = parent + self._enter_hid = self._item.connect('enter-notify-event', + self.__enter_notify_event_cb) + self._leave_hid = self._item.connect('leave-notify-event', + self.__leave_notify_event_cb) + self._release_hid = self._item.connect('button-release-event', + self.__button_release_event_cb) + + def detach(self): + Invoker.detach(self) + self._item.disconnect(self._enter_hid) + self._item.disconnect(self._leave_hid) + self._item.disconnect(self._release_hid) + + def get_default_position(self): + return self.AT_CURSOR + + def get_rect(self): + window = self._item.get_window() + allocation = self._item.get_allocation() + rect = Gdk.Rectangle() + rect.x, rect.y = window.get_root_coords(allocation.x, allocation.y) + rect.width = allocation.width + rect.height = allocation.height + return rect + + def __enter_notify_event_cb(self, button, event): + self.notify_mouse_enter() + return False + + def __leave_notify_event_cb(self, button, event): + self.notify_mouse_leave() + return False + + def __button_release_event_cb(self, button, event): + if event.button == 3: + self.notify_right_click() + return True + else: + return False + + def get_toplevel(self): + return self._item.get_toplevel() + + class ToolInvoker(WidgetInvoker): def __init__(self, parent=None): |