diff options
author | Matthias Clasen <mclasen@redhat.com> | 2020-05-08 15:45:36 -0400 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2020-05-11 22:38:21 -0400 |
commit | 58a88a88b88ace142d983ecac77d06172bb85548 (patch) | |
tree | bf09f4e1f350549e15181fe455a7b60298036dee /gtk/gtkshortcutssection.c | |
parent | 537d21155f56a153fef1f0979b938966a460b81d (diff) | |
download | gtk+-58a88a88b88ace142d983ecac77d06172bb85548.tar.gz |
shortcutssection: Drop container bits
When GtkBox stops being a container, GtkShortcutsSection
will also no longer be a container. So, stop overriding
container vfuncs, and instead add a buildable implementation
that does the right thing.
Diffstat (limited to 'gtk/gtkshortcutssection.c')
-rw-r--r-- | gtk/gtkshortcutssection.c | 68 |
1 files changed, 19 insertions, 49 deletions
diff --git a/gtk/gtkshortcutssection.c b/gtk/gtkshortcutssection.c index f6bfbf4d4c..7aef6791f5 100644 --- a/gtk/gtkshortcutssection.c +++ b/gtk/gtkshortcutssection.c @@ -21,6 +21,7 @@ #include "gtkshortcutssection.h" #include "gtkbox.h" +#include "gtkbuildable.h" #include "gtkshortcutsgroup.h" #include "gtkbutton.h" #include "gtklabel.h" @@ -81,7 +82,11 @@ struct _GtkShortcutsSectionClass }; -G_DEFINE_TYPE (GtkShortcutsSection, gtk_shortcuts_section, GTK_TYPE_BOX) +static void gtk_shortcuts_section_buildable_iface_init (GtkBuildableIface *iface); + +G_DEFINE_TYPE_WITH_CODE (GtkShortcutsSection, gtk_shortcuts_section, GTK_TYPE_BOX, + G_IMPLEMENT_INTERFACE (GTK_TYPE_BUILDABLE, + gtk_shortcuts_section_buildable_iface_init)) enum { PROP_0, @@ -119,49 +124,26 @@ static void gtk_shortcuts_section_pan_gesture_pan (GtkGesturePan *gesture, gdouble offset, GtkShortcutsSection *self); -static void -gtk_shortcuts_section_add (GtkContainer *container, - GtkWidget *child) -{ - GtkShortcutsSection *self = GTK_SHORTCUTS_SECTION (container); - - if (GTK_IS_SHORTCUTS_GROUP (child)) - gtk_shortcuts_section_add_group (self, GTK_SHORTCUTS_GROUP (child)); - else - g_warning ("Can't add children of type %s to %s", - G_OBJECT_TYPE_NAME (child), - G_OBJECT_TYPE_NAME (container)); -} +static GtkBuildableIface *parent_buildable_iface; static void -gtk_shortcuts_section_remove (GtkContainer *container, - GtkWidget *child) +gtk_shortcuts_section_buildable_add_child (GtkBuildable *buildable, + GtkBuilder *builder, + GObject *child, + const gchar *type) { - GtkShortcutsSection *self = (GtkShortcutsSection *)container; - - if (GTK_IS_SHORTCUTS_GROUP (child) && - gtk_widget_is_ancestor (child, GTK_WIDGET (container))) - { - self->groups = g_list_remove (self->groups, child); - gtk_box_remove (GTK_BOX (gtk_widget_get_parent (child)), child); - } + if (GTK_IS_SHORTCUTS_GROUP (child)) + gtk_shortcuts_section_add_group (GTK_SHORTCUTS_SECTION (buildable), GTK_SHORTCUTS_GROUP (child)); else - GTK_CONTAINER_CLASS (gtk_shortcuts_section_parent_class)->remove (container, child); + parent_buildable_iface->add_child (buildable, builder, child, type); } static void -gtk_shortcuts_section_forall (GtkContainer *container, - GtkCallback callback, - gpointer callback_data) +gtk_shortcuts_section_buildable_iface_init (GtkBuildableIface *iface) { - GtkShortcutsSection *self = (GtkShortcutsSection *)container; - GList *l; + parent_buildable_iface = g_type_interface_peek_parent (iface); - for (l = self->groups; l; l = l->next) - { - GtkWidget *group = l->data; - callback (group, callback_data); - } + iface->add_child = gtk_shortcuts_section_buildable_add_child; } static void @@ -285,18 +267,11 @@ gtk_shortcuts_section_set_property (GObject *object, } } -static GType -gtk_shortcuts_section_child_type (GtkContainer *container) -{ - return GTK_TYPE_SHORTCUTS_GROUP; -} - static void gtk_shortcuts_section_class_init (GtkShortcutsSectionClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); - GtkContainerClass *container_class = GTK_CONTAINER_CLASS (klass); object_class->finalize = gtk_shortcuts_section_finalize; object_class->dispose = gtk_shortcuts_section_dispose; @@ -306,11 +281,6 @@ gtk_shortcuts_section_class_init (GtkShortcutsSectionClass *klass) widget_class->map = gtk_shortcuts_section_map; widget_class->unmap = gtk_shortcuts_section_unmap; - container_class->add = gtk_shortcuts_section_add; - container_class->remove = gtk_shortcuts_section_remove; - container_class->forall = gtk_shortcuts_section_forall; - container_class->child_type = gtk_shortcuts_section_child_type; - klass->change_current_page = gtk_shortcuts_section_change_current_page; /** @@ -415,7 +385,7 @@ gtk_shortcuts_section_init (GtkShortcutsSection *self) "vexpand", TRUE, "visible", TRUE, NULL); - GTK_CONTAINER_CLASS (gtk_shortcuts_section_parent_class)->add (GTK_CONTAINER (self), GTK_WIDGET (self->stack)); + gtk_box_append (GTK_BOX (self), GTK_WIDGET (self->stack)); self->switcher = g_object_new (GTK_TYPE_STACK_SWITCHER, "halign", GTK_ALIGN_CENTER, @@ -431,7 +401,7 @@ gtk_shortcuts_section_init (GtkShortcutsSection *self) G_CALLBACK (gtk_shortcuts_section_show_all), self); self->footer = gtk_center_box_new (); - GTK_CONTAINER_CLASS (gtk_shortcuts_section_parent_class)->add (GTK_CONTAINER (self), self->footer); + gtk_box_append (GTK_BOX (self), GTK_WIDGET (self->footer)); gtk_widget_set_hexpand (GTK_WIDGET (self->switcher), TRUE); gtk_widget_set_halign (GTK_WIDGET (self->switcher), GTK_ALIGN_CENTER); |