mirror of
https://github.com/virt-manager/virt-manager.git
synced 2024-10-27 01:55:20 +03:00
Allow application to remain running if manager window is closed, but a 'Details' window is still present.
This commit is contained in:
parent
484bc23638
commit
0f75898fc3
@ -92,21 +92,23 @@ class vmmDetails(gobject.GObject):
|
||||
}
|
||||
|
||||
|
||||
def __init__(self, config, vm):
|
||||
def __init__(self, config, vm, engine):
|
||||
self.__gobject_init__()
|
||||
self.window = gtk.glade.XML(config.get_glade_dir() + "/vmm-details.glade", "vmm-details", domain="virt-manager")
|
||||
self.config = config
|
||||
self.vm = vm
|
||||
|
||||
topwin = self.window.get_widget("vmm-details")
|
||||
topwin.hide_all()
|
||||
self.err = vmmErrorDialog(topwin,
|
||||
0, gtk.MESSAGE_ERROR, gtk.BUTTONS_CLOSE,
|
||||
_("Unexpected Error"),
|
||||
_("An unexpected error occurred"))
|
||||
topwin.hide()
|
||||
self.title = vm.get_name() + " " + topwin.get_title()
|
||||
topwin.set_title(self.title)
|
||||
|
||||
self.engine = engine
|
||||
|
||||
# Don't allowing changing network/disks for Dom0
|
||||
# XXX also disable for remote connections for now
|
||||
if self.vm.is_management_domain() or self.vm.get_connection().is_remote():
|
||||
@ -272,12 +274,12 @@ class vmmDetails(gobject.GObject):
|
||||
self.window.get_widget("hw-list").get_selection().connect("changed", self.hw_selected)
|
||||
|
||||
self.update_widget_states(self.vm, self.vm.status())
|
||||
self.refresh_resources(self.vm)
|
||||
|
||||
self.pixbuf_processor = gtk.gdk.pixbuf_new_from_file(config.get_icon_dir() + "/icon_cpu.png")
|
||||
self.pixbuf_memory = gtk.gdk.pixbuf_new_from_file(config.get_icon_dir() + "/icon_cpu.png")
|
||||
self.prepare_hw_list()
|
||||
self.hw_selected()
|
||||
self.refresh_resources(self.vm)
|
||||
|
||||
|
||||
# Black magic todo with scrolled windows. Basically the behaviour we want
|
||||
@ -415,6 +417,8 @@ class vmmDetails(gobject.GObject):
|
||||
self.window.get_widget("details-toolbar").hide()
|
||||
|
||||
def show(self):
|
||||
if self.is_visible():
|
||||
return
|
||||
dialog = self.window.get_widget("vmm-details")
|
||||
dialog.show_all()
|
||||
self.window.get_widget("overview-network-traffic-text").hide()
|
||||
@ -424,6 +428,7 @@ class vmmDetails(gobject.GObject):
|
||||
self.window.get_widget("overview-disk-usage-label").hide()
|
||||
self.network_traffic_graph.hide()
|
||||
dialog.present()
|
||||
self.engine.increment_window_counter()
|
||||
self.update_widget_states(self.vm, self.vm.status())
|
||||
|
||||
def show_help(self, src):
|
||||
@ -446,10 +451,11 @@ class vmmDetails(gobject.GObject):
|
||||
|
||||
self.window.get_widget("vmm-details").hide()
|
||||
if self.vncViewer.flags() & gtk.VISIBLE:
|
||||
try:
|
||||
try:
|
||||
self.vncViewer.close()
|
||||
except:
|
||||
logging.error("Failure when disconnecting from VNC server")
|
||||
except:
|
||||
logging.error("Failure when disconnecting from VNC server")
|
||||
self.engine.decrement_window_counter()
|
||||
return 1
|
||||
|
||||
def is_visible(self):
|
||||
|
@ -61,6 +61,10 @@ class vmmEngine(gobject.GObject):
|
||||
self.timer = None
|
||||
self.last_timeout = 0
|
||||
|
||||
# Counter keeping track of how many manager and details windows
|
||||
# are open. When it is decremented to 0, close the app
|
||||
self.windows = 0
|
||||
|
||||
self._save_callback_info = []
|
||||
|
||||
self.config = config
|
||||
@ -275,8 +279,7 @@ class vmmEngine(gobject.GObject):
|
||||
|
||||
if not(self.connections[uri]["windowDetails"].has_key(uuid)):
|
||||
try:
|
||||
details = vmmDetails(self.get_config(),
|
||||
con.get_vm(uuid))
|
||||
details = vmmDetails(self.get_config(), con.get_vm(uuid), self)
|
||||
details.connect("action-save-domain", self._do_save_domain)
|
||||
details.connect("action-destroy-domain", self._do_destroy_domain)
|
||||
details.connect("action-show-help", self._do_show_help)
|
||||
@ -317,6 +320,20 @@ class vmmEngine(gobject.GObject):
|
||||
def show_manager(self):
|
||||
self.get_manager().show()
|
||||
|
||||
def increment_window_counter(self):
|
||||
self.windows += 1
|
||||
logging.debug("window counter incremented to %s" % self.windows)
|
||||
|
||||
def decrement_window_counter(self):
|
||||
self.windows -= 1
|
||||
logging.debug("window counter decremented to %s" % self.windows)
|
||||
if self.windows <= 0:
|
||||
conns = self.connections.values()
|
||||
for conn in conns:
|
||||
conn["connection"].close()
|
||||
gtk.main_quit()
|
||||
|
||||
|
||||
def wait_for_open(self, uri):
|
||||
# Used to ensure connection fully starts before running
|
||||
# ONLY CALL FROM WITHIN A THREAD
|
||||
|
@ -105,13 +105,13 @@ class vmmManager(gobject.GObject):
|
||||
def __init__(self, config, engine):
|
||||
self.__gobject_init__()
|
||||
self.window = gtk.glade.XML(config.get_glade_dir() + "/vmm-manager.glade", "vmm-manager", domain="virt-manager")
|
||||
self.window.get_widget("vmm-manager").hide_all()
|
||||
self.err = vmmErrorDialog(self.window.get_widget("vmm-manager"),
|
||||
0, gtk.MESSAGE_ERROR, gtk.BUTTONS_CLOSE,
|
||||
_("Unexpected Error"),
|
||||
_("An unexpected error occurred"))
|
||||
self.config = config
|
||||
self.engine = engine
|
||||
self.connections = {}
|
||||
self.prepare_vmlist()
|
||||
|
||||
self.config.on_vmlist_domain_id_visible_changed(self.toggle_domain_id_visible_widget)
|
||||
@ -285,17 +285,18 @@ class vmmManager(gobject.GObject):
|
||||
self.engine.connect("connection-removed", self._remove_connection)
|
||||
|
||||
def show(self):
|
||||
win = self.window.get_widget("vmm-manager")
|
||||
win.show_all()
|
||||
win.present()
|
||||
if not self.is_visible():
|
||||
win = self.window.get_widget("vmm-manager")
|
||||
win.show_all()
|
||||
win.present()
|
||||
self.engine.increment_window_counter()
|
||||
|
||||
def close(self, src=None, src2=None):
|
||||
conns = self.connections.values()
|
||||
for conn in conns:
|
||||
conn.close()
|
||||
win = self.window.get_widget("vmm-manager")
|
||||
win.hide()
|
||||
gtk.main_quit()
|
||||
if self.is_visible():
|
||||
win = self.window.get_widget("vmm-manager")
|
||||
win.hide()
|
||||
self.engine.decrement_window_counter()
|
||||
return 1
|
||||
|
||||
def is_visible(self):
|
||||
if self.window.get_widget("vmm-manager").flags() & gtk.VISIBLE:
|
||||
|
Loading…
Reference in New Issue
Block a user