[virt-tools-list] [PATCH virt-viewer 08/10] virt-viewer-auth: Use GtkHeaderBar

Eduardo Lima (Etrunko) etrunko at redhat.com
Thu Feb 9 19:22:49 UTC 2017


The auxiliary text is now presented as the subtitle of the dialog

Signed-off-by: Eduardo Lima (Etrunko) <etrunko at redhat.com>
---
 src/resources/ui/virt-viewer-auth.ui | 148 ++++++++++++++++-------------------
 src/virt-viewer-auth.c               |  35 +++++----
 2 files changed, 86 insertions(+), 97 deletions(-)

diff --git a/src/resources/ui/virt-viewer-auth.ui b/src/resources/ui/virt-viewer-auth.ui
index 2920780..367678d 100644
--- a/src/resources/ui/virt-viewer-auth.ui
+++ b/src/resources/ui/virt-viewer-auth.ui
@@ -1,160 +1,146 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.20.0 -->
 <interface>
-  <!-- interface-requires gtk+ 2.12 -->
+  <requires lib="gtk+" version="3.12"/>
   <object class="GtkDialog" id="auth">
+    <property name="width_request">350</property>
+    <property name="height_request">1</property>
     <property name="can_focus">False</property>
-    <property name="border_width">5</property>
-    <property name="title" translatable="yes">Authentication required</property>
-    <property name="modal">True</property>
-    <property name="window_position">center-on-parent</property>
-    <property name="destroy_with_parent">True</property>
+    <property name="border_width">12</property>
     <property name="type_hint">dialog</property>
-    <property name="skip_taskbar_hint">True</property>
-    <property name="skip_pager_hint">True</property>
     <child internal-child="vbox">
-      <object class="GtkBox" id="dialog-vbox1">
-        <property name="visible">True</property>
+      <object class="GtkBox">
         <property name="can_focus">False</property>
         <property name="orientation">vertical</property>
         <property name="spacing">2</property>
         <child internal-child="action_area">
-          <object class="GtkButtonBox" id="dialog-action_area1">
-            <property name="visible">True</property>
+          <object class="GtkButtonBox">
             <property name="can_focus">False</property>
             <property name="layout_style">end</property>
             <child>
-              <object class="GtkButton" id="button-cancel">
-                <property name="label" translatable="yes">_Cancel</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">True</property>
-                <property name="use_action_appearance">False</property>
-                <property name="use_underline">True</property>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">False</property>
-                <property name="position">0</property>
-              </packing>
+              <placeholder/>
             </child>
             <child>
-              <object class="GtkButton" id="button-ok">
-                <property name="label" translatable="yes">_OK</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="can_default">True</property>
-                <property name="has_default">True</property>
-                <property name="receives_default">True</property>
-                <property name="use_action_appearance">False</property>
-                <property name="use_underline">True</property>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">False</property>
-                <property name="position">3</property>
-              </packing>
+              <placeholder/>
             </child>
           </object>
           <packing>
             <property name="expand">False</property>
-            <property name="fill">True</property>
-            <property name="pack_type">end</property>
-            <property name="position">0</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkLabel" id="message">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="xalign">0</property>
-            <property name="yalign">0</property>
-            <property name="label" translatable="yes">label</property>
-            <property name="use_markup">True</property>
-          </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">True</property>
+            <property name="fill">False</property>
             <property name="position">1</property>
           </packing>
         </child>
         <child>
-          <object class="GtkTable" id="table1">
+          <object class="GtkGrid">
             <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">6</property>
+            <property name="hexpand">True</property>
             <property name="row_spacing">6</property>
+            <property name="column_spacing">6</property>
             <child>
-              <object class="GtkLabel" id="prompt-password">
+              <object class="GtkLabel" id="prompt-username">
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
-                <property name="xalign">1</property>
-                <property name="label" translatable="yes">Password:</property>
+                <property name="halign">end</property>
+                <property name="label" translatable="yes">Username:</property>
               </object>
               <packing>
-                <property name="top_attach">1</property>
-                <property name="bottom_attach">2</property>
+                <property name="left_attach">0</property>
+                <property name="top_attach">0</property>
               </packing>
             </child>
             <child>
-              <object class="GtkLabel" id="prompt-username">
+              <object class="GtkLabel" id="prompt-password">
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
-                <property name="xalign">1</property>
-                <property name="label" translatable="yes">Username:</property>
+                <property name="halign">end</property>
+                <property name="label" translatable="yes">Password:</property>
               </object>
+              <packing>
+                <property name="left_attach">0</property>
+                <property name="top_attach">1</property>
+              </packing>
             </child>
             <child>
               <object class="GtkEntry" id="cred-username">
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
+                <property name="margin_left">4</property>
+                <property name="hexpand">True</property>
+                <signal name="activate" handler="button_ok_clicked" swapped="no"/>
               </object>
               <packing>
                 <property name="left_attach">1</property>
-                <property name="right_attach">2</property>
+                <property name="top_attach">0</property>
               </packing>
             </child>
             <child>
               <object class="GtkEntry" id="cred-password">
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
+                <property name="margin_left">4</property>
+                <property name="hexpand">True</property>
                 <property name="visibility">False</property>
                 <property name="activates_default">True</property>
+                <signal name="activate" handler="button_ok_clicked" swapped="no"/>
               </object>
               <packing>
                 <property name="left_attach">1</property>
-                <property name="right_attach">2</property>
                 <property name="top_attach">1</property>
-                <property name="bottom_attach">2</property>
               </packing>
             </child>
             <child>
               <object class="GtkCheckButton" id="show-password">
