File virtman-device-flags.diff of Package virt-manager

Index: virt-manager-0.9.4/src/virtManager/addhardware.py
===================================================================
--- virt-manager-0.9.4.orig/src/virtManager/addhardware.py
+++ virt-manager-0.9.4/src/virtManager/addhardware.py
@@ -1163,6 +1163,19 @@ class vmmAddHardware(vmmGObjectUI):
         if controller is not None:
             logging.debug("Adding controller:\n%s",
                           self._dev.vmm_controller.get_xml_config())
+
+        # If vm is active, Try to hotplug the device and modify persistent
+        # config in one go
+        if self.vm.is_active():
+            try:
+                self.vm.attach_device_flags(self._dev, 3)
+                return (False, None)
+            except Exception, e:
+                logging.debug("Could not hotplug device and modify persistent "
+                              "config at the same time: %s" % str(e))
+                logging.debug("Trying the operations seperately ...")
+
+        # Try hotplug then modify persistent config
         # Hotplug device
         attach_err = False
         try:
Index: virt-manager-0.9.4/src/virtManager/details.py
===================================================================
--- virt-manager-0.9.4.orig/src/virtManager/details.py
+++ virt-manager-0.9.4/src/virtManager/details.py
@@ -2385,6 +2385,17 @@ class vmmDetails(vmmGObjectUI):
             text1=(_("Are you sure you want to remove this device?"))):
             return
 
+        # If vm is running, try to hot remove the device and modify
+        # persistent config in one go
+        if self.vm.is_active():
+            try:
+                self.vm.detach_device_flags(dev_type, dev_id_info, 3)
+                return
+            except Exception, e:
+                logging.debug("Could not hot remove device and modify "
+                              "persistent config at the same time: %s" % str(e))
+                logging.debug("Trying the operations seperately ...")
+
         # Define the change
         try:
             self.vm.remove_device(dev_id_info)
Index: virt-manager-0.9.4/src/virtManager/domain.py
===================================================================
--- virt-manager-0.9.4.orig/src/virtManager/domain.py
+++ virt-manager-0.9.4/src/virtManager/domain.py
@@ -757,6 +757,10 @@ class vmmDomain(vmmLibvirtObject):
         devxml = devobj.get_xml_config()
         self._backend.attachDevice(devxml)
 
+    def attach_device_flags(self, devobj, flags):
+        xml = devobj.get_xml_config()
+        self._backend.attachDeviceFlags(xml, flags)
+
     def detach_device(self, devobj):
         """
         Hotunplug device from running guest
@@ -775,6 +779,10 @@ class vmmDomain(vmmLibvirtObject):
         xml = devobj.get_xml_config()
         self._backend.updateDeviceFlags(xml, flags)
 
+    def detach_device_flags(self, devtype, dev_id_info, flags):
+        xml = self._get_device_xml(devtype, dev_id_info)
+        self._backend.detachDeviceFlags(xml, flags)
+
     def hotplug_vcpus(self, vcpus):
         vcpus = int(vcpus)
         if vcpus != self.vcpu_count():
openSUSE Build Service is sponsored by