This patch has 'Use host CPU model' checkbox invisible and keep related codes for later use. Restore 'Copy host CPU configuration' button and codes. --- ui/vmm-details.ui | 103 +++++++++++++++++++++++++++++++++++++++++-------- virtManager/details.py | 19 ++++++++- virtManager/domain.py | 17 ++++---- 3 files changed, 112 insertions(+), 27 deletions(-) diff --git a/ui/vmm-details.ui b/ui/vmm-details.ui index 631d58f..8ba9b42 100644 --- a/ui/vmm-details.ui +++ b/ui/vmm-details.ui @@ -2317,7 +2317,7 @@ I/O:</property> <object class="GtkCheckButton" id="cpu-host-model-checkbutton"> <property name="label" translatable="yes">Use host CPU model</property> <property name="use_action_appearance">False</property> - <property name="visible">True</property> + <property name="visible">False</property> <property name="can_focus">True</property> <property name="receives_default">False</property> <property name="draw_indicator">True</property> @@ -2330,43 +2330,114 @@ I/O:</property> </packing> </child> <child> - <object class="GtkHBox" id="hbox14"> + <object class="GtkTable" id="table15"> <property name="visible">True</property> <property name="can_focus">False</property> + <property name="n_rows">2</property> + <property name="n_columns">2</property> + <property name="column_spacing">12</property> + <property name="row_spacing">3</property> <child> <object class="GtkLabel" id="label52"> <property name="visible">True</property> <property name="can_focus">False</property> + <property name="xalign">0</property> <property name="label" translatable="yes">Model:</property> </object> <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">0</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options">GTK_FILL</property> </packing> </child> <child> - <object class="GtkAlignment" id="alignment12"> + <object class="GtkHBox" id="hbox21"> <property name="visible">True</property> <property name="can_focus">False</property> <child> - <object class="GtkComboBox" id="cpu-model"> + <object class="GtkAlignment" id="alignment33"> <property name="visible">True</property> <property name="can_focus">False</property> - <property name="has_entry">True</property> - <signal name="changed" handler="on_cpu_model_changed" swapped="no"/> - <child internal-child="entry"> - <object class="GtkEntry" id="combobox-entry"> + <child> + <object class="GtkComboBox" id="cpu-model"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="has_entry">True</property> + <signal name="changed" handler="on_cpu_model_changed" swapped="no"/> + <child internal-child="entry"> + <object class="GtkEntry" id="combobox-entry"> + <property name="can_focus">True</property> + </object> + </child> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="y_options">GTK_FILL</property> + </packing> + </child> + <child> + <object class="GtkAlignment" id="alignment37"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <child> + <placeholder/> + </child> + </object> + <packing> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="x_options">GTK_FILL</property> + <property name="y_options">GTK_FILL</property> + </packing> + </child> + <child> + <object class="GtkHBox" id="hbox25"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <child> + <object class="GtkButton" id="cpu-copy-host"> + <property name="label" translatable="yes">Copy host CPU configuration</property> + <property name="visible">True</property> <property name="can_focus">True</property> - </object> + <property name="receives_default">True</property> + <signal name="clicked" handler="on_cpu_copy_host_clicked" swapped="no"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkAlignment" id="alignment38"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <child> + <placeholder/> </child> </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> </child> </object> <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">1</property> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="y_options">GTK_FILL</property> </packing> </child> </object> @@ -2423,7 +2494,7 @@ I/O:</property> </child> </object> <packing> - <property name="expand">False</property> + <property name="expand">True</property> <property name="fill">True</property> <property name="position">1</property> </packing> diff --git a/virtManager/details.py b/virtManager/details.py index cd18aa8..e323716 100644 --- a/virtManager/details.py +++ b/virtManager/details.py @@ -360,6 +360,7 @@ class vmmDetails(vmmGObjectUI): self.ignorePause = False self.ignoreDetails = False + self._cpu_copy_host = False self.console = vmmConsolePages(self.vm, self.builder, self.topwin) @@ -431,6 +432,7 @@ class vmmDetails(vmmGObjectUI): "on_cpu_sockets_changed": lambda *x: self.enable_apply(x, EDIT_TOPOLOGY), "on_cpu_threads_changed": lambda *x: self.enable_apply(x, EDIT_TOPOLOGY), "on_cpu_host_model_enable_toggled": self.config_cpu_host_model_enable, + "on_cpu_copy_host_clicked": self.config_cpu_copy_host, "on_cpu_topology_enable_toggled": self.config_cpu_topology_enable, "on_config_memory_changed": self.config_memory_changed, @@ -1819,6 +1821,18 @@ class vmmDetails(vmmGObjectUI): self.widget("cpu-features").set_sensitive(not bool(do_enable)) self.enable_apply(EDIT_CPU) + def config_cpu_copy_host(self, src_ignore): + # Update UI with output copied from host + try: + CPU = virtinst.CPU(self.vm.conn.vmm) + CPU.copy_host_cpu() + + self._refresh_cpu_config(CPU) + self._cpu_copy_host = True + except Exception, e: + self.err.show_err(_("Error copying host CPU: %s") % str(e)) + return + def config_cpu_topology_enable(self, src): do_enable = src.get_active() self.widget("cpu-topology-table").set_sensitive(do_enable) @@ -2119,7 +2133,7 @@ class vmmDetails(vmmGObjectUI): model, vendor = self.get_config_cpu_model() features = self.get_config_cpu_features() add_define(self.vm.define_cpu, - model, vendor, from_host, features) + model, vendor, self._cpu_copy_host, features) if self.editted(EDIT_TOPOLOGY): do_top = self.widget("cpu-topology-enable").get_active() @@ -2134,6 +2148,8 @@ class vmmDetails(vmmGObjectUI): add_define(self.vm.define_cpu_topology, sockets, cores, threads) ret = self._change_config_helper(df, da, hf, ha) + if ret: + self._cpu_copy_host = False return ret def config_vcpu_pin(self, src_ignore, path, new_text): @@ -2860,6 +2876,7 @@ class vmmDetails(vmmGObjectUI): row[1] = get_feature_policy(row[0]) def refresh_config_cpu(self): + self._cpu_copy_host = False cpu = self.vm.get_cpu_config() self._refresh_cpu_count() diff --git a/virtManager/domain.py b/virtManager/domain.py index 823e17b..f958c4b 100644 --- a/virtManager/domain.py +++ b/virtManager/domain.py @@ -468,19 +468,16 @@ class vmmDomain(vmmLibvirtObject): def define_cpu(self, model, vendor, from_host, featurelist): def change(guest): if from_host: - if virtinst.support.check_domain_support(self._backend, - virtinst.support.SUPPORT_DOMAIN_CPU_HOST_MODEL): - guest.cpu.clear_attrs() - guest.cpu.mode = "host-model" - else: - guest.cpu.copy_host_cpu() - return + guest.cpu.copy_host_cpu() + elif guest.cpu.model != model: + # Since we don't expose this in the UI, have host value trump + # caps value + guest.cpu.vendor = vendor guest.cpu.model = model or None - guest.cpu.vendor = vendor or None - if guest.cpu.model is None: - guest.cpu.clear_attrs() + for f in guest.cpu.features: + guest.cpu.remove_feature(f) return origfeatures = guest.cpu.features -- 1.8.1.4 _______________________________________________ virt-tools-list mailing list virt-tools-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/virt-tools-list