delete: Convert to singleton

This commit is contained in:
Cole Robinson
2018-03-14 17:48:17 -04:00
parent 1780d0e9f0
commit 65b512ae6f
6 changed files with 23 additions and 33 deletions

View File

@@ -45,10 +45,21 @@ STORAGE_ROW_TOOLTIP = 7
class vmmDeleteDialog(vmmGObjectUI):
_instance = None
@classmethod
def show_instance(cls, parentobj, vm):
try:
if not cls._instance:
cls._instance = cls()
cls._instance.show(parentobj.topwin, vm)
except Exception as e:
parentobj.err.show_err(
_("Error launching delete dialog: %s") % str(e))
def __init__(self):
vmmGObjectUI.__init__(self, "delete.ui", "vmm-delete")
self.vm = None
self.conn = None
self.builder.connect_signals({
"on_vmm_delete_delete_event": self.close,
@@ -66,10 +77,9 @@ class vmmDeleteDialog(vmmGObjectUI):
prepare_storage_list(self.widget("delete-storage-list"))
def show(self, vm, parent):
def show(self, parent, vm):
logging.debug("Showing delete wizard")
self.vm = vm
self.conn = vm.conn
self.reset_state()
self.topwin.set_transient_for(parent)
@@ -79,12 +89,10 @@ class vmmDeleteDialog(vmmGObjectUI):
logging.debug("Closing delete wizard")
self.topwin.hide()
self.vm = None
self.conn = None
return 1
def _cleanup(self):
self.vm = None
self.conn = None
def reset_state(self):
# Set VM name in title'
@@ -105,7 +113,7 @@ class vmmDeleteDialog(vmmGObjectUI):
self.widget("delete-remove-storage").toggled()
populate_storage_list(self.widget("delete-storage-list"),
self.vm, self.conn)
self.vm, self.vm.conn)
def toggle_remove_storage(self, src):
dodel = src.get_active()
@@ -130,7 +138,7 @@ class vmmDeleteDialog(vmmGObjectUI):
if error is not None:
self.err.show_err(error, details=details)
self.conn.schedule_priority_tick(pollvm=True)
self.vm.conn.schedule_priority_tick(pollvm=True)
self.close()
def finish(self, src_ignore):
@@ -169,7 +177,7 @@ class vmmDeleteDialog(vmmGObjectUI):
logging.debug("Forcing VM '%s' power off.", self.vm.get_name())
self.vm.destroy()
conn = self.conn.get_backend()
conn = self.vm.conn.get_backend()
meter = asyncjob.get_meter()
for path in paths:

View File

@@ -342,7 +342,6 @@ class vmmDetails(vmmGObjectUI):
"action-exit-app": (GObject.SignalFlags.RUN_FIRST, None, []),
"action-view-manager": (GObject.SignalFlags.RUN_FIRST, None, []),
"action-migrate-domain": (GObject.SignalFlags.RUN_FIRST, None, [str, str]),
"action-delete-domain": (GObject.SignalFlags.RUN_FIRST, None, [str, str]),
"action-clone-domain": (GObject.SignalFlags.RUN_FIRST, None, [str, str]),
"details-closed": (GObject.SignalFlags.RUN_FIRST, None, []),
"details-opened": (GObject.SignalFlags.RUN_FIRST, None, []),

View File

@@ -34,7 +34,6 @@ from .clone import vmmCloneVM
from .connmanager import vmmConnectionManager
from .connect import vmmConnect
from .create import vmmCreate
from .delete import vmmDeleteDialog
from .details import vmmDetails
from .error import vmmErrorDialog
from .host import vmmHost
@@ -86,7 +85,6 @@ class vmmEngine(vmmGObject):
self.last_timeout = 0
self._systray = None
self.delete_dialog = None
self._gtkapplication = None
self._init_gtk_application()
@@ -184,7 +182,6 @@ class vmmEngine(vmmGObject):
self._systray.connect("action-toggle-manager", self._do_toggle_manager)
self._systray.connect("action-show-domain", self._do_show_vm)
self._systray.connect("action-migrate-domain", self._do_show_migrate)
self._systray.connect("action-delete-domain", self._do_delete_domain)
self._systray.connect("action-clone-domain", self._do_show_clone)
self._systray.connect("action-exit-app", self.exit_app)
@@ -421,10 +418,6 @@ class vmmEngine(vmmGObject):
self.windowMigrate.cleanup()
self.windowMigrate = None
if self.delete_dialog:
self.delete_dialog.cleanup()
self.delete_dialog = None
# Do this last, so any manually 'disconnected' signals
# take precedence over cleanup signal removal
for uri in self._connstates:
@@ -671,7 +664,6 @@ class vmmEngine(vmmGObject):
obj.connect("action-exit-app", self.exit_app)
obj.connect("action-view-manager", self._do_show_manager)
obj.connect("action-migrate-domain", self._do_show_migrate)
obj.connect("action-delete-domain", self._do_delete_domain)
obj.connect("action-clone-domain", self._do_show_clone)
obj.connect("details-opened", self.increment_window_counter)
obj.connect("details-closed", self.decrement_window_counter)
@@ -706,7 +698,6 @@ class vmmEngine(vmmGObject):
obj = vmmManager()
obj.connect("action-migrate-domain", self._do_show_migrate)
obj.connect("action-delete-domain", self._do_delete_domain)
obj.connect("action-clone-domain", self._do_show_clone)
obj.connect("action-show-domain", self._do_show_vm)
obj.connect("action-show-create", self._do_show_create)
@@ -781,16 +772,6 @@ class vmmEngine(vmmGObject):
except Exception as e:
src.err.show_err(_("Error setting clone parameters: %s") % str(e))
def _do_delete_domain(self, src, uri, connkey):
vm = self._connobjs[uri].get_vm(connkey)
try:
if not self.delete_dialog:
self.delete_dialog = vmmDeleteDialog()
self.delete_dialog.show(vm, src.topwin)
except Exception as e:
src.err.show_err(_("Error launching delete dialog: %s") % str(e))
##########################################
# Window launchers from virt-manager cli #

View File

@@ -96,7 +96,6 @@ class vmmManager(vmmGObjectUI):
"action-show-host": (GObject.SignalFlags.RUN_FIRST, None, [str]),
"action-show-create": (GObject.SignalFlags.RUN_FIRST, None, [str]),
"action-migrate-domain": (GObject.SignalFlags.RUN_FIRST, None, [str, str]),
"action-delete-domain": (GObject.SignalFlags.RUN_FIRST, None, [str, str]),
"action-clone-domain": (GObject.SignalFlags.RUN_FIRST, None, [str, str]),
"action-exit-app": (GObject.SignalFlags.RUN_FIRST, None, []),
"manager-closed": (GObject.SignalFlags.RUN_FIRST, None, []),
@@ -504,7 +503,7 @@ class vmmManager(vmmGObjectUI):
if vm is None:
self._do_delete_conn(conn)
else:
self.emit("action-delete-domain", conn.get_uri(), vm.get_connkey())
vmmenu.VMActionUI.delete(self, vm)
def _do_delete_conn(self, conn):
if conn is None:

View File

@@ -34,7 +34,6 @@ class vmmSystray(vmmGObject):
"action-toggle-manager": (GObject.SignalFlags.RUN_FIRST, None, []),
"action-view-manager": (GObject.SignalFlags.RUN_FIRST, None, []),
"action-migrate-domain": (GObject.SignalFlags.RUN_FIRST, None, [str, str]),
"action-delete-domain": (GObject.SignalFlags.RUN_FIRST, None, [str, str]),
"action-clone-domain": (GObject.SignalFlags.RUN_FIRST, None, [str, str]),
"action-show-host": (GObject.SignalFlags.RUN_FIRST, None, [str]),
"action-show-domain": (GObject.SignalFlags.RUN_FIRST, None, [str, str]),

View File

@@ -133,8 +133,7 @@ class VMActionMenu(_VMMenu):
self._add_action(_("Migrate..."), "migrate",
_make_emit_cb("action-migrate-domain"), iconname=None)
self._add_action(_("_Delete"), "delete",
_make_emit_cb("action-delete-domain"),
iconname=Gtk.STOCK_DELETE)
VMActionUI.delete, iconname=Gtk.STOCK_DELETE)
if self._show_open:
self.add(Gtk.SeparatorMenuItem())
@@ -329,3 +328,8 @@ class VMActionUI(object):
logging.debug("Resetting vm '%s'", vm.get_name())
vmmAsyncJob.simple_async_noshow(vm.reset, [], src,
_("Error resetting domain"))
@staticmethod
def delete(src, vm):
from .delete import vmmDeleteDialog
vmmDeleteDialog.show_instance(src, vm)