Make activities emit an ActivityShared dbus signal; and have the shell & presence window detect that and disable the 'share' button

This commit is contained in:
Dan Williams
2006-06-22 22:42:29 -04:00
parent be992586b1
commit f2ef2a6847
4 changed files with 68 additions and 5 deletions
+10 -4
View File
@@ -40,6 +40,12 @@ class PresenceWindow(gtk.Window):
def set_activity(self, activity):
self._activity = activity
self._update_buddies_visibility()
if activity:
if self._activity.get_shared():
self._share_button.set_sensitive(False)
else:
self._share_button.set_sensitive(True)
self._activity.connect('shared', lambda w: self._share_button.set_sensitive(False))
def _setup_ui(self):
vbox = gtk.VBox(False, 6)
@@ -87,10 +93,10 @@ class PresenceWindow(gtk.Window):
button_box = gtk.HButtonBox()
share_button = gtk.Button('Share')
share_button.connect('clicked', self._share_button_clicked_cb)
button_box.pack_start(share_button)
share_button.show()
self._share_button = gtk.Button('Share')
self._share_button.connect('clicked', self._share_button_clicked_cb)
button_box.pack_start(self._share_button)
self._share_button.show()
vbox.pack_start(button_box, False)
button_box.show()
+37 -1
View File
@@ -19,11 +19,25 @@ from StartPage import StartPage
from WindowManager import WindowManager
from PresenceWindow import PresenceWindow
class ActivityHost(dbus.service.Object):
class ActivityHostSignalHelper(gobject.GObject):
__gsignals__ = {
'shared': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ([]))
}
def __init__(self, parent):
gobject.GObject.__init__(self)
self._parent = parent
def emit_shared(self):
self.emit('shared')
class ActivityHost(dbus.service.Object):
def __init__(self, activity_container, activity_name, default_type, activity_id = None):
self.activity_name = activity_name
self.ellipsize_tab = False
self._shared = False
self._signal_helper = ActivityHostSignalHelper(self)
self.activity_container = activity_container
@@ -113,6 +127,18 @@ class ActivityHost(dbus.service.Object):
#print "window_id = %d"%window_id
return window_id
def connect(self, signal, func):
self._signal_helper.connect(signal, func)
def get_shared(self):
"""Return True if this activity is shared, False if
it has not been shared yet."""
return self._shared
def _shared_signal(self):
self._shared = True
self._signal_helper.emit_shared()
@dbus.service.method("com.redhat.Sugar.Shell.ActivityHost", \
in_signature="ss", \
out_signature="")
@@ -123,6 +149,11 @@ class ActivityHost(dbus.service.Object):
self.peer_service = dbus.Interface(self.activity_container.bus.get_object( \
self.__peer_service_name, self.__peer_object_name), \
"com.redhat.Sugar.Activity")
self.activity_container.bus.add_signal_receiver(self._shared_signal,
signal_name="ActivityShared",
dbus_interface="com.redhat.Sugar.Activity",
named_service=self.__peer_service_name,
path=self.__peer_object_name)
@dbus.service.method("com.redhat.Sugar.Shell.ActivityHost", \
in_signature="b", \
@@ -213,6 +244,11 @@ class ActivityHost(dbus.service.Object):
get_id() function."""
return self.activity_id
def default_type(self):
"""Interface-type function to match activity.Activity's
default_type() function."""
return self._default_type
def get_object_path(self):
return self.dbus_object_name