Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/shell
diff options
context:
space:
mode:
authorMarco Pesenti Gritti <marco@localhost.localdomain>2006-09-14 22:34:42 (GMT)
committer Marco Pesenti Gritti <marco@localhost.localdomain>2006-09-14 22:34:42 (GMT)
commitfd92a6d7d92e8cad3b4ca9a69c5f73e2fbe03f54 (patch)
treecf29310fb5e5c4b0165e3a3f9a08ca92204abdc3 /shell
parent3ee23b3a92c0be2e6eae3be19a9922934bab4b4c (diff)
Improve popup/popdown logic
Diffstat (limited to 'shell')
-rw-r--r--shell/FriendIcon.py31
-rw-r--r--shell/FriendPopup.py23
2 files changed, 26 insertions, 28 deletions
diff --git a/shell/FriendIcon.py b/shell/FriendIcon.py
index 3824bba..94de02d 100644
--- a/shell/FriendIcon.py
+++ b/shell/FriendIcon.py
@@ -11,6 +11,8 @@ class FriendIcon(IconItem):
self._friend = friend
self._popup = None
self._popup_distance = 0
+ self._hover_popup = False
+ self._popdown_on_leave = False
self.connect('popup', self._popup_cb)
self.connect('popdown', self._popdown_cb)
@@ -21,11 +23,21 @@ class FriendIcon(IconItem):
def get_friend(self):
return self._friend
+ def _popdown(self):
+ if self._popup:
+ self._popup.destroy()
+ self._popup = None
+
def _popup_cb(self, icon, x1, y1, x2, y2):
+ self._popdown()
+
grid = Grid()
+ self._popup = FriendPopup(self._shell, grid, icon.get_friend())
- if not self._popup:
- self._popup = FriendPopup(self._shell, grid, icon.get_friend())
+ self._popup.connect('enter-notify-event',
+ self._popup_enter_notify_event_cb)
+ self._popup.connect('leave-notify-event',
+ self._popup_leave_notify_event_cb)
distance = self._popup_distance
@@ -49,11 +61,14 @@ class FriendIcon(IconItem):
self._popup.show()
- def _popup_destroy_cb(self, popup):
- self._popup = None
-
def _popdown_cb(self, friend):
- if self._popup:
- self._popup.connect('destroy', self._popup_destroy_cb)
- self._popup.popdown()
+ if not self._hover_popup:
+ self._popdown()
+
+ def _popup_enter_notify_event_cb(self, widget, event):
+ self._hover_popup = True
+ def _popup_leave_notify_event_cb(self, widget, event):
+ self._hover_popup = False
+ if self._popdown_on_leave:
+ self._popdown()
diff --git a/shell/FriendPopup.py b/shell/FriendPopup.py
index 8a9f669..4a2cd1b 100644
--- a/shell/FriendPopup.py
+++ b/shell/FriendPopup.py
@@ -63,34 +63,17 @@ class FriendPopup(gtk.Window):
canvas.set_model(model)
- self.connect('enter-notify-event', self._enter_notify_event_cb)
- self.connect('leave-notify-event', self._leave_notify_event_cb)
-
def _invite_clicked_cb(self, icon):
activity = self._shell.get_current_activity()
buddy = self._friend.get_buddy()
if buddy != None:
activity.invite(buddy)
- else:
- print 'Friend not online'
def _make_friend_clicked_cb(self, icon):
friends = self._shell.get_owner().get_friends()
- friends.add_buddy(buddy)
-
- def _enter_notify_event_cb(self, widget, event):
- self._hover = True
-
- def _leave_notify_event_cb(self, widget, event):
- self._hover = False
- if self._popdown_on_leave:
- self.popdown()
-
- def popdown(self):
- if not self._hover:
- self.destroy()
- else:
- self._popdown_on_leave = True
+ buddy = self._friend.get_buddy()
+ if buddy != None:
+ friends.add_buddy(buddy)
def get_width(self):
return self._width