From: Leonardo Garcia <lagarcia@xxxxxxxxxx> The VM will be forced off before being deleted. --- ui/vmm-delete.ui | 46 +++++++++++++++++++++++++++++++++++++++++++++- ui/vmm-details.ui | 1 - virtManager/console.py | 10 ++++++++-- virtManager/delete.py | 8 ++++++++ virtManager/details.py | 5 ----- virtManager/manager.py | 4 ---- 6 files changed, 61 insertions(+), 13 deletions(-) diff --git a/ui/vmm-delete.ui b/ui/vmm-delete.ui index fa1e75e..7cbab36 100644 --- a/ui/vmm-delete.ui +++ b/ui/vmm-delete.ui @@ -116,6 +116,50 @@ </packing> </child> <child> + <object class="GtkAlignment" id="delete-warn-running-vm-align"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="left_padding">6</property> + <child> + <object class="GtkHBox" id="delete-warn-running-vm-box"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="spacing">3</property> + <child> + <object class="GtkImage" id="delete-warn-running-vm-icon"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="stock">gtk-dialog-warning</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="delete-warn-running-vm-label"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes"><small>This VM is currently running and will be forced off before being deleted</small></property> + <property name="use_markup">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + <child> <object class="GtkCheckButton" id="delete-remove-storage"> <property name="label" translatable="yes">Delete _associated storage files</property> <property name="visible">True</property> @@ -129,7 +173,7 @@ <packing> <property name="expand">False</property> <property name="fill">True</property> - <property name="position">1</property> + <property name="position">2</property> </packing> </child> </object> diff --git a/ui/vmm-details.ui b/ui/vmm-details.ui index c523372..ea4b53e 100644 --- a/ui/vmm-details.ui +++ b/ui/vmm-details.ui @@ -184,7 +184,6 @@ <property name="can_focus">False</property> <property name="label" translatable="yes">Virtual _Machine</property> <property name="use_underline">True</property> - <signal name="activate" handler="on_details_menu_vm" swapped="no"/> <child type="submenu"> <object class="GtkMenu" id="virtual_machine1_menu"> <property name="can_focus">False</property> diff --git a/virtManager/console.py b/virtManager/console.py index b9186ce..001318e 100644 --- a/virtManager/console.py +++ b/virtManager/console.py @@ -651,7 +651,10 @@ class vmmConsolePages(vmmGObjectUI): self.page_changed() def is_visible(self): - return self.topwin.get_visible() + if self.topwin: + return self.topwin.get_visible() + else: + return False def _cleanup(self): self.vm = None @@ -892,6 +895,9 @@ class vmmConsolePages(vmmGObjectUI): ########################## def view_vm_status(self): + if not self.vm: + # window has been closed and no pages to update are available. + return status = self.vm.status() if status == libvirt.VIR_DOMAIN_SHUTOFF: self.activate_unavailable_page(_("Guest not running")) @@ -900,7 +906,6 @@ class vmmConsolePages(vmmGObjectUI): self.activate_unavailable_page(_("Guest has crashed")) def close_viewer(self): - viewport = self.widget("console-gfx-viewport") if self.viewer is None: return @@ -908,6 +913,7 @@ class vmmConsolePages(vmmGObjectUI): self.viewer = None w = v.display + viewport = self.widget("console-gfx-viewport") if w and w in viewport.get_children(): viewport.remove(w) diff --git a/virtManager/delete.py b/virtManager/delete.py index 2bb4480..23aac1b 100644 --- a/virtManager/delete.py +++ b/virtManager/delete.py @@ -99,6 +99,10 @@ class vmmDeleteDialog(vmmGObjectUI): self.widget("delete-cancel").grab_focus() + # Show warning message if VM is running + vm_active = self.vm.is_active() + self.widget("delete-warn-running-vm-box").set_visible(vm_active) + # Disable storage removal by default self.widget("delete-remove-storage").set_active(True) self.widget("delete-remove-storage").toggled() @@ -169,6 +173,10 @@ class vmmDeleteDialog(vmmGObjectUI): details = "" try: + if self.vm.is_active(): + logging.debug("Forcing VM '%s' power off.", self.vm.get_name()) + self.vm.destroy() + # Open a seperate connection to install on since this is async logging.debug("Threading off connection to delete vol.") newconn = util.dup_conn(self.conn).vmm diff --git a/virtManager/details.py b/virtManager/details.py index b40ea47..b2d496e 100644 --- a/virtManager/details.py +++ b/virtManager/details.py @@ -404,7 +404,6 @@ class vmmDetails(vmmGObjectUI): "on_details_customize_finish_clicked": self.customize_finish, "on_details_cancel_customize_clicked": self.close, - "on_details_menu_vm": self.update_vm_menu, "on_details_menu_run_activate": self.control_vm_run, "on_details_menu_poweroff_activate": self.control_vm_shutdown, "on_details_menu_reboot_activate": self.control_vm_reboot, @@ -1551,10 +1550,6 @@ class vmmDetails(vmmGObjectUI): self.vm.get_uuid()) - def update_vm_menu(self, src_ignore): - delete = bool(self.vm and self.vm.is_runable()) - self.widget("details-menu-delete").set_sensitive(delete) - def control_vm_run(self, src_ignore): self.emit("action-run-domain", self.vm.conn.get_uri(), self.vm.get_uuid()) diff --git a/virtManager/manager.py b/virtManager/manager.py index 6b6ceb1..b0cbb3b 100644 --- a/virtManager/manager.py +++ b/virtManager/manager.py @@ -1052,8 +1052,6 @@ class vmmManager(vmmGObjectUI): show_details = bool(vm) host_details = bool(len(self.rows)) - delete = bool((vm and vm.is_runable()) or - (not vm and conn)) show_run = bool(vm and vm.is_runable()) is_paused = bool(vm and vm.is_paused()) if is_paused: @@ -1073,7 +1071,6 @@ class vmmManager(vmmGObjectUI): self.widget("menu_edit_details").set_sensitive(show_details) self.widget("menu_host_details").set_sensitive(host_details) - self.widget("menu_edit_delete").set_sensitive(delete) def popup_vm_menu_key(self, widget_ignore, event): if Gdk.keyval_name(event.keyval) != "Menu": @@ -1118,7 +1115,6 @@ class vmmManager(vmmGObjectUI): self.vmmenu_items["resume"].set_sensitive(paused) self.vmmenu_items["migrate"].set_sensitive(stop) self.vmmenu_items["clone"].set_sensitive(not ro) - self.vmmenu_items["delete"].set_sensitive(run) self.vmmenushutdown_items["poweroff"].set_sensitive(stop) self.vmmenushutdown_items["reboot"].set_sensitive(stop) -- 1.7.1 _______________________________________________ virt-tools-list mailing list virt-tools-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/virt-tools-list