Implement the share button on the presence window

This commit is contained in:
Marco Pesenti Gritti 2006-06-13 14:49:01 -04:00
parent 2415fee0ed
commit 9ebcd65659
4 changed files with 36 additions and 4 deletions

View File

@ -84,6 +84,9 @@ class BrowserActivity(activity.Activity):
self._setup_shared(self.uri) self._setup_shared(self.uri)
def publish(self):
print 'Publish %s' % self.activity_get_id()
def get_embed(self): def get_embed(self):
return self.embed return self.embed

View File

@ -11,9 +11,11 @@ class PresenceWindow(gtk.Window):
_MODEL_COL_ICON = 1 _MODEL_COL_ICON = 1
_MODEL_COL_BUDDY = 2 _MODEL_COL_BUDDY = 2
def __init__(self): def __init__(self, activity_container):
gtk.Window.__init__(self) gtk.Window.__init__(self)
self._activity_container = activity_container
self._pservice = PresenceService.get_instance() self._pservice = PresenceService.get_instance()
self._pservice.connect("buddy-appeared", self._on_buddy_appeared_cb) self._pservice.connect("buddy-appeared", self._on_buddy_appeared_cb)
self._pservice.connect("buddy-disappeared", self._on_buddy_disappeared_cb) self._pservice.connect("buddy-disappeared", self._on_buddy_disappeared_cb)
@ -63,9 +65,17 @@ class PresenceWindow(gtk.Window):
vbox.pack_start(sw) vbox.pack_start(sw)
sw.show() sw.show()
share_button = gtk.Button('Share')
share_button.connect('clicked', self._share_button_clicked_cb)
vbox.pack_start(share_button)
share_button.show()
self.add(vbox) self.add(vbox)
vbox.show() vbox.show()
def _share_button_clicked_cb(self, button):
self._activity_container.current_activity.publish()
def _on_buddyList_buddy_selected(self, widget, *args): def _on_buddyList_buddy_selected(self, widget, *args):
(model, aniter) = widget.get_selection().get_selected() (model, aniter) = widget.get_selection().get_selected()
name = self._buddy_list_model.get(aniter, self._MODEL_COL_NICK) name = self._buddy_list_model.get(aniter, self._MODEL_COL_NICK)

View File

