summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2015-08-11 00:09:39 +0200
committerMatthias Clasen <mclasen@redhat.com>2015-08-10 22:43:19 -0400
commitcf237eccbeea47d86deace9089cbc0f171218340 (patch)
treeb00cf644563bf25f33b4c5ca1b5a43829931d4e9
parentaa9dd72e8f9bdccd9ea8e6f4f019aa7d037be489 (diff)
downloadgtk+-cf237eccbeea47d86deace9089cbc0f171218340.tar.gz
widget-factory: Add a lock button
-rw-r--r--demos/widget-factory/widget-factory.c112
-rw-r--r--demos/widget-factory/widget-factory.ui171
2 files changed, 199 insertions, 84 deletions
diff --git a/demos/widget-factory/widget-factory.c b/demos/widget-factory/widget-factory.c
index c86fd11c8a..6c0f8fa07f 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 fb79661b63..0cbcbd07f9 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">