From ddadec4a7eefd66e0024b782f89cf0ef040fa239 Mon Sep 17 00:00:00 2001 From: Karel Zak Date: Fri, 3 Nov 2006 10:02:02 -0500 Subject: [PATCH] fix problem with never ending gtk.main() --- AUTHORS | 1 + src/virtManager/console.py | 5 +++++ src/virtManager/create.py | 5 +++++ src/virtManager/details.py | 5 +++++ src/virtManager/engine.py | 15 +++++++++++++++ src/virtManager/manager.py | 5 +++++ src/virtManager/serialcon.py | 5 +++++ 7 files changed, 41 insertions(+) diff --git a/AUTHORS b/AUTHORS index e2b7ba63f..a022924a1 100644 --- a/AUTHORS +++ b/AUTHORS @@ -15,6 +15,7 @@ done by: Further patches have been submitted by: William Sheehan + Karel Zak <...send a patch & get your name here...> diff --git a/src/virtManager/console.py b/src/virtManager/console.py index aa831d543..f3b1a9ab7 100644 --- a/src/virtManager/console.py +++ b/src/virtManager/console.py @@ -136,6 +136,11 @@ class vmmConsole(gobject.GObject): logging.error("Failure when disconnecting from VNC server") return 1 + def is_visible(self): + if self.window.get_widget("vmm-console").flags() & gtk.VISIBLE: + return 1 + return 0 + def control_vm_run(self, src): return 0 diff --git a/src/virtManager/create.py b/src/virtManager/create.py index c139ddb04..5dd6333cc 100644 --- a/src/virtManager/create.py +++ b/src/virtManager/create.py @@ -309,6 +309,11 @@ class vmmCreate(gobject.GObject): self.topwin.hide() return 1 + def is_visible(self): + if self.topwin.flags() & gtk.VISIBLE: + return 1 + return 0 + def finish(self, ignore=None): # first things first, are we trying to create a fully virt guest? if self.get_config_method() == VM_FULLY_VIRT: diff --git a/src/virtManager/details.py b/src/virtManager/details.py index 7dd637ea3..cd668c98d 100644 --- a/src/virtManager/details.py +++ b/src/virtManager/details.py @@ -148,6 +148,11 @@ class vmmDetails(gobject.GObject): self.window.get_widget("vmm-details").hide() return 1 + def is_visible(self): + if self.window.get_widget("vmm-details").flags() & gtk.VISIBLE: + return 1 + return 0 + def hw_selected(self, src=None): vmlist = self.window.get_widget("hw-list") selection = vmlist.get_selection() diff --git a/src/virtManager/engine.py b/src/virtManager/engine.py index f1506ad0b..664d33058 100644 --- a/src/virtManager/engine.py +++ b/src/virtManager/engine.py @@ -116,6 +116,9 @@ class vmmEngine: self.timer = gobject.timeout_add(interval, self.tick) def tick(self): + if self.windowConnect == None and gtk.main_level() > 0 and self.count_visible_windows() == 0: + gtk.main_quit() + for uri in self.connections.keys(): try: self.connections[uri]["connection"].tick() @@ -125,6 +128,18 @@ class vmmEngine: logging.error(("Could not refresh connection %s" % (uri)) + str(sys.exc_info()[0]) + " " + str(sys.exc_info()[1])) return 1 + def count_visible_windows(self): + ct = 0 + for conn in self.connections.values(): + for name in [ "windowDetails", "windowConsole", "windowSerialConsole" ]: + for window in conn[name].values(): + ct += window.is_visible() + if conn["windowManager"]: + ct += conn["windowManager"].is_visible() + if self.windowCreate: + ct += self.windowCreate.is_visible() + return ct + def change_timer_interval(self,ignore1,ignore2,ignore3,ignore4): gobject.source_remove(self.timer) self.schedule_timer() diff --git a/src/virtManager/manager.py b/src/virtManager/manager.py index 9a7de6d76..e7032d4ac 100644 --- a/src/virtManager/manager.py +++ b/src/virtManager/manager.py @@ -153,6 +153,11 @@ class vmmManager(gobject.GObject): win.hide() return 1 + def is_visible(self): + if self.window.get_widget("vmm-manager").flags() & gtk.VISIBLE: + return 1 + return 0 + def exit_app(self, src=None, src2=None): gtk.main_quit() diff --git a/src/virtManager/serialcon.py b/src/virtManager/serialcon.py index 9e5984e81..76c2ac87d 100644 --- a/src/virtManager/serialcon.py +++ b/src/virtManager/serialcon.py @@ -71,6 +71,11 @@ class vmmSerialConsole: self.window.hide() return True + def is_visible(self): + if self.window.flags() & gtk.VISIBLE: + return 1 + return 0 + def opentty(self): if self.ptyio != None: self.closetty()