mirror of
https://github.com/virt-manager/virt-manager.git
synced 2025-02-25 18:55:27 -06:00
delete: Convert to singleton
This commit is contained in:
@@ -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:
|
||||
|
||||
@@ -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, []),
|
||||
|
||||
@@ -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 #
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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]),
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user