A bunch of cleanups and fixes

This commit is contained in:
Marco Pesenti Gritti 2006-09-15 02:54:25 +02:00
parent dd15b0d063
commit 3a10f80aa1
3 changed files with 41 additions and 23 deletions

View File

@ -45,7 +45,8 @@ class FriendIcon(IconItem):
FriendIcon._popup_shell.set_active(None)
grid = Grid()
self._popup = FriendPopup(self._shell, grid, icon.get_friend())
self._popup = FriendPopup(grid, icon.get_friend())
self._popup.connect('action', self._popup_action_cb)
self._popup.connect('enter-notify-event',
self._popup_enter_notify_event_cb)
self._popup.connect('leave-notify-event',
@ -74,9 +75,25 @@ class FriendIcon(IconItem):
FriendIcon._popup_shell.set_active(self)
def _popup_action_cb(self, popup, action):
self._popdown()
buddy = self._friend.get_buddy()
if buddy == None:
return
if action == FriendPopup.ACTION_INVITE:
activity = self._shell.get_current_activity()
activity.invite(buddy)
elif action == FriendPopup.ACTION_MAKE_FRIEND:
friends = self._shell.get_owner().get_friends()
friends.add_buddy(buddy)
def _popdown_cb(self, friend):
if not self._hover_popup:
self._popdown()
else:
self._popdown_on_leave = True
def _popup_enter_notify_event_cb(self, widget, event):
self._hover_popup = True

View File

@ -1,15 +1,23 @@
import gtk
import goocanvas
import gobject
from sugar.canvas.CanvasView import CanvasView
from sugar.canvas.CanvasBox import CanvasBox
from sugar.canvas.IconItem import IconItem
class FriendPopup(gtk.Window):
def __init__(self, shell, grid, friend):
ACTION_MAKE_FRIEND = 0
ACTION_INVITE = 0
__gsignals__ = {
'action': (gobject.SIGNAL_RUN_FIRST,
gobject.TYPE_NONE, ([int])),
}
def __init__(self, grid, friend):
gtk.Window.__init__(self, gtk.WINDOW_POPUP)
self._shell = shell
self._friend = friend
self._hover = False
self._popdown_on_leave = False
@ -46,7 +54,8 @@ class FriendPopup(gtk.Window):
grid.set_constraints(box, 0, 5)
icon = IconItem(icon_name='stock-make-friend')
icon.connect('clicked', self._make_friend_clicked_cb)
icon.connect('clicked', self._action_clicked_cb,
FriendPopup.ACTION_MAKE_FRIEND)
box.set_constraints(icon, 3, 3)
box.add_child(icon)
@ -55,7 +64,8 @@ class FriendPopup(gtk.Window):
box.add_child(icon)
icon = IconItem(icon_name='stock-invite')
icon.connect('clicked', self._invite_clicked_cb)
icon.connect('clicked', self._action_clicked_cb,
FriendPopup.ACTION_INVITE)
box.set_constraints(icon, 3, 3)
box.add_child(icon)
@ -63,17 +73,8 @@ class FriendPopup(gtk.Window):
canvas.set_model(model)
def _invite_clicked_cb(self, icon):
activity = self._shell.get_current_activity()
buddy = self._friend.get_buddy()
if buddy != None:
activity.invite(buddy)
def _make_friend_clicked_cb(self, icon):
friends = self._shell.get_owner().get_friends()
buddy = self._friend.get_buddy()
if buddy != None:
friends.add_buddy(buddy)
def _action_clicked_cb(self, icon, action):
self.emit('action', action)
def get_width(self):
return self._width

View File

@ -195,7 +195,7 @@ class IconItem(goocanvas.ItemSimple, goocanvas.Item):
self.size = 24
self.color = None
self.icon_name = None
self._popdown_timeout = 0
self._popdown_sid = 0
goocanvas.ItemSimple.__init__(self, **kwargs)
@ -242,12 +242,12 @@ class IconItem(goocanvas.ItemSimple, goocanvas.Item):
def _start_popdown_timeout(self):
self._stop_popdown_timeout()
self._popdown_timeout = gobject.timeout_add(1000, self._popdown)
self._popdown_sid = gobject.timeout_add(1000, self._popdown_timeout_cb)
def _stop_popdown_timeout(self):
if self._popdown_timeout > 0:
gobject.source_remove(self._popdown_timeout)
self._popdown_timeout = 0
if self._popdown_sid > 0:
gobject.source_remove(self._popdown_sid)
self._popdown_sid = 0
def _enter_notify_event_cb(self, view, target, event, canvas):
self._stop_popdown_timeout()
@ -266,8 +266,8 @@ class IconItem(goocanvas.ItemSimple, goocanvas.Item):
self.emit('popup', int(x1), int(y1), int(x2), int(y2))
def _popdown(self):
self._popdown_timeout = 0
def _popdown_timeout_cb(self):
self._popdown_sid = 0
self.emit('popdown')
return False