Abstract activity on the shell side into an ActivityHost object.
Comment out/fix more ps borkage.
This commit is contained in:
@@ -0,0 +1,30 @@
|
||||
import gtk
|
||||
import dbus
|
||||
|
||||
from sugar.activity import Activity
|
||||
|
||||
class ActivityHost:
|
||||
def __init__(self, xid):
|
||||
self._xid = xid
|
||||
|
||||
bus = dbus.SessionBus()
|
||||
service = Activity.ACTIVITY_SERVICE_NAME + "%s" % xid
|
||||
path = Activity.ACTIVITY_SERVICE_PATH + "/%s" % xid
|
||||
proxy_obj = bus.get_object(service, path)
|
||||
|
||||
self._activity = dbus.Interface(proxy_obj, 'com.redhat.Sugar.Activity')
|
||||
self._id = self._activity.get_id()
|
||||
self._window = gtk.gdk.window_foreign_new(xid)
|
||||
|
||||
def get_id(self):
|
||||
return self._id
|
||||
|
||||
def publish(self):
|
||||
self._activity.publish()
|
||||
|
||||
def get_shared(self):
|
||||
return self._activity.get_shared()
|
||||
|
||||
def show_dialog(self, dialog):
|
||||
dialog.show()
|
||||
dialog.window.set_transient_for(self._window)
|
||||
@@ -20,12 +20,9 @@ class PresenceView(gtk.VBox):
|
||||
self._activity = None
|
||||
self._shell = shell
|
||||
|
||||
self._pservice = PresenceService.get_instance()
|
||||
self._pservice.connect("buddy-appeared", self._on_buddy_appeared_cb)
|
||||
self._pservice.connect("buddy-disappeared", self._on_buddy_disappeared_cb)
|
||||
self._pservice.start()
|
||||
|
||||
self._pservice.track_service_type(BuddyChat.SERVICE_TYPE)
|
||||
self._pservice = PresenceService()
|
||||
self._pservice.connect("BuddyAppeared", self._on_buddy_appeared_cb)
|
||||
self._pservice.connect("BuddyDisappeared", self._on_buddy_disappeared_cb)
|
||||
|
||||
self._setup_ui()
|
||||
|
||||
|
||||
+17
-28
@@ -11,10 +11,10 @@ from ActivityRegistry import ActivityRegistry
|
||||
from HomeWindow import HomeWindow
|
||||
from sugar import keybindings
|
||||
from sugar import env
|
||||
from sugar.activity import Activity
|
||||
from PeopleWindow import PeopleWindow
|
||||
from Owner import ShellOwner
|
||||
from PresenceService import PresenceService
|
||||
from ActivityHost import ActivityHost
|
||||
|
||||
class ShellDbusService(dbus.service.Object):
|
||||
def __init__(self, shell, bus_name):
|
||||
@@ -66,40 +66,29 @@ class Shell:
|
||||
else:
|
||||
window.show()
|
||||
|
||||
def get_activity_from_xid(self, xid):
|
||||
bus = dbus.SessionBus()
|
||||
service = Activity.ACTIVITY_SERVICE_NAME + "%s" % xid
|
||||
path = Activity.ACTIVITY_SERVICE_PATH + "/%s" % xid
|
||||
proxy_obj = bus.get_object(service, path)
|
||||
def get_current_activity(self):
|
||||
window = self._screen.get_active_window()
|
||||
if window and window.get_window_type() == wnck.WINDOW_NORMAL:
|
||||
return ActivityHost(window.get_xid())
|
||||
else:
|
||||
return None
|
||||
|
||||
return dbus.Interface(proxy_obj, 'com.redhat.Sugar.Activity')
|
||||
|
||||
def get_activity_window(self):
|
||||
return self._screen.get_active_window()
|
||||
|
||||
def __people_window_delete_cb(self, window, event):
|
||||
def __people_dialog_delete_cb(self, window, event):
|
||||
window.hide()
|
||||
return True
|
||||
|
||||
def show_people(self):
|
||||
activity_window = self.get_activity_window()
|
||||
if activity_window:
|
||||
xid = activity_window.get_xid()
|
||||
activity = self.get_activity_from_xid(xid)
|
||||
activity_id = activity.get_id()
|
||||
|
||||
if not self._people_windows.has_key(activity_id):
|
||||
window = PeopleWindow(self, activity)
|
||||
window.connect('delete-event', self.__people_window_delete_cb)
|
||||
keybindings.setup_global_keys(window, self)
|
||||
self._people_windows[activity_id] = window
|
||||
activity = self.get_current_activity()
|
||||
if activity:
|
||||
if not self._people_windows.has_key(activity.get_id()):
|
||||
dialog = PeopleWindow(self, activity)
|
||||
dialog.connect('delete-event', self.__people_dialog_delete_cb)
|
||||
keybindings.setup_global_keys(dialog, self)
|
||||
self._people_windows[activity.get_id()] = dialog
|
||||
else:
|
||||
window = self._people_windows[activity_id]
|
||||
dialog = self._people_windows[activity.get_id()]
|
||||
|
||||
window.show()
|
||||
|
||||
foreign_activity_win = gtk.gdk.window_foreign_new(xid)
|
||||
window.window.set_transient_for(foreign_activity_win)
|
||||
activity.show_dialog(dialog)
|
||||
|
||||
def toggle_console(self):
|
||||
self._toggle_window_visibility(self._console.get_window())
|
||||
|
||||
Reference in New Issue
Block a user