@ -19,6 +19,7 @@ ON_RECONNECTED_TO_SHELL_CB = "reconnected_to_shell"
ON_CLOSE_FROM_USER_CB = "close_from_user" ON_CLOSE_FROM_USER_CB = "close_from_user"
ON_LOST_FOCUS_CB = "lost_focus" ON_LOST_FOCUS_CB = "lost_focus"
ON_GOT_FOCUS_CB = "got_focus" ON_GOT_FOCUS_CB = "got_focus"
ON_PUBLISH_CB = "publish"
class ActivityDbusService(dbus.service.Object): class ActivityDbusService(dbus.service.Object):
"""Base dbus service object that each Activity uses to export dbus methods. """Base dbus service object that each Activity uses to export dbus methods.
@ -28,7 +29,7 @@ class ActivityDbusService(dbus.service.Object):
_ALLOWED_CALLBACKS = [ON_CONNECTED_TO_SHELL_CB, ON_DISCONNECTED_FROM_SHELL_CB, \ _ALLOWED_CALLBACKS = [ON_CONNECTED_TO_SHELL_CB, ON_DISCONNECTED_FROM_SHELL_CB, \
ON_RECONNECTED_TO_SHELL_CB, ON_CLOSE_FROM_USER_CB, ON_LOST_FOCUS_CB, \ ON_RECONNECTED_TO_SHELL_CB, ON_CLOSE_FROM_USER_CB, ON_LOST_FOCUS_CB, \
ON_GOT_FOCUS_CB] ON_GOT_FOCUS_CB, ON_PUBLISH_CB]
def __init__(self, activity): def __init__(self, activity):
self._activity = activity self._activity = activity
@ -123,6 +124,10 @@ class ActivityDbusService(dbus.service.Object):
"""Called by the shell to notify us that the user closed us.""" """Called by the shell to notify us that the user closed us."""
self._call_callback(ON_CLOSE_FROM_USER_CB) self._call_callback(ON_CLOSE_FROM_USER_CB)
@dbus.service.method(ACTIVITY_SERVICE_NAME)
def publish(self):
"""Called by the shell to request the activity to publish itself on the network."""
self._call_callback(ON_PUBLISH_CB)
class Activity(object): class Activity(object):
"""Base Activity class that all other Activities derive from.""" """Base Activity class that all other Activities derive from."""
@ -133,6 +138,7 @@ class Activity(object):
self._dbus_service.register_callback(ON_DISCONNECTED_FROM_SHELL_CB, self._internal_on_disconnected_from_shell_cb) self._dbus_service.register_callback(ON_DISCONNECTED_FROM_SHELL_CB, self._internal_on_disconnected_from_shell_cb)
self._dbus_service.register_callback(ON_RECONNECTED_TO_SHELL_CB, self._internal_on_reconnected_to_shell_cb) self._dbus_service.register_callback(ON_RECONNECTED_TO_SHELL_CB, self._internal_on_reconnected_to_shell_cb)
self._dbus_service.register_callback(ON_CLOSE_FROM_USER_CB, self._internal_on_close_from_user_cb) self._dbus_service.register_callback(ON_CLOSE_FROM_USER_CB, self._internal_on_close_from_user_cb)
self._dbus_service.register_callback(ON_PUBLISH_CB, self._internal_on_publish_cb)
self._dbus_service.register_callback(ON_LOST_FOCUS_CB, self._internal_on_lost_focus_cb) self._dbus_service.register_callback(ON_LOST_FOCUS_CB, self._internal_on_lost_focus_cb)
self._dbus_service.register_callback(ON_GOT_FOCUS_CB, self._internal_on_got_focus_cb) self._dbus_service.register_callback(ON_GOT_FOCUS_CB, self._internal_on_got_focus_cb)
self._has_focus = False self._has_focus = False
@ -187,6 +193,10 @@ class Activity(object):
self.shutdown() self.shutdown()
self.on_close_from_user() self.on_close_from_user()
def _internal_on_publish_cb(self):
"""Callback when the dbus service object tells us the user has closed our activity."""
self.publish()
def _internal_on_lost_focus_cb(self): def _internal_on_lost_focus_cb(self):
"""Callback when the dbus service object tells us we have lost focus.""" """Callback when the dbus service object tells us we have lost focus."""
self._has_focus = False self._has_focus = False
@ -262,6 +272,10 @@ class Activity(object):
# Pure Virtual methods that subclasses may/may not implement # Pure Virtual methods that subclasses may/may not implement
############################################################# #############################################################
def publish(self):
"""Called to request the activity to publish itself on the network."""
pass
def on_lost_focus(self): def on_lost_focus(self):
"""Triggered when this Activity loses focus.""" """Triggered when this Activity loses focus."""
pass pass

View File

@ -74,6 +74,9 @@ class ActivityHost(dbus.service.Object):
def __close_button_clicked_error_cb(self, error): def __close_button_clicked_error_cb(self, error):
pass pass
def publish(self):
self.peer_service.publish()
def tab_close_button_clicked(self, button): def tab_close_button_clicked(self, button):
self.peer_service.close_from_user(reply_handler = self.__close_button_clicked_reply_cb, \ self.peer_service.close_from_user(reply_handler = self.__close_button_clicked_reply_cb, \
error_handler = self.__close_button_clicked_error_cb) error_handler = self.__close_button_clicked_error_cb)
@ -292,6 +295,8 @@ class ActivityContainer(dbus.service.Object):
activity = ActivityHost(self, activity_name) activity = ActivityHost(self, activity_name)
self.activities.append((sender, activity)) self.activities.append((sender, activity))
self.current_activity = activity
#self.__print_activities() #self.__print_activities()
return activity.get_host_activity_id() return activity.get_host_activity_id()
@ -368,7 +373,7 @@ def main():
activity_container = ActivityContainer(service, session_bus) activity_container = ActivityContainer(service, session_bus)
activity_container.show() activity_container.show()
presence_window = PresenceWindow() presence_window = PresenceWindow(activity_container)
presence_window.show() presence_window.show()
console.set_parent_window(activity_container.window) console.set_parent_window(activity_container.window)