[virt-tools-list] [remote-viewer PATCH 5/7 v2] remote-viewer-connect: Changed hardcoded UI into XML

Jonathon Jongsma jjongsma at redhat.com
Thu Jun 11 19:29:56 UTC 2015


On Thu, 2015-06-11 at 16:28 +0200, Lukas Venhoda wrote:
> Hardcoded UI removed in favor of XML.
> Added the new XML file for translation.
> ---
> Changes since v1
>  - New patch
>  - Contains change to XML only
> ---
>  po/POTFILES.in                |   1 +
>  src/Makefile.am               |   1 +
>  src/remote-viewer-connect.c   |  89 +++++--------------------
>  src/remote-viewer-connect.xml | 152 ++++++++++++++++++++++++++++++++++++++++++
>  4 files changed, 172 insertions(+), 71 deletions(-)
>  create mode 100644 src/remote-viewer-connect.xml
> 
> diff --git a/po/POTFILES.in b/po/POTFILES.in
> index 111e8b5..9dcc6a3 100644
> --- a/po/POTFILES.in
> +++ b/po/POTFILES.in
> @@ -3,6 +3,7 @@ data/virt-viewer-mime.xml.in
>  src/gbinding.c
>  src/remote-viewer-main.c
>  src/remote-viewer.c
> +[type: gettext/glade] src/remote-viewer-connect.xml
>  [type: gettext/glade] src/virt-viewer-about.xml
>  src/virt-viewer-app.c
>  src/virt-viewer-auth.c
> diff --git a/src/Makefile.am b/src/Makefile.am
> index 2427abb..70e6d59 100644
> --- a/src/Makefile.am
> +++ b/src/Makefile.am
> @@ -11,6 +11,7 @@ builderxml_DATA =				\
>  	virt-viewer-guest-details.xml	\
>  	virt-viewer-vm-connection.xml	\
>  	virt-viewer-preferences.xml		\
> +	remote-viewer-connect.xml		\
>  	$(NULL)
> 
>  EXTRA_DIST =					\
> diff --git a/src/remote-viewer-connect.c b/src/remote-viewer-connect.c
> index 61f4691..85bd8cc 100644
> --- a/src/remote-viewer-connect.c
> +++ b/src/remote-viewer-connect.c
> @@ -19,6 +19,7 @@
>   */
> 
>  #include "remote-viewer-connect.h"
> +#include "virt-viewer-util.h"
>  #include <glib/gi18n.h>
>  #include <gdk/gdkkeysyms.h>
> 
> @@ -132,30 +133,14 @@ recent_item_activated_dialog_cb(GtkRecentChooser *chooser G_GNUC_UNUSED, gpointe
>  }
> 
>  static void
> -make_label_light(GtkLabel* label)
> +make_label_small(GtkLabel* label)
>  {
>      PangoAttrList* attributes = pango_attr_list_new();
> -#if GTK_CHECK_VERSION(3, 0, 0)
> -    gtk_style_context_add_class(gtk_widget_get_style_context(GTK_WIDGET(label)), "dim-label");
> -#else
> -    GtkStyle* style = gtk_widget_get_style(GTK_WIDGET(label));
> -    GdkColor* c = &style->text[GTK_STATE_INSENSITIVE];
> -    pango_attr_list_insert(attributes, pango_attr_foreground_new(c->red, c->green, c->blue));
> -#endif
>      pango_attr_list_insert(attributes, pango_attr_scale_new(0.9));
>      gtk_label_set_attributes(label, attributes);
>      pango_attr_list_unref(attributes);
>  }
> 
> -static void
> -make_label_bold(GtkLabel* label)
> -{
> -    PangoAttrList* attributes = pango_attr_list_new();
> -    pango_attr_list_insert(attributes, pango_attr_weight_new(PANGO_WEIGHT_BOLD));
> -    gtk_label_set_attributes(label, attributes);
> -    pango_attr_list_unref(attributes);
> -}
> -
>  /**
>  * remote_viewer_connect_dialog
>  *
> @@ -166,16 +151,15 @@ make_label_bold(GtkLabel* label)
>  *
>  * @return GTK_RESPONSE_OK if Connect or ENTER is pressed
>  * @return GTK_RESPONSE_CANCEL if Cancel is pressed or dialog is closed
> +* @return GTK_RESPONSE_NONE if error occurs

Oh, here you indicate that NONE is an expected return value for error
conditions.  What sort of error condition might result in NONE? And how
would the caller treat it differently than CANCEL?

>  */
> 
>  GtkResponseType
>  remote_viewer_connect_dialog(gchar **uri)
>  {
> -    GtkWidget *window,*box, *label, *entry, *recent, *connect_button, *cancel_button, *button_box;
> -#if !GTK_CHECK_VERSION(3, 0, 0)
> -    GtkWidget *alignment;
> -#endif
> +    GtkWidget *window, *label, *entry, *recent, *connect_button, *cancel_button;
>      GtkRecentFilter *rfilter;
> +    GtkBuilder *builder;
> 
>      ConnectionInfo ci = {
>          GTK_RESPONSE_NONE,
> @@ -183,47 +167,18 @@ remote_viewer_connect_dialog(gchar **uri)
>      };
> 
>      /* Create the widgets */
> -    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
> -    gtk_container_set_border_width(GTK_CONTAINER(window), 5);
> -    box = gtk_vbox_new(FALSE, 6);
> -    gtk_container_set_border_width(GTK_CONTAINER(box), 5);
> -    gtk_container_add(GTK_CONTAINER(window), box);
> -
> -    label = gtk_label_new_with_mnemonic(_("_Connection Address"));
> -    gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
> -    gtk_box_pack_start(GTK_BOX(box), label, TRUE, TRUE, 0);
> -    entry = GTK_WIDGET(gtk_entry_new());
> -    gtk_entry_set_activates_default(GTK_ENTRY(entry), TRUE);
> -    g_object_set(entry, "width-request", 200, NULL);
> -    g_signal_connect(entry, "changed", G_CALLBACK(entry_changed_cb), entry);
> -    g_signal_connect(entry, "icon-release", G_CALLBACK(entry_icon_release_cb), entry);
> -    gtk_box_pack_start(GTK_BOX(box), entry, TRUE, TRUE, 0);
> -    gtk_label_set_mnemonic_widget(GTK_LABEL(label), entry);
> -    make_label_bold(GTK_LABEL(label));
> -
> -    label = gtk_label_new(_("For example, spice://foo.example.org:5900"));
> -    gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
> -    make_label_light(GTK_LABEL(label));
> -#if GTK_CHECK_VERSION(3, 0, 0)
> -    gtk_box_pack_start(GTK_BOX(box), label, TRUE, TRUE, 0);
> -    gtk_widget_set_margin_bottom(label, 12);
> -#else
> -    alignment = gtk_alignment_new(0, 0, 1, 1);
> -    gtk_alignment_set_padding(GTK_ALIGNMENT(alignment), 0, 12, 0, 0);
> -    gtk_container_add(GTK_CONTAINER(alignment), label);
> -    gtk_box_pack_start(GTK_BOX(box), alignment, TRUE, TRUE, 0);
> -#endif
> -
> -    label = gtk_label_new_with_mnemonic(_("_Recent Connections"));
> -    make_label_bold(GTK_LABEL(label));
> -    gtk_box_pack_start(GTK_BOX(box), label, TRUE, TRUE, 0);
> -    gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
> -
> -    recent = GTK_WIDGET(gtk_recent_chooser_widget_new());
> -    gtk_recent_chooser_set_show_icons(GTK_RECENT_CHOOSER(recent), FALSE);
> -    gtk_recent_chooser_set_sort_type(GTK_RECENT_CHOOSER(recent), GTK_RECENT_SORT_MRU);
> -    gtk_box_pack_start(GTK_BOX(box), recent, TRUE, TRUE, 0);
> -    gtk_label_set_mnemonic_widget(GTK_LABEL(label), recent);
> +    builder = virt_viewer_util_load_ui("remote-viewer-connect.xml");
> +    g_return_val_if_fail(builder != NULL, GTK_RESPONSE_NONE);
> +
> +    window = GTK_WIDGET(gtk_builder_get_object(builder, "remote-viewer-connection-window"));
> +    connect_button = GTK_WIDGET(gtk_builder_get_object(builder, "connect-button"));
> +    cancel_button = GTK_WIDGET(gtk_builder_get_object(builder, "cancel-button"));
> +    label = GTK_WIDGET(gtk_builder_get_object(builder, "example-label"));
> +    entry = GTK_WIDGET(gtk_builder_get_object(builder, "connection-address-entry"));
> +
> +    make_label_small(GTK_LABEL(label));
> +
> +    recent = GTK_WIDGET(gtk_builder_get_object(builder, "recent-chooser"));
> 
>      rfilter = gtk_recent_filter_new();
>      gtk_recent_filter_add_mime_type(rfilter, "application/x-spice");
> @@ -232,15 +187,6 @@ remote_viewer_connect_dialog(gchar **uri)
>      gtk_recent_chooser_set_filter(GTK_RECENT_CHOOSER(recent), rfilter);
>      gtk_recent_chooser_set_local_only(GTK_RECENT_CHOOSER(recent), FALSE);
> 
> -    button_box = gtk_hbutton_box_new();
> -    gtk_button_box_set_layout(GTK_BUTTON_BOX(button_box), GTK_BUTTONBOX_END);
> -    connect_button = gtk_button_new_with_label("Connect");
> -    cancel_button = gtk_button_new_with_label("Cancel");
> -    gtk_box_pack_start(GTK_BOX(button_box), cancel_button, FALSE, TRUE, 0);
> -    gtk_box_pack_start(GTK_BOX(button_box), connect_button, FALSE, TRUE, 1);
> -
> -    gtk_box_pack_start(GTK_BOX(box), button_box, FALSE, TRUE, 0);
> -
>      g_signal_connect(window, "key-press-event",
>                       G_CALLBACK(key_pressed_cb), window);
>      g_signal_connect(connect_button, "clicked",
> @@ -277,6 +223,7 @@ remote_viewer_connect_dialog(gchar **uri)
>          *uri = NULL;
>      }
> 
> +    g_object_unref(builder);
>      gtk_widget_destroy(window);
> 
>      return ci.response;
> diff --git a/src/remote-viewer-connect.xml b/src/remote-viewer-connect.xml
> new file mode 100644
> index 0000000..dcd14cf
> --- /dev/null
> +++ b/src/remote-viewer-connect.xml
> @@ -0,0 +1,152 @@
> +<?xml version="1.0" encoding="UTF-8"?>
> +<!-- Generated with glade 3.18.3 -->
> +<interface>
> +  <object class="GtkWindow" id="remote-viewer-connection-window">
> +    <property name="can_focus">False</property>
> +    <property name="title" translatable="yes">Connection details</property>
> +    <child>
> +      <object class="GtkVBox" id="main-box">
> +        <property name="visible">True</property>
> +        <property name="can_focus">False</property>
> +        <property name="border_width">10</property>
> +        <property name="spacing">20</property>
> +        <child>
> +          <object class="GtkVBox" id="connection-address-box">
> +            <property name="visible">True</property>
> +            <property name="can_focus">False</property>
> +            <property name="spacing">6</property>
> +            <child>
> +              <object class="GtkLabel" id="connection-address-label">
> +                <property name="visible">True</property>
> +                <property name="can_focus">False</property>
> +                <property name="label" translatable="yes">Connection Address</property>
> +                <property name="xalign">0</property>
> +                <attributes>
> +                  <attribute name="weight" value="bold"/>
> +                </attributes>
> +              </object>
> +              <packing>
> +                <property name="expand">False</property>
> +                <property name="fill">True</property>
> +                <property name="position">0</property>
> +              </packing>
> +            </child>
> +            <child>
> +              <object class="GtkEntry" id="connection-address-entry">
> +                <property name="visible">True</property>
> +                <property name="can_focus">True</property>
> +              </object>
> +              <packing>
> +                <property name="expand">False</property>
> +                <property name="fill">True</property>
> +                <property name="position">1</property>
> +              </packing>
> +            </child>
> +            <child>
> +              <object class="GtkLabel" id="example-label">
> +                <property name="visible">True</property>
> +                <property name="can_focus">False</property>
> +                <property name="xalign">0</property>
> +                <property name="sensitive">False</property>
> +                <property name="label" translatable="yes">For example, spice://foo.example.org:5900</property>
> +              </object>
> +              <packing>
> +                <property name="expand">False</property>
> +                <property name="fill">True</property>
> +                <property name="position">2</property>
> +              </packing>
> +            </child>
> +          </object>
> +          <packing>
> +            <property name="expand">False</property>
> +            <property name="fill">True</property>
> +            <property name="position">0</property>
> +          </packing>
> +        </child>
> +        <child>
> +          <object class="GtkVBox" id="recent-chooser-box">
> +            <property name="visible">True</property>
> +            <property name="can_focus">False</property>
> +            <property name="spacing">6</property>
> +            <child>
> +              <object class="GtkLabel" id="recent-chooser-label">
> +                <property name="visible">True</property>
> +                <property name="can_focus">False</property>
> +                <property name="label" translatable="yes">Recent connections</property>
> +                <property name="xalign">0</property>
> +                <attributes>
> +                  <attribute name="weight" value="bold"/>
> +                </attributes>
> +              </object>
> +              <packing>
> +                <property name="expand">False</property>
> +                <property name="fill">True</property>
> +                <property name="position">0</property>
> +              </packing>
> +            </child>
> +            <child>
> +              <object class="GtkRecentChooserWidget" id="recent-chooser">
> +                <property name="can_focus">False</property>
> +                <property name="limit">20</property>
> +                <property name="local_only">False</property>
> +                <property name="show_icons">False</property>
> +                <property name="sort_type">mru</property>
> +              </object>
> +              <packing>
> +                <property name="expand">True</property>
> +                <property name="fill">True</property>
> +                <property name="position">1</property>
> +              </packing>
> +            </child>
> +          </object>
> +          <packing>
> +            <property name="expand">True</property>
> +            <property name="fill">True</property>
> +            <property name="position">2</property>
> +          </packing>
> +        </child>
> +        <child>
> +          <object class="GtkHButtonBox" id="button-box">
> +            <property name="visible">True</property>
> +            <property name="can_focus">False</property>
> +            <property name="resize_mode">immediate</property>
> +            <property name="spacing">6</property>
> +            <property name="layout_style">end</property>
> +            <child>
> +              <object class="GtkButton" id="cancel-button">
> +                <property name="label" translatable="yes">Cancel</property>
> +                <property name="visible">True</property>
> +                <property name="can_focus">True</property>
> +                <property name="receives_default">True</property>
> +              </object>
> +              <packing>
> +                <property name="expand">True</property>
> +                <property name="fill">True</property>
> +                <property name="position">0</property>
> +              </packing>
> +            </child>
> +            <child>
> +              <object class="GtkButton" id="connect-button">
> +                <property name="label" translatable="yes">Connect</property>
> +                <property name="visible">True</property>
> +                <property name="can_focus">True</property>
> +                <property name="receives_default">True</property>
> +              </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="pack_type">end</property>
> +            <property name="position">3</property>
> +          </packing>
> +        </child>
> +      </object>
> +    </child>
> +  </object>
> +</interface>
> --
> 2.4.2
> 
> _______________________________________________
> virt-tools-list mailing list
> virt-tools-list at redhat.com
> https://www.redhat.com/mailman/listinfo/virt-tools-list





More information about the virt-tools-list mailing list