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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxxxx
> https://www.redhat.com/mailman/listinfo/virt-tools-list


_______________________________________________
virt-tools-list mailing list
virt-tools-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/virt-tools-list




[Index of Archives]     [Linux Virtualization]     [KVM Development]     [CentOS Virtualization]     [Netdev]     [Ethernet Bridging]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite Forum]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]     [Video 4 Linux]

  Powered by Linux