diff options
author | Marco 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) |
commit | fd92a6d7d92e8cad3b4ca9a69c5f73e2fbe03f54 (patch) | |
tree | cf29310fb5e5c4b0165e3a3f9a08ca92204abdc3 /shell | |
parent | 3ee23b3a92c0be2e6eae3be19a9922934bab4b4c (diff) |
Improve popup/popdown logic
Diffstat (limited to 'shell')
-rw-r--r-- | shell/FriendIcon.py | 31 | ||||
-rw-r--r-- | shell/FriendPopup.py | 23 |
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 |