From 13f2a7bc159d71fc2d04218acac692fc5cba3292 Mon Sep 17 00:00:00 2001 From: Jon Nordby Date: Thu, 29 Oct 2009 11:08:40 -0400 Subject: [PATCH] Keep app running on close if systray enabled. --- AUTHORS | 1 + src/virtManager/engine.py | 22 +++++++++++++++++++--- src/virtManager/systray.py | 4 +++- 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/AUTHORS b/AUTHORS index 65a65f4aa..15c841d4b 100644 --- a/AUTHORS +++ b/AUTHORS @@ -61,6 +61,7 @@ Further patches have been submitted by: Michal Novotny Paul W. Frields Fred Leeflang + Jon Nordby <...send a patch & get your name here...> diff --git a/src/virtManager/engine.py b/src/virtManager/engine.py index cd2894e31..c488dafdf 100644 --- a/src/virtManager/engine.py +++ b/src/virtManager/engine.py @@ -78,13 +78,15 @@ class vmmEngine(gobject.GObject): logging.debug("Libvirt doesn't support threading, skipping.") # Counter keeping track of how many manager and details windows - # are open. When it is decremented to 0, close the app + # are open. When it is decremented to 0, close the app or + # keep running in system tray if enabled self.windows = 0 self.netdevHelper = vmmNetDevHelper(self.config) self.init_systray() self.config.on_stats_update_interval_changed(self.reschedule_timer) + self.config.on_view_system_tray_changed(self.system_tray_changed) self.schedule_timer() self.load_stored_uris() @@ -95,7 +97,7 @@ class vmmEngine(gobject.GObject): return self.systray = vmmSystray(self.config, self) - self.systray.connect("action-view-manager", self._do_show_manager) + self.systray.connect("action-toggle-manager", self._do_toggle_manager) self.systray.connect("action-suspend-domain", self._do_suspend_domain) self.systray.connect("action-resume-domain", self._do_resume_domain) self.systray.connect("action-run-domain", self._do_run_domain) @@ -106,6 +108,12 @@ class vmmEngine(gobject.GObject): self.systray.connect("action-show-details", self._do_show_details) self.systray.connect("action-exit-app", self._do_exit_app) + def system_tray_changed(self, *ignore): + systray_enabled = self.config.get_view_system_tray() + if self.windows == 0 and not systray_enabled: + # Show the manager so that the user can control the application + self.show_manager() + def load_stored_uris(self): uris = self.config.get_connections() if uris != None: @@ -233,6 +241,8 @@ class vmmEngine(gobject.GObject): self.show_help(index) def _do_show_console(self, src, uri, uuid): self.show_console(uri, uuid) + def _do_toggle_manager(self, src): + self.toggle_manager() def _do_show_manager(self, src): self.show_manager() def _do_refresh_console(self, src, uri, uuid): @@ -364,6 +374,11 @@ class vmmEngine(gobject.GObject): self.windowManager.connect("action-exit-app", self._do_exit_app) return self.windowManager + def toggle_manager(self): + manager = self.get_manager() + if not manager.close(): + manager.show() + def show_manager(self): self.get_manager().show() @@ -374,7 +389,8 @@ class vmmEngine(gobject.GObject): def decrement_window_counter(self): self.windows -= 1 logging.debug("window counter decremented to %s" % self.windows) - if self.windows <= 0: + # Don't exit if system tray is enabled + if self.windows <= 0 and not self.config.get_view_system_tray() : self.exit_app() def exit_app(self): diff --git a/src/virtManager/systray.py b/src/virtManager/systray.py index e3dd3d53f..672da9e2e 100644 --- a/src/virtManager/systray.py +++ b/src/virtManager/systray.py @@ -24,6 +24,8 @@ import gtk.glade class vmmSystray(gobject.GObject): __gsignals__ = { + "action-toggle-manager": (gobject.SIGNAL_RUN_FIRST, + gobject.TYPE_NONE, []), "action-view-manager": (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, []), "action-suspend-domain": (gobject.SIGNAL_RUN_FIRST, @@ -208,7 +210,7 @@ class vmmSystray(gobject.GObject): # Listeners def systray_activate(self, widget): - self.emit("action-view-manager") + self.emit("action-toggle-manager") def systray_popup(self, widget, button, event_time): if button != 3: