[gtk+] widget-factory: Add a lock button



commit cf237eccbeea47d86deace9089cbc0f171218340
Author: Matthias Clasen <mclasen redhat com>
Date:   Tue Aug 11 00:09:39 2015 +0200

    widget-factory: Add a lock button

 demos/widget-factory/widget-factory.c  |  112 +++++++++++++++++++++
 demos/widget-factory/widget-factory.ui |  171 ++++++++++++++++----------------
 2 files changed, 199 insertions(+), 84 deletions(-)
---
diff --git a/demos/widget-factory/widget-factory.c b/demos/widget-factory/widget-factory.c
index c86fd11..6c0f8fa 100644
--- a/demos/widget-factory/widget-factory.c
+++ b/demos/widget-factory/widget-factory.c
@@ -1271,6 +1271,108 @@ tab_close_cb (GtkWidget *page)
   g_timeout_add (2500, show_page_again, page);
 }
 
+typedef struct _GTestPermission GTestPermission;
+typedef struct _GTestPermissionClass GTestPermissionClass;
+
+struct _GTestPermission
+{
+  GPermission parent;
+};
+
+struct _GTestPermissionClass
+{
+  GPermissionClass parent_class;
+};
+
+G_DEFINE_TYPE (GTestPermission, g_test_permission, G_TYPE_PERMISSION)
+
+static void
+g_test_permission_init (GTestPermission *test)
+{
+  g_permission_impl_update (G_PERMISSION (test), TRUE, TRUE, TRUE);
+}
+
+static gboolean
+update_allowed (GPermission *permission,
+                gboolean     allowed)
+{
+  g_permission_impl_update (permission, allowed, TRUE, TRUE);
+
+  return TRUE;
+}
+
+static gboolean
+acquire (GPermission   *permission,
+         GCancellable  *cancellable,
+         GError       **error)
+{
+  return update_allowed (permission, TRUE);
+}
+
+static void
+acquire_async (GPermission         *permission,
+               GCancellable        *cancellable,
+               GAsyncReadyCallback  callback,
+               gpointer             user_data)
+{
+  GTask *task;
+
+  task = g_task_new ((GObject*)permission, NULL, callback, user_data);
+  g_task_return_boolean (task, update_allowed (permission, TRUE));
+  g_object_unref (task);
+}
+
+gboolean
+acquire_finish (GPermission   *permission,
+                GAsyncResult  *res,
+                GError       **error)
+{
+  return g_task_propagate_boolean (G_TASK (res), error);
+}
+
+static gboolean
+release (GPermission   *permission,
+         GCancellable  *cancellable,
+         GError       **error)
+{
+  return update_allowed (permission, FALSE);
+}
+
+static void
+release_async (GPermission         *permission,
+               GCancellable        *cancellable,
+               GAsyncReadyCallback  callback,
+               gpointer             user_data)
+{
+  GTask *task;
+
+  task = g_task_new ((GObject*)permission, NULL, callback, user_data);
+  g_task_return_boolean (task, update_allowed (permission, FALSE));
+  g_object_unref (task);
+}
+
+gboolean
+release_finish (GPermission   *permission,
+                GAsyncResult  *result,
+                GError       **error)
+{
+  return g_task_propagate_boolean (G_TASK (result), error);
+}
+
+static void
+g_test_permission_class_init (GTestPermissionClass *class)
+{
+  GPermissionClass *permission_class = G_PERMISSION_CLASS (class);
+
+  permission_class->acquire = acquire;
+  permission_class->acquire_async = acquire_async;
+  permission_class->acquire_finish = acquire_finish;
+
+  permission_class->release = release;
+  permission_class->release_async = release_async;
+  permission_class->release_finish = release_finish;
+}
+
 static void
 activate (GApplication *app)
 {
@@ -1301,6 +1403,7 @@ activate (GApplication *app)
     { "win.delete", { "Delete", NULL } }
   };
   gint i;
+  GPermission *permission;
 
   g_type_ensure (my_text_view_get_type ());
 
@@ -1489,6 +1592,15 @@ activate (GApplication *app)
   g_signal_connect (widget2, "notify::text", G_CALLBACK (open_popover_text_changed), widget3);
   g_signal_connect_swapped (widget3, "clicked", G_CALLBACK (gtk_widget_hide), widget);
 
