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) FriendIcon._popup_shell.set_active(None)
grid = Grid() 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.connect('enter-notify-event',
self._popup_enter_notify_event_cb) self._popup_enter_notify_event_cb)
self._popup.connect('leave-notify-event', self._popup.connect('leave-notify-event',
@ -74,9 +75,25 @@ class FriendIcon(IconItem):
FriendIcon._popup_shell.set_active(self) 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): def _popdown_cb(self, friend):
if not self._hover_popup: if not self._hover_popup:
self._popdown() self._popdown()
else:
self._popdown_on_leave = True
def _popup_enter_notify_event_cb(self, widget, event): def _popup_enter_notify_event_cb(self, widget, event):
self._hover_popup = True self._hover_popup = True

View File

@ -1,15 +1,23 @@
import gtk import gtk
import goocanvas import goocanvas
import gobject
from sugar.canvas.CanvasView import CanvasView from sugar.canvas.CanvasView import CanvasView
from sugar.canvas.CanvasBox import CanvasBox from sugar.canvas.CanvasBox import CanvasBox
from sugar.canvas.IconItem import IconItem from sugar.canvas.IconItem import IconItem
class FriendPopup(gtk.Window): 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) gtk.Window.__init__(self, gtk.WINDOW_POPUP)
self._shell = shell
self._friend = friend self._friend = friend
self._hover = False self._hover = False
self._popdown_on_leave = False self._popdown_on_leave = False
@ -46,7 +54,8 @@ class FriendPopup(gtk.Window):
grid.set_constraints(box, 0, 5) grid.set_constraints(box, 0, 5)
icon = IconItem(icon_name='stock-make-friend') 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.set_constraints(icon, 3, 3)
box.add_child(icon) box.add_child(icon)
@ -55,7 +64,8 @@ class FriendPopup(gtk.Window):
box.add_child(icon) box.add_child(icon)
icon = IconItem(icon_name='stock-invite') 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.set_constraints(icon, 3, 3)
box.add_child(icon) box.add_child(icon)
@ -63,17 +73,8 @@ class FriendPopup(gtk.Window):
canvas.set_model(model) canvas.set_model(model)
def _invite_clicked_cb(self, icon): def _action_clicked_cb(self, icon, action):
activity = self._shell.get_current_activity() self.emit('action', action)
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 get_width(self): def get_width(self):
return self._width return self._width

View File

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