[virt-tools-list] [virt-manager PATCH v2] virtManager: UI: add support enable setting multifunction on hostdev
Chen Hanxiao
chen_han_xiao at 126.com
Wed May 10 10:40:30 UTC 2017
From: Chen Hanxiao <chenhanxiao at gmail.com>
We could turn on/off multifunction of hostdev
in page details.
Signed-off-by: Chen Hanxiao <chenhanxiao at gmail.com>
---
v2: drop irrelevant cli part
ui/details.ui | 74 ++++++++++++++++++++++++++++++--------------------
virtManager/details.py | 11 +++++++-
virtManager/domain.py | 8 +++++-
3 files changed, 62 insertions(+), 31 deletions(-)
diff --git a/ui/details.ui b/ui/details.ui
index 5932860..66284f7 100644
--- a/ui/details.ui
+++ b/ui/details.ui
@@ -132,9 +132,9 @@
<signal name="delete-event" handler="on_vmm_details_delete_event" swapped="no"/>
<child>
<object class="GtkBox" id="vbox2">
- <property name="orientation">vertical</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
<child>
<object class="GtkMenuBar" id="details-menubar">
<property name="visible">True</property>
@@ -400,7 +400,6 @@
</child>
<child>
<object class="GtkBox" id="toolbar-box">
- <property name="orientation">horizontal</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
@@ -593,16 +592,15 @@
<signal name="switch-page" handler="on_details_pages_switch_page" after="yes" swapped="no"/>
<child>
<object class="GtkBox" id="hbox1">
- <property name="orientation">horizontal</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="border_width">12</property>
<property name="spacing">12</property>
<child>
<object class="GtkBox" id="vbox53">
- <property name="orientation">vertical</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
<property name="spacing">6</property>
<child>
<object class="GtkScrolledWindow" id="scrolledwindow5">
@@ -670,9 +668,9 @@
</child>
<child>
<object class="GtkBox" id="vbox1">
- <property name="orientation">vertical</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
<property name="spacing">6</property>
<child>
<object class="GtkNotebook" id="hw-panel">
@@ -682,9 +680,9 @@
<property name="show_border">False</property>
<child>
<object class="GtkBox" id="vbox6">
- <property name="orientation">vertical</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
<property name="spacing">12</property>
<child>
<object class="GtkFrame" id="frame2">
@@ -1702,9 +1700,9 @@ if you know what you are doing.</small></property>
<property name="orientation">vertical</property>
<child>
<object class="GtkBox" id="vbox5">
- <property name="orientation">vertical</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
<property name="spacing">12</property>
<child>
<object class="GtkFrame" id="frame24">
@@ -1990,10 +1988,10 @@ if you know what you are doing.</small></property>
</child>
<child>
<object class="GtkBox" id="vbox14">
- <property name="orientation">vertical</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="valign">start</property>
+ <property name="orientation">vertical</property>
<property name="spacing">12</property>
<child>
<object class="GtkFrame" id="CPUs">
@@ -2009,7 +2007,6 @@ if you know what you are doing.</small></property>
<property name="left_padding">12</property>
<child>
<object class="GtkBox" id="hbox5">
- <property name="orientation">horizontal</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="spacing">6</property>
@@ -2132,7 +2129,6 @@ if you know what you are doing.</small></property>
</child>
<child>
<object class="GtkBox" id="cpu-vcpus-warn-box">
- <property name="orientation">horizontal</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="spacing">6</property>
@@ -2292,9 +2288,9 @@ if you know what you are doing.</small></property>
<property name="right_padding">12</property>
<child>
<object class="GtkBox" id="vbox15">
- <property name="orientation">vertical</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
<property name="spacing">4</property>
<child>
<object class="GtkCheckButton" id="cpu-topology-enable">
@@ -2322,7 +2318,6 @@ if you know what you are doing.</small></property>
<property name="xscale">0</property>
<child>
<object class="GtkBox" id="hbox26">
- <property name="orientation">horizontal</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="spacing">6</property>
@@ -2437,7 +2432,6 @@ if you know what you are doing.</small></property>
</child>
<child>
<object class="GtkBox" id="cpu-topology-warn-box">
- <property name="orientation">horizontal</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="spacing">6</property>
@@ -2527,9 +2521,9 @@ if you know what you are doing.</small></property>
</child>
<child>
<object class="GtkBox" id="vbox7">
- <property name="orientation">vertical</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
<child>
<object class="GtkFrame" id="frame5">
<property name="visible">True</property>
@@ -2612,7 +2606,6 @@ if you know what you are doing.</small></property>
</child>
<child>
<object class="GtkBox" id="hbox46">
- <property name="orientation">horizontal</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="spacing">3</property>
@@ -2662,7 +2655,6 @@ if you know what you are doing.</small></property>
</child>
<child>
<object class="GtkBox" id="hbox47">
- <property name="orientation">horizontal</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="spacing">3</property>
@@ -3191,9 +3183,9 @@ if you know what you are doing.</small></property>
<property name="left_padding">12</property>
<child>
<object class="GtkBox" id="bootvbox">
- <property name="orientation">vertical</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
<property name="spacing">6</property>
<child>
<object class="GtkCheckButton" id="boot-menu">
@@ -3346,9 +3338,9 @@ if you know what you are doing.</small></property>
</child>
<child>
<object class="GtkBox" id="vbox55">
- <property name="orientation">vertical</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
<property name="spacing">12</property>
<child>
<object class="GtkFrame" id="frame10">
@@ -3364,9 +3356,9 @@ if you know what you are doing.</small></property>
<property name="left_padding">12</property>
<child>
<object class="GtkBox" id="vbox13">
- <property name="orientation">vertical</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
<property name="spacing">12</property>
<child>
<object class="GtkGrid" id="table32">
@@ -3923,9 +3915,9 @@ if you know what you are doing.</small></property>
</child>
<child>
<object class="GtkBox" id="vbox54">
- <property name="orientation">vertical</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
<property name="spacing">12</property>
<child>
<object class="GtkFrame" id="frame9">
@@ -4109,9 +4101,9 @@ if you know what you are doing.</small></property>
</child>
<child>
<object class="GtkBox" id="vbox56">
- <property name="orientation">vertical</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
<property name="spacing">12</property>
<child>
<object class="GtkFrame" id="frame11">
@@ -4220,9 +4212,9 @@ if you know what you are doing.</small></property>
</child>
<child>
<object class="GtkBox" id="vbox57">
- <property name="orientation">vertical</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
<child>
<object class="GtkFrame" id="vnc-frame">
<property name="visible">True</property>
@@ -4273,9 +4265,9 @@ if you know what you are doing.</small></property>
</child>
<child>
<object class="GtkBox" id="vbox58">
- <property name="orientation">vertical</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
<child>
<object class="GtkFrame" id="frame13">
<property name="visible">True</property>
@@ -4366,9 +4358,9 @@ if you know what you are doing.</small></property>
</child>
<child>
<object class="GtkBox" id="vbox59">
- <property name="orientation">vertical</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
<child>
<object class="GtkFrame" id="frame14">
<property name="visible">True</property>
@@ -4572,9 +4564,9 @@ if you know what you are doing.</small></property>
</child>
<child>
<object class="GtkBox" id="vbox8">
- <property name="orientation">vertical</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
<child>
<object class="GtkFrame" id="frame6">
<property name="visible">True</property>
@@ -4646,6 +4638,30 @@ if you know what you are doing.</small></property>
<property name="top_attach">1</property>
</packing>
</child>
+ <child>
+ <object class="GtkLabel">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Multifunction</property>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="hostdev-multifunction">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="on_hostdev_multifunction_toggled" swapped="no"/>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">2</property>
+ </packing>
+ </child>
</object>
</child>
</object>
@@ -4683,9 +4699,9 @@ if you know what you are doing.</small></property>
</child>
<child>
<object class="GtkBox" id="vbox9">
- <property name="orientation">vertical</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
<child>
<object class="GtkFrame" id="frame8">
<property name="visible">True</property>
@@ -4844,9 +4860,9 @@ if you know what you are doing.</small></property>
</child>
<child>
<object class="GtkBox" id="vbox12">
- <property name="orientation">vertical</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
<child>
<object class="GtkFrame" id="frame15">
<property name="visible">True</property>
@@ -5115,9 +5131,9 @@ if you know what you are doing.</small></property>
</child>
<child>
<object class="GtkBox" id="vbox16">
- <property name="orientation">vertical</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
<child>
<object class="GtkFrame" id="frame18">
<property name="visible">True</property>
@@ -5303,9 +5319,9 @@ if you know what you are doing.</small></property>
</child>
<child>
<object class="GtkBox" id="vbox17">
- <property name="orientation">vertical</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
<property name="spacing">12</property>
<child>
<object class="GtkFrame" id="frame20">
diff --git a/virtManager/details.py b/virtManager/details.py
index f3c9080..c2d94ce 100644
--- a/virtManager/details.py
+++ b/virtManager/details.py
@@ -107,8 +107,9 @@ EDIT_TPM_TYPE,
EDIT_FS,
EDIT_HOSTDEV_ROMBAR,
+EDIT_HOSTDEV_MULTIFUNCTION,
-) = range(1, 49)
+) = range(1, 50)
# Columns in hw list model
@@ -565,6 +566,8 @@ class vmmDetails(vmmGObjectUI):
"on_hostdev_rombar_toggled": lambda *x: self.enable_apply(
x, EDIT_HOSTDEV_ROMBAR),
+ "on_hostdev_multifunction_toggled": lambda *x: self.enable_apply(
+ x, EDIT_HOSTDEV_MULTIFUNCTION),
"on_controller_model_combo_changed": (lambda *x:
self.enable_apply(x, EDIT_CONTROLLER_MODEL)),
@@ -2271,6 +2274,8 @@ class vmmDetails(vmmGObjectUI):
if self.edited(EDIT_HOSTDEV_ROMBAR):
kwargs["rom_bar"] = self.widget("hostdev-rombar").get_active()
+ if self.edited(EDIT_HOSTDEV_MULTIFUNCTION):
+ kwargs["multifunction"] = self.widget("hostdev-multifunction").get_active()
return vmmAddHardware.change_config_helper(self.vm.define_hostdev,
kwargs, self.vm, self.err,
@@ -2945,8 +2950,11 @@ class vmmDetails(vmmGObjectUI):
return
rom_bar = hostdev.rom_bar
+ multifunction = hostdev.address.multifunction
if rom_bar is None:
rom_bar = True
+ if multifunction is None:
+ multifunction = False
devtype = hostdev.type
if hostdev.type == 'usb':
@@ -2970,6 +2978,7 @@ class vmmDetails(vmmGObjectUI):
self.widget("hostdev-title").set_markup(devlabel)
self.widget("hostdev-source").set_text(pretty_name)
self.widget("hostdev-rombar").set_active(rom_bar)
+ self.widget("hostdev-multifunction").set_active(multifunction)
def refresh_video_page(self):
vid = self.get_hw_selection(HW_LIST_COL_DEVICE)
diff --git a/virtManager/domain.py b/virtManager/domain.py
index 6b94455..ea40b1a 100644
--- a/virtManager/domain.py
+++ b/virtManager/domain.py
@@ -1057,7 +1057,8 @@ class vmmDomain(vmmLibvirtObject):
self._redefine_xmlobj(xmlobj)
- def define_hostdev(self, devobj, do_hotplug, rom_bar=_SENTINEL):
+ def define_hostdev(self, devobj, do_hotplug, rom_bar=_SENTINEL,
+ multifunction=_SENTINEL):
xmlobj = self._make_xmlobj_to_define()
editdev = self._lookup_device_to_define(xmlobj, devobj, do_hotplug)
if not editdev:
@@ -1066,6 +1067,11 @@ class vmmDomain(vmmLibvirtObject):
if rom_bar != _SENTINEL:
editdev.rom_bar = rom_bar
+ if multifunction is True:
+ editdev.address.multifunction = True
+ else:
+ editdev.address.multifunction = False
+
if do_hotplug:
self.hotplug(device=editdev)
else:
--
2.7.4
More information about the virt-tools-list
mailing list