File d5e50686-update-details-window-mapping-when-VM-is-renamed.patch of Package virt-manager.2133

Subject: engine: Update details window mapping when VM is renamed
From: Cole Robinson crobinso@redhat.com Tue Nov 3 15:56:39 2015 -0500
Date: Tue Nov 3 16:01:04 2015 -0500:
Git: d5e506869966ffa39bb400313ce9d001208dda38

Fixes this issue:

- Rename VM from 'foo' to 'foo1'
- Create new VM named 'foo'
- It raises 'foo1' window

Index: virt-manager-1.2.1/virtManager/connection.py
===================================================================
--- virt-manager-1.2.1.orig/virtManager/connection.py
+++ virt-manager-1.2.1/virtManager/connection.py
@@ -140,6 +140,7 @@ class vmmConnection(vmmGObject):
     __gsignals__ = {
         "vm-added": (GObject.SignalFlags.RUN_FIRST, None, [str]),
         "vm-removed": (GObject.SignalFlags.RUN_FIRST, None, [str]),
+        "vm-renamed": (GObject.SignalFlags.RUN_FIRST, None, [str, str]),
         "net-added": (GObject.SignalFlags.RUN_FIRST, None, [str]),
         "net-removed": (GObject.SignalFlags.RUN_FIRST, None, [str]),
         "pool-added": (GObject.SignalFlags.RUN_FIRST, None, [str]),
@@ -650,10 +651,7 @@ class vmmConnection(vmmGObject):
     def define_interface(self, xml):
         return self._backend.interfaceDefineXML(xml, 0)
 
-    def rename_object(self, obj, origxml, newxml, oldname, newname):
-        ignore = oldname
-        ignore = newname
-
+    def rename_object(self, obj, origxml, newxml, oldconnkey):
         if obj.class_name() == "domain":
             define_cb = self.define_domain
         elif obj.class_name() == "pool":
@@ -691,6 +689,9 @@ class vmmConnection(vmmGObject):
                 # Reinsert handle into new obj
                 obj.change_name_backend(newobj)
 
+        if newobj and obj.class_name() == "domain":
+            self.emit("vm-renamed", oldconnkey, obj.get_connkey())
+
 
     #########################
     # Domain event handling #
Index: virt-manager-1.2.1/virtManager/engine.py
===================================================================
--- virt-manager-1.2.1.orig/virtManager/engine.py
+++ virt-manager-1.2.1/virtManager/engine.py
@@ -277,6 +277,14 @@ class vmmEngine(vmmGObject):
         self.conns[hvuri]["windowDetails"][connkey].cleanup()
         del(self.conns[hvuri]["windowDetails"][connkey])
 
+    def _do_vm_renamed(self, conn, oldconnkey, newconnkey):
+        hvuri = conn.get_uri()
+        if oldconnkey not in self.conns[hvuri]["windowDetails"]:
+            return
+
+        self.conns[hvuri]["windowDetails"][newconnkey] = (
+            self.conns[hvuri]["windowDetails"].pop(oldconnkey))
+
     def _do_conn_changed(self, conn):
         if conn.is_active() or conn.is_connecting():
             return
@@ -503,6 +511,7 @@ class vmmEngine(vmmGObject):
         }
 
         conn.connect("vm-removed", self._do_vm_removed)
+        conn.connect("vm-renamed", self._do_vm_renamed)
         conn.connect("state-changed", self._do_conn_changed)
         conn.connect("connect-error", self._connect_error)
         conn.connect("priority-tick", self._schedule_priority_tick)
Index: virt-manager-1.2.1/virtManager/libvirtobject.py
===================================================================
--- virt-manager-1.2.1.orig/virtManager/libvirtobject.py
+++ virt-manager-1.2.1/virtManager/libvirtobject.py
@@ -111,6 +111,7 @@ class vmmLibvirtObject(vmmGObject):
         self._backend = newbackend
 
     def define_name(self, newname):
+        oldconnkey = self.get_connkey()
         oldname = self.get_xmlobj().name
 
         self.ensure_latest_xml()
@@ -126,7 +127,7 @@ class vmmLibvirtObject(vmmGObject):
 
         try:
             self._key = newname
-            self.conn.rename_object(self, origxml, newxml, oldname, newname)
+            self.conn.rename_object(self, origxml, newxml, oldconnkey)
         except:
             self._key = oldname
             raise
openSUSE Build Service is sponsored by