[virt-tools-list] [PATCH] Let user select between VNC and Spice during vm create

Cole Robinson crobinso at redhat.com
Thu Mar 17 19:36:05 UTC 2011


On 03/17/2011 03:21 PM, Marc-André Lureau wrote:
> ---
>  src/virtManager/create.py |   45 ++++++++++++++++++++++++--------
>  src/vmm-create.glade      |   63 +++++++++++++++++++++++++++++++++++++++++++-
>  2 files changed, 95 insertions(+), 13 deletions(-)
> 

I didn't mean the create dialog, I meant the global preferences dialog
under Edit->Preferences. There are already some limited options for new
VM defaults found there. Sorry if I was unclear.

I'd rather not expose this in the 'New VM' wizard because for a large
class of users they won't care or even know what VNC vs SPICE means,
they just want a new VM with a working graphical console. For people
that know the difference and care enough to want to change things, we
can point them at the preferences dialog.

Thanks,
Cole

> diff --git a/src/virtManager/create.py b/src/virtManager/create.py
> index f742ac5..1921de8 100644
> --- a/src/virtManager/create.py
> +++ b/src/virtManager/create.py
> @@ -289,6 +289,11 @@ class vmmCreate(vmmGObjectUI):
>          hyperList.add_attribute(text, 'sensitive', 3)
>          hyperList.set_model(hyperModel)
>  
> +        # Graphics
> +        graphics_list = self.window.get_widget("config-graphics")
> +        graphics_model = gtk.ListStore(str, str)
> +        graphics_list.set_model(graphics_model)
> +
>          # Sparse tooltip
>          sparse_info = self.window.get_widget("config-storage-nosparse-info")
>          uihelpers.set_sparse_tooltip(sparse_info)
> @@ -374,6 +379,7 @@ class vmmCreate(vmmGObjectUI):
>          net_warn_icon.hide()
>          net_warn_box.hide()
>          net_expander.set_expanded(False)
> +        self.populate_graphics()
>  
>  
>      def set_conn_state(self):
> @@ -706,6 +712,14 @@ class vmmCreate(vmmGObjectUI):
>          for url in urls:
>              model.append([url])
>  
> +    def populate_graphics(self):
> +        graphics_list = self.window.get_widget("config-graphics")
> +        model = graphics_list.get_model()
> +        model.clear()
> +        model.append(["VNC", virtinst.VirtualGraphics.TYPE_VNC])
> +        if not bool(self.config.get_spice_error()):
> +            model.append(["Spice", virtinst.VirtualGraphics.TYPE_SPICE])
> +        graphics_list.set_active(0)
>  
>      def change_caps(self, gtype=None, dtype=None, arch=None):
>  
> @@ -855,6 +869,14 @@ class vmmCreate(vmmGObjectUI):
>      def get_config_import_path(self):
>          return self.window.get_widget("install-import-entry").get_text()
>  
> +    def get_config_graphics(self):
> +        list = self.window.get_widget("config-graphics")
> +        idx = list.get_active()
> +        gtype = 'vnc'
> +        if idx >= 0:
> +            strtype, gtype = list.get_model()[idx]
> +        return gtype
> +
>      def get_default_path(self, name):
>          # Don't generate a new path if the install failed
>          if self.failed_guest:
> @@ -1191,17 +1213,6 @@ class vmmCreate(vmmGObjectUI):
>                                "".join(traceback.format_exc()))
>              return None
>  
> -        # Set up graphics device
> -        try:
> -            guest.add_device(virtinst.VirtualGraphics(
> -                                        type=virtinst.VirtualGraphics.TYPE_VNC,
> -                                        conn=guest.conn))
> -            guest.add_device(virtinst.VirtualVideoDevice(conn=guest.conn))
> -        except Exception, e:
> -            self.err.show_err(_("Error setting up graphics device:") + str(e),
> -                              "".join(traceback.format_exc()))
> -            return None
> -
>          # Set up sound device (if present)
>          guest.sound_devs = []
>          try:
> @@ -1462,6 +1473,18 @@ class vmmCreate(vmmGObjectUI):
>          self.guest.installer.os_type = self.capsguest.os_type
>          self.guest.installer.arch = self.capsguest.arch
>  
> +        # Set up graphics device
> +        try:
> +            gtype = self.get_config_graphics()
> +            self.guest.add_device(virtinst.VirtualGraphics(
> +                    type=gtype,
> +                    conn=self.guest.conn))
> +            self.guest.add_device(virtinst.VirtualVideoDevice(conn=self.guest.conn))
> +        except Exception, e:
> +            self.err.show_err(_("Error setting up graphics device:") + str(e),
> +                              "".join(traceback.format_exc()))
> +            return None
> +
>          nettype, devname, macaddr = self.get_config_network_info()
>  
>          if nettype is None:
> diff --git a/src/vmm-create.glade b/src/vmm-create.glade
> index 4882e7f..e5d5b95 100644
> --- a/src/vmm-create.glade
> +++ b/src/vmm-create.glade
> @@ -1613,8 +1613,8 @@ User shouldn't see this.</property>
>                                        <packing>
>                                          <property name="left_attach">1</property>
>                                          <property name="right_attach">2</property>
> -                                        <property name="top_attach">5</property>
> -                                        <property name="bottom_attach">6</property>
> +                                        <property name="top_attach">6</property>
> +                                        <property name="bottom_attach">7</property>
>                                          <property name="x_options">GTK_FILL</property>
>                                        </packing>
>                                      </child>
> @@ -1631,6 +1631,65 @@ User shouldn't see this.</property>
>                                          <property name="x_options">GTK_FILL</property>
>                                        </packing>
>                                      </child>
> +				  <child>
> +				    <widget class="GtkLabel" id="label125">
> +				      <property name="visible">True</property>
> +				      <property name="label" translatable="yes"><span color='#484848'>Graphics:</span></property>
> +				      <property name="use_underline">False</property>
> +				      <property name="use_markup">True</property>
> +				      <property name="justify">GTK_JUSTIFY_LEFT</property>
> +				      <property name="wrap">False</property>
> +				      <property name="selectable">False</property>
> +				      <property name="xalign">1</property>
> +				      <property name="yalign">0.5</property>
> +				      <property name="xpad">0</property>
> +				      <property name="ypad">0</property>
> +				      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
> +				      <property name="width_chars">-1</property>
> +				      <property name="single_line_mode">False</property>
> +				      <property name="angle">0</property>
> +				    </widget>
> +				    <packing>
> +				      <property name="left_attach">0</property>
> +				      <property name="right_attach">1</property>
> +				      <property name="top_attach">5</property>
> +				      <property name="bottom_attach">6</property>
> +				      <property name="x_options">fill</property>
> +				      <property name="y_options"></property>
> +				    </packing>
> +				  </child>
> +
> +				  <child>
> +				    <widget class="GtkAlignment" id="alignment24">
> +				      <property name="visible">True</property>
> +				      <property name="xalign">0</property>
> +				      <property name="yalign">0.5</property>
> +				      <property name="xscale">0</property>
> +				      <property name="yscale">1</property>
> +				      <property name="top_padding">0</property>
> +				      <property name="bottom_padding">0</property>
> +				      <property name="left_padding">0</property>
> +				      <property name="right_padding">0</property>
> +
> +				      <child>
> +					<widget class="GtkComboBox" id="config-graphics">
> +					  <property name="visible">True</property>
> +					  <property name="items" translatable="yes"></property>
> +					  <property name="add_tearoffs">False</property>
> +					  <property name="focus_on_click">True</property>
> +					</widget>
> +				      </child>
> +				    </widget>
> +				    <packing>
> +				      <property name="left_attach">1</property>
> +				      <property name="right_attach">2</property>
> +				      <property name="top_attach">5</property>
> +				      <property name="bottom_attach">6</property>
> +				      <property name="x_options">fill</property>
> +				      <property name="y_options">fill</property>
> +				    </packing>
> +				  </child>
> +
>                                    </widget>
>                                  </child>
>                                </widget>




More information about the virt-tools-list mailing list