[Pkg-sugar-commit] [sugar-browse-activity] 11/18: add EventListener for 'mouseout' to popdown palette #10407

Jonas Smedegaard dr at jones.dk
Mon Apr 20 09:47:13 UTC 2015


This is an automated email from the git hooks/post-receive script.

js pushed a commit to tag 108.1
in repository sugar-browse-activity.

commit b6c837134e51c1e799904fc86b40fe5302e9fd74
Author: Simon Schampijer <simon at schampijer.de>
Date:   Thu Oct 21 18:44:25 2010 +0200

    add EventListener for 'mouseout' to popdown palette #10407
    
    from SL #1314
---
 palettes.py | 45 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 45 insertions(+)

diff --git a/palettes.py b/palettes.py
index 1f3bfc2..d191b49 100644
--- a/palettes.py
+++ b/palettes.py
@@ -20,6 +20,7 @@ import urlparse
 from gettext import gettext as _
 
 import gtk
+import gobject
 import xpcom
 from xpcom import components
 from xpcom.components import interfaces
@@ -32,6 +33,23 @@ from sugar.activity import activity
 
 import downloadmanager
 
+class MouseOutListener(gobject.GObject):
+    _com_interfaces_ = interfaces.nsIDOMEventListener
+
+    __gsignals__ = {
+        'mouse-out': (gobject.SIGNAL_RUN_FIRST,
+                      gobject.TYPE_NONE,
+                      ([]))
+    }
+
+    def __init__(self, target):
+        gobject.GObject.__init__(self)
+        self._target = target
+
+    def handleEvent(self, event):
+        self.emit('mouse-out')
+
+
 class ContentInvoker(Invoker):
     _com_interfaces_ = interfaces.nsIDOMEventListener
 
@@ -39,6 +57,8 @@ class ContentInvoker(Invoker):
         Invoker.__init__(self)
         self._position_hint = self.AT_CURSOR
         self._browser = browser
+        self._mouseout_listener = None
+        self._popdown_handler_id = None
 
     def get_default_position(self):
         return self.AT_CURSOR
@@ -54,6 +74,7 @@ class ContentInvoker(Invoker):
             return
 
         target = event.target
+
         if target.tagName.lower() == 'a':
 
             if target.firstChild:
@@ -76,6 +97,30 @@ class ContentInvoker(Invoker):
 
             self.palette = ImagePalette(title, target.src, target.ownerDocument)
             self.notify_right_click()
+        else:
+            return
+
+        if self._popdown_handler_id is not None:
+            self._popdown_handler_id = self.palette.connect( \
+                'popdown', self.__palette_popdown_cb)
+
+        self._mouseout_listener = MouseOutListener(target)
+        wrapper = xpcom.server.WrapObject(self._mouseout_listener,
+                                          interfaces.nsIDOMEventListener)
+        target.addEventListener('mouseout', wrapper, False)
+        self._mouseout_listener.connect('mouse-out', self.__moved_out_cb)
+
+    def __moved_out_cb(self, listener):
+        self.palette.popdown()
+
+    def __palette_popdown_cb(self, palette):
+        if self._mouseout_listener is not None:
+            wrapper = xpcom.server.WrapObject(self._mouseout_listener,
+                                              interfaces.nsIDOMEventListener)
+            self._mouseout_listener._target.removeEventListener('mouseout',
+                                                                wrapper, False)
+            del self._mouseout_listener
+
 
 class LinkPalette(Palette):
     def __init__(self, browser, title, url, owner_document):

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-sugar/sugar-browse-activity.git



More information about the pkg-sugar-commit mailing list