+  widget = (GtkWidget *)gtk_builder_get_object (builder, "lockbox");
+  widget2 = (GtkWidget *)gtk_builder_get_object (builder, "lockbutton");
+  permission = g_object_new (g_test_permission_get_type (), NULL);
+  g_object_bind_property (permission, "allowed",
+                          widget, "sensitive",
+                          G_BINDING_SYNC_CREATE);
+  gtk_lock_button_set_permission (GTK_LOCK_BUTTON (widget2), permission);
+  g_object_unref (permission);
+
   gtk_widget_show_all (GTK_WIDGET (window));
 
   g_object_unref (builder);
diff --git a/demos/widget-factory/widget-factory.ui b/demos/widget-factory/widget-factory.ui
index fb79661..0cbcbd0 100644
--- a/demos/widget-factory/widget-factory.ui
+++ b/demos/widget-factory/widget-factory.ui
@@ -2897,105 +2897,128 @@ microphone-sensitivity-medium-symbolic</property>
                         <property name="halign">start</property>
                         <property name="spacing">6</property>
                         <child>
-                          <object class="GtkMenuButton">
+                          <object class="GtkBox" id="lockbox">
                             <property name="visible">True</property>
-                            <property name="halign">center</property>
-                            <property name="popover">open_popover</property>
-                            <style>
-                              <class name="text-button"/>
-                              <class name="image-button"/>
-                            </style>
+                            <property name="halign">start</property>
+                            <property name="spacing">6</property>
                             <child>
-                              <object class="GtkBox">
+                              <object class="GtkMenuButton">
                                 <property name="visible">True</property>
-                                <property name="spacing">6</property>
-                                <child>
-                                  <object class="GtkLabel">
-                                    <property name="visible">True</property>
-                                    <property name="valign">baseline</property>
-                                    <property name="label">Open</property>
-                                  </object>
-                                </child>
+                                <property name="halign">center</property>
+                                <property name="popover">open_popover</property>
+                                <style>
+                                  <class name="text-button"/>
+                                  <class name="image-button"/>
+                                </style>
                                 <child>
-                                  <object class="GtkImage">
+                                  <object class="GtkBox">
                                     <property name="visible">True</property>
-                                    <property name="valign">baseline</property>
-                                    <property name="icon_name">pan-down-symbolic</property>
+                                    <property name="spacing">6</property>
+                                    <child>
+                                      <object class="GtkLabel">
+                                        <property name="visible">True</property>
+                                        <property name="valign">baseline</property>
+                                        <property name="label">Open</property>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkImage">
+                                        <property name="visible">True</property>
+                                        <property name="valign">baseline</property>
+                                        <property name="icon_name">pan-down-symbolic</property>
+                                      </object>
+                                    </child>
                                   </object>
                                 </child>
                               </object>
                             </child>
-                          </object>
-                        </child>
-                        <child>
-                          <object class="GtkToggleButton" id="record_button">
-                            <property name="visible">True</property>
-                            <property name="halign">center</property>
-                            <signal name="toggled" handler="on_record_button_toggled"/>
-                            <style>
-                              <class name="text-button"/>
-                              <class name="image-button"/>
-                              <class name="destructive-action"/>
-                            </style>
                             <child>
-                              <object class="GtkBox">
+                              <object class="GtkToggleButton" id="record_button">
                                 <property name="visible">True</property>
-                                <property name="spacing">6</property>
-                                <child>
-                                  <object class="GtkImage">
-                                    <property name="visible">True</property>
-                                    <property name="valign">baseline</property>
-                                    <property name="icon_name">media-record-symbolic</property>
-                                  </object>
-                                </child>
+                                <property name="halign">center</property>
+                                <signal name="toggled" handler="on_record_button_toggled"/>
+                                <style>
+                                  <class name="text-button"/>
+                                  <class name="image-button"/>
+                                  <class name="destructive-action"/>
+                                </style>
                                 <child>
-                                  <object class="GtkLabel">
+                                  <object class="GtkBox">
                                     <property name="visible">True</property>
-                                    <property name="valign">baseline</property>
-                                    <property name="label">Record</property>
+                                    <property name="spacing">6</property>
+                                    <child>
+                                      <object class="GtkImage">
+                                        <property name="visible">True</property>
+                                        <property name="valign">baseline</property>
+                                        <property name="icon_name">media-record-symbolic</property>
+                                      </object>
+                                    </child>
+                                    <child>
+                                      <object class="GtkLabel">
+                                        <property name="visible">True</property>
+                                        <property name="valign">baseline</property>
+                                        <property name="label">Record</property>
+                                      </object>
+                                    </child>
                                   </object>
                                 </child>
                               </object>
                             </child>