+                <property name="label" translatable="yes">Show password</property>
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
-                <property name="active">False</property>
-                <property name="label" translatable="yes">Show password</property>
+                <property name="receives_default">False</property>
+                <property name="draw_indicator">True</property>
+                <signal name="toggled" handler="show_password" object="cred-password" swapped="no"/>
               </object>
               <packing>
                 <property name="left_attach">1</property>
-                <property name="right_attach">2</property>
                 <property name="top_attach">2</property>
-                <property name="bottom_attach">3</property>
               </packing>
             </child>
+            <child>
+              <placeholder/>
+            </child>
           </object>
           <packing>
             <property name="expand">False</property>
             <property name="fill">True</property>
-            <property name="position">2</property>
+            <property name="position">0</property>
           </packing>
         </child>
       </object>
     </child>
-    <action-widgets>
-      <action-widget response="-6">button-cancel</action-widget>
-      <action-widget response="-5">button-ok</action-widget>
-    </action-widgets>
+  </object>
+  <object class="GtkImage" id="image1">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="icon_name">emblem-ok-symbolic</property>
+  </object>
+  <object class="GtkHeaderBar" id="headerbar">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="title">Authentication required</property>
+    <property name="show_close_button">True</property>
+    <property name="decoration_layout">:close</property>
+    <child>
+      <object class="GtkButton" id="button-ok">
+        <property name="visible">True</property>
+        <property name="can_focus">True</property>
+        <property name="can_default">True</property>
+        <property name="has_default">True</property>
+        <property name="receives_default">True</property>
+        <property name="image">image1</property>
+        <property name="always_show_image">True</property>
+        <signal name="clicked" handler="button_ok_clicked" object="auth" swapped="no"/>
+      </object>
+      <packing>
+        <property name="pack_type">end</property>
+      </packing>
+    </child>
   </object>
 </interface>
diff --git a/src/virt-viewer-auth.c b/src/virt-viewer-auth.c
index 67c770c..73cc707 100644
--- a/src/virt-viewer-auth.c
+++ b/src/virt-viewer-auth.c
@@ -33,13 +33,23 @@
 #include "virt-viewer-auth.h"
 #include "virt-viewer-util.h"
 
-static void
+void show_password(GtkCheckButton *check_button G_GNUC_UNUSED, GtkEntry *entry);
+void button_ok_clicked(GtkButton *button G_GNUC_UNUSED, GtkDialog *dialog);
+
+void
 show_password(GtkCheckButton *check_button G_GNUC_UNUSED,
               GtkEntry *entry)
 {
     gtk_entry_set_visibility(entry, !gtk_entry_get_visibility(entry));
 }
 
+void
+button_ok_clicked(GtkButton *button G_GNUC_UNUSED,
+                  GtkDialog *dialog)
+{
+    gtk_dialog_response(dialog, GTK_RESPONSE_OK);
+}
+
 /* NOTE: if username is provided, and *username is non-NULL, the user input
  * field will be pre-filled with this value. The existing string will be freed
  * before setting the output parameter to the user-entered value.
@@ -55,23 +65,19 @@ virt_viewer_auth_collect_credentials(GtkWindow *window,
     GtkBuilder *creds = virt_viewer_util_load_ui("virt-viewer-auth.ui");
     GtkWidget *credUsername;
     GtkWidget *credPassword;
-    GtkWidget *promptUsername;
-    GtkWidget *promptPassword;
-    GtkWidget *labelMessage;
-    GtkWidget *checkPassword;
+    GtkWidget *headerbar;
     int response;
     char *message;
 
     dialog = GTK_WIDGET(gtk_builder_get_object(creds, "auth"));
-    gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK);
     gtk_window_set_transient_for(GTK_WINDOW(dialog), window);
+    gtk_builder_connect_signals(creds, dialog);
+
+    headerbar = GTK_WIDGET(gtk_builder_get_object(creds, "headerbar"));
+    gtk_window_set_titlebar(GTK_WINDOW(dialog), headerbar);
 
-    labelMessage = GTK_WIDGET(gtk_builder_get_object(creds, "message"));
     credUsername = GTK_WIDGET(gtk_builder_get_object(creds, "cred-username"));
-    promptUsername = GTK_WIDGET(gtk_builder_get_object(creds, "prompt-username"));
     credPassword = GTK_WIDGET(gtk_builder_get_object(creds, "cred-password"));
-    promptPassword = GTK_WIDGET(gtk_builder_get_object(creds, "prompt-password"));
-    checkPassword = GTK_WIDGET(gtk_builder_get_object(creds, "show-password"));
 
     gtk_widget_set_sensitive(credUsername, username != NULL);
     if (username && *username) {
@@ -79,22 +85,19 @@ virt_viewer_auth_collect_credentials(GtkWindow *window,
         /* if username is pre-filled, move focus to password field */
         gtk_widget_grab_focus(credPassword);
     }
-    gtk_widget_set_sensitive(promptUsername, username != NULL);
     gtk_widget_set_sensitive(credPassword, password != NULL);
-    gtk_widget_set_sensitive(promptPassword, password != NULL);
 
-    g_signal_connect(checkPassword, "clicked", G_CALLBACK(show_password), credPassword);
 
     if (address) {
-        message = g_strdup_printf(_("Authentication is required for the %s connection to:\n\n<b>%s</b>\n\n"),
+        message = g_strdup_printf(_("For the %s connection to '%s'"),
                                   type,
                                   address);
     } else {
-        message = g_strdup_printf(_("Authentication is required for the %s connection:\n"),
+        message = g_strdup_printf(_("For the %s connection"),
                                   type);
     }
 
-    gtk_label_set_markup(GTK_LABEL(labelMessage), message);
+    gtk_header_bar_set_subtitle(GTK_HEADER_BAR(headerbar), message);
     g_free(message);
 
     gtk_widget_show_all(dialog);
-- 
2.9.3




More information about the virt-tools-list mailing list