From c5fb39875c9a6609868ef7295193840df183a6f4 Mon Sep 17 00:00:00 2001 From: Marco Pesenti Gritti Date: Sat, 12 Aug 2006 00:29:32 +0200 Subject: [PATCH] Do not open multiple copies of the same activity --- shell/ActivityHost.py | 15 +++++++++------ shell/Shell.py | 21 +++++++++++++-------- shell/session/Emulator.py | 1 - 3 files changed, 22 insertions(+), 15 deletions(-) diff --git a/shell/ActivityHost.py b/shell/ActivityHost.py index c5c03358..639c589d 100644 --- a/shell/ActivityHost.py +++ b/shell/ActivityHost.py @@ -7,17 +7,17 @@ from PeopleWindow import PeopleWindow class ActivityHost: def __init__(self, shell, window): self._shell = shell - - xid = window.get_xid() + self._window = window + self._xid = window.get_xid() bus = dbus.SessionBus() - proxy_obj = bus.get_object(Activity.get_service_name(xid), - Activity.get_object_path(xid)) + proxy_obj = bus.get_object(Activity.get_service_name(self._xid), + Activity.get_object_path(self._xid)) self._activity = dbus.Interface(proxy_obj, Activity.ACTIVITY_INTERFACE) self._id = self._activity.get_id() self._default_type = self._activity.get_default_type() - self._window = gtk.gdk.window_foreign_new(window.get_xid()) + self._gdk_window = gtk.gdk.window_foreign_new(self._xid) self._people_window = PeopleWindow(shell, self) def get_id(self): @@ -36,6 +36,9 @@ class ActivityHost: def show_people(self): self.show_dialog(self._people_window) + def present(self): + self._window.activate(gtk.get_current_event_time()) + def show_dialog(self, dialog): dialog.show() - dialog.window.set_transient_for(self._window) + dialog.window.set_transient_for(self._gdk_window) diff --git a/shell/Shell.py b/shell/Shell.py index bf0d89be..db21135f 100755 --- a/shell/Shell.py +++ b/shell/Shell.py @@ -90,7 +90,7 @@ class Shell(gobject.GObject): del self._hosts[xid] def get_activity(self, activity_id): - for host in self._hosts: + for host in self._hosts.values(): if host.get_id() == activity_id: return host return None @@ -128,15 +128,20 @@ class Shell(gobject.GObject): info = self._registry.get_activity(service.get_type()) activity_id = service.get_activity_id() - pservice = PresenceService() - activity_ps = pservice.get_activity(activity_id) - if activity_ps: - activity = ActivityFactory.create(info.get_id()) - activity.set_default_type(service.get_type()) - activity.join(activity_ps.object_path()) + activity = self.get_activity(activity_id) + if activity: + activity.present() else: - logging.error('Cannot start activity.') + pservice = PresenceService() + activity_ps = pservice.get_activity(activity_id) + + if activity_ps: + activity = ActivityFactory.create(info.get_id()) + activity.set_default_type(service.get_type()) + activity.join(activity_ps.object_path()) + else: + logging.error('Cannot start activity.') def start_activity(self, activity_name): activity = ActivityFactory.create(activity_name) diff --git a/shell/session/Emulator.py b/shell/session/Emulator.py index 4928ec4d..2bb2b3ac 100644 --- a/shell/session/Emulator.py +++ b/shell/session/Emulator.py @@ -14,7 +14,6 @@ def get_display_number(): s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try: s.connect(('127.0.0.1', 6000 + display_number)) - logging.info('Display %d is already in use. Trying next.' % (display_number)) s.close() display_number += 1