-                          </object>
-                        </child>
-                        <child>
-                          <object class="GtkBox">
-                            <property name="visible">True</property>
-                            <style>
-                              <class name="linked"/>
-                            </style>
                             <child>
-                              <object class="GtkRadioButton" id="grid_button">
+                              <object class="GtkBox">
                                 <property name="visible">True</property>
-                                <property name="draw-indicator">False</property>
-                                <property name="active">True</property>
                                 <style>
-                                  <class name="image-button"/>
+                                  <class name="linked"/>
                                 </style>
                                 <child>
-                                  <object class="GtkImage">
+                                  <object class="GtkRadioButton" id="grid_button">
                                     <property name="visible">True</property>
-                                    <property name="icon-size">1</property>
-                                    <property name="icon-name">view-grid-symbolic</property>
+                                    <property name="draw-indicator">False</property>
+                                    <property name="active">True</property>
+                                    <style>
+                                      <class name="image-button"/>
+                                    </style>
+                                    <child>
+                                      <object class="GtkImage">
+                                        <property name="visible">True</property>
+                                        <property name="icon-size">1</property>
+                                        <property name="icon-name">view-grid-symbolic</property>
+                                      </object>
+                                    </child>
+                                  </object>
+                                </child>
+                                <child>
+                                  <object class="GtkRadioButton" id="list_button">
+                                    <property name="active">True</property>
+                                    <property name="visible">True</property>
+                                    <property name="draw-indicator">False</property>
+                                    <property name="group">grid_button</property>
+                                    <style>
+                                      <class name="image-button"/>
+                                    </style>
+                                    <child>
+                                      <object class="GtkImage">
+                                        <property name="visible">True</property>
+                                        <property name="icon-size">1</property>
+                                        <property name="icon-name">view-list-symbolic</property>
+                                      </object>
+                                    </child>
                                   </object>
                                 </child>
                               </object>
                             </child>
                             <child>
-                              <object class="GtkRadioButton" id="list_button">
-                                <property name="active">True</property>
+                              <object class="GtkButton" id="circular_button">
                                 <property name="visible">True</property>
-                                <property name="draw-indicator">False</property>
-                                <property name="group">grid_button</property>
                                 <style>
                                   <class name="image-button"/>
+                                  <class name="circular-button"/>
                                 </style>
                                 <child>
                                   <object class="GtkImage">
                                     <property name="visible">True</property>
                                     <property name="icon-size">1</property>
-                                    <property name="icon-name">view-list-symbolic</property>
+                                    <property name="icon-name">emblem-system-symbolic</property>
                                   </object>
                                 </child>
                               </object>
@@ -3003,19 +3026,8 @@ microphone-sensitivity-medium-symbolic</property>
                           </object>
                         </child>
                         <child>
-                          <object class="GtkButton" id="circular_button">
+                          <object class="GtkLockButton" id="lockbutton">
                             <property name="visible">True</property>
-                            <style>
-                              <class name="image-button"/>
-                              <class name="circular-button"/>
-                            </style>
-                            <child>
-                              <object class="GtkImage">
-                                <property name="visible">True</property>
-                                <property name="icon-size">1</property>
-                                <property name="icon-name">emblem-system-symbolic</property>
-                              </object>
-                            </child>
                           </object>
                         </child>
                       </object>
@@ -3602,7 +3614,6 @@ microphone-sensitivity-medium-symbolic</property>
                     <child>
                       <object class="GtkBox">
                         <property name="visible">True</property>
-                        <property name="orientation">horizontal</property>
                         <property name="halign">center</property>
                         <child>
                           <object class="GtkEntry">
@@ -3610,11 +3621,6 @@ microphone-sensitivity-medium-symbolic</property>
                             <property name="can_focus">True</property>
                             <property name="placeholder_text" translatable="yes">Name…</property>
                           </object>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">True</property>
-                            <property name="position">0</property>
-                          </packing>
                         </child>
                         <child>
                           <object class="GtkEntry">
@@ -3623,8 +3629,6 @@ microphone-sensitivity-medium-symbolic</property>
                             <property name="placeholder_text" translatable="yes">Age…</property>
                           </object>
                           <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">True</property>
                             <property name="position">1</property>
                           </packing>
                         </child>
@@ -3928,7 +3932,6 @@ bad things might happen.</property>
             <property name="visible">True</property>
             <property name="shadow-type">in</property>
             <property name="hscrollbar-policy">never</property>
-            <property name="vscrollbar-policy">automatic</property>
             <property name="min-content-height">70</property>
             <child>
               <object class="GtkTextView" id="open_popover_textview">


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