diff options
author | Matthias Clasen <mclasen@redhat.com> | 2015-08-11 00:09:39 +0200 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2015-08-10 22:43:19 -0400 |
commit | cf237eccbeea47d86deace9089cbc0f171218340 (patch) | |
tree | b00cf644563bf25f33b4c5ca1b5a43829931d4e9 | |
parent | aa9dd72e8f9bdccd9ea8e6f4f019aa7d037be489 (diff) | |
download | gtk+-cf237eccbeea47d86deace9089cbc0f171218340.tar.gz |
widget-factory: Add a lock button
-rw-r--r-- | demos/widget-factory/widget-factory.c | 112 | ||||
-rw-r--r-- | 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 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"> |