diff --git a/gtk/Makefile.am b/gtk/Makefile.am index 3209f405120d9a7a5db02e5779d806a8db032339..a5ab08eb393719f82c1bdf35affd83d2bc052194 100644 --- a/gtk/Makefile.am +++ b/gtk/Makefile.am @@ -1099,6 +1099,7 @@ COMPOSITE_TEMPLATES = \ gtkaboutdialog.ui \ gtkdialog.ui \ gtkinfobar.ui \ + gtklockbutton.ui \ gtkmessagedialog.ui # diff --git a/gtk/gtk.gresource.xml b/gtk/gtk.gresource.xml index af69aa0d473e1440e4236f4fa44e529d4f6f5b77..fae2734c49db1fc7a8be321a973384ab2193361c 100644 --- a/gtk/gtk.gresource.xml +++ b/gtk/gtk.gresource.xml @@ -14,6 +14,7 @@ gtkaboutdialog.ui gtkdialog.ui gtkinfobar.ui + gtklockbutton.ui gtkmessagedialog.ui diff --git a/gtk/gtklockbutton.c b/gtk/gtklockbutton.c index 962b4a947d4b7ac12deb7ef8e84104b725387bad..b8a162139d90ea89f1b0c215eecf36f2ad39dfc6 100644 --- a/gtk/gtklockbutton.c +++ b/gtk/gtklockbutton.c @@ -108,7 +108,6 @@ gtk_lock_button_finalize (GObject *object) g_object_unref (priv->icon_lock); g_object_unref (priv->icon_unlock); - g_object_unref (priv->label_group); if (priv->cancellable != NULL) { @@ -226,26 +225,7 @@ gtk_lock_button_init (GtkLockButton *button) GTK_TYPE_LOCK_BUTTON, GtkLockButtonPrivate); - priv->label_group = gtk_size_group_new (GTK_SIZE_GROUP_BOTH); - priv->box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); - gtk_widget_set_halign (priv->box, GTK_ALIGN_CENTER); - gtk_widget_set_valign (priv->box, GTK_ALIGN_CENTER); - gtk_widget_show (priv->box); - gtk_container_add (GTK_CONTAINER (button), priv->box); - priv->image = gtk_image_new (); - gtk_box_pack_start (GTK_BOX (priv->box), priv->image, FALSE, FALSE, 0); - gtk_widget_show (priv->image); - priv->label_lock = gtk_label_new (""); - gtk_misc_set_alignment (GTK_MISC (priv->label_lock), 0, 0.5); - gtk_widget_set_no_show_all (priv->label_lock, TRUE); - gtk_widget_show (priv->label_lock); - gtk_box_pack_start (GTK_BOX (priv->box), priv->label_lock, FALSE, FALSE, 0); - gtk_size_group_add_widget (priv->label_group, priv->label_lock); - priv->label_unlock = gtk_label_new (""); - gtk_misc_set_alignment (GTK_MISC (priv->label_unlock), 0, 0.5); - gtk_widget_set_no_show_all (priv->label_unlock, TRUE); - gtk_box_pack_start (GTK_BOX (priv->box), priv->label_unlock, FALSE, FALSE, 0); - gtk_size_group_add_widget (priv->label_group, priv->label_unlock); + gtk_widget_init_template (GTK_WIDGET (button)); names[0] = "changes-allow-symbolic"; names[1] = "changes-allow"; @@ -328,6 +308,15 @@ gtk_lock_button_class_init (GtkLockButtonClass *klass) G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS)); + /* Bind class to template + */ + gtk_widget_class_set_template_from_resource (widget_class, "/org/gtk/libgtk/gtklockbutton.ui"); + gtk_widget_class_bind_child (widget_class, GtkLockButtonPrivate, box); + gtk_widget_class_bind_child (widget_class, GtkLockButtonPrivate, image); + gtk_widget_class_bind_child (widget_class, GtkLockButtonPrivate, label_lock); + gtk_widget_class_bind_child (widget_class, GtkLockButtonPrivate, label_unlock); + gtk_widget_class_bind_child (widget_class, GtkLockButtonPrivate, label_group); + gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_LOCK_BUTTON_ACCESSIBLE); } diff --git a/gtk/gtklockbutton.ui b/gtk/gtklockbutton.ui new file mode 100644 index 0000000000000000000000000000000000000000..5229a38fea20c152461a012ed69fca2647b0a27d --- /dev/null +++ b/gtk/gtklockbutton.ui @@ -0,0 +1,64 @@ + + + + + + both + + + + + + diff --git a/gtk/tests/templates.c b/gtk/tests/templates.c index 56d09a67bbdb5f952916ca78e5fbf2723df94997..fb43fbcf7c725e843c53b0ca5138ab9a72b819f1 100644 --- a/gtk/tests/templates.c +++ b/gtk/tests/templates.c @@ -75,6 +75,19 @@ test_info_bar_basic (void) gtk_widget_destroy (infobar); } +static void +test_lock_button_basic (void) +{ + GtkWidget *button; + GPermission *permission; + + permission = g_simple_permission_new (TRUE); + button = gtk_lock_button_new (permission); + g_assert (GTK_IS_LOCK_BUTTON (button)); + gtk_widget_destroy (button); + g_object_unref (permission); +} + int main (int argc, char **argv) { @@ -92,6 +105,7 @@ main (int argc, char **argv) g_test_add_func ("/Template/GtkMessageDialog/Basic", test_message_dialog_basic); g_test_add_func ("/Template/GtkAboutDialog/Basic", test_about_dialog_basic); g_test_add_func ("/Template/GtkInfoBar/Basic", test_info_bar_basic); + g_test_add_func ("/Template/GtkLockButton/Basic", test_lock_button_basic); return g_test_run(); }