popover bar: Add setters

Add setters/getters for the menu-model property.
This commit is contained in:
Matthias Clasen
2019-06-09 16:04:12 +00:00
parent d936967b7a
commit 65f71cdbae
2 changed files with 48 additions and 31 deletions

View File

@@ -390,35 +390,6 @@ tracker_insert (GtkMenuTrackerItem *item,
g_warning ("Don't know how to handle this item");
}
static void
gtk_popover_bar_set_menu_model (GtkPopoverBar *bar,
GMenuModel *model)
{
if (g_set_object (&bar->model, model))
{
GtkWidget *child;
GtkActionMuxer *muxer;
while ((child = gtk_widget_get_first_child (GTK_WIDGET (bar))))
gtk_widget_destroy (child);
g_clear_pointer (&bar->tracker, gtk_menu_tracker_free);
muxer = _gtk_widget_get_action_muxer (GTK_WIDGET (bar), TRUE);
bar->tracker = gtk_menu_tracker_new (GTK_ACTION_OBSERVABLE (muxer),
model,
FALSE,
TRUE,
FALSE,
NULL,
tracker_insert,
tracker_remove,
bar);
g_object_notify_by_pspec (G_OBJECT (bar), bar_props[PROP_MENU_MODEL]);
}
}
static void
gtk_popover_bar_set_property (GObject *object,
guint property_id,
@@ -526,3 +497,43 @@ gtk_popover_bar_new_from_model (GMenuModel *model)
"menu-model", model,
NULL);
}
void
gtk_popover_bar_set_menu_model (GtkPopoverBar *bar,
GMenuModel *model)
{
g_return_if_fail (GTK_IS_POPOVER_BAR (bar));
g_return_if_fail (G_IS_MENU_MODEL (model));
if (g_set_object (&bar->model, model))
{
GtkWidget *child;
GtkActionMuxer *muxer;
while ((child = gtk_widget_get_first_child (GTK_WIDGET (bar))))
gtk_widget_destroy (child);
g_clear_pointer (&bar->tracker, gtk_menu_tracker_free);
muxer = _gtk_widget_get_action_muxer (GTK_WIDGET (bar), TRUE);
bar->tracker = gtk_menu_tracker_new (GTK_ACTION_OBSERVABLE (muxer),
model,
FALSE,
TRUE,
FALSE,
NULL,
tracker_insert,
tracker_remove,
bar);
g_object_notify_by_pspec (G_OBJECT (bar), bar_props[PROP_MENU_MODEL]);
}
}
GMenuModel *
gtk_popover_bar_get_menu_model (GtkPopoverBar *bar)
{
g_return_val_if_fail (GTK_IS_POPOVER_BAR (bar), NULL);
return bar->model;
}

View File

@@ -36,10 +36,16 @@ G_BEGIN_DECLS
typedef struct _GtkPopoverBar GtkPopoverBar;
GDK_AVAILABLE_IN_ALL
GType gtk_popover_bar_get_type (void) G_GNUC_CONST;
GType gtk_popover_bar_get_type (void) G_GNUC_CONST;
GDK_AVAILABLE_IN_ALL
GtkWidget* gtk_popover_bar_new_from_model (GMenuModel *model);
GtkWidget * gtk_popover_bar_new_from_model (GMenuModel *model);
GDK_AVAILABLE_IN_ALL
void gtk_popover_bar_set_menu_model (GtkPopoverBar *bar,
GMenuModel *model);
GDK_AVAILABLE_IN_ALL
GMenuModel * gtk_popover_bar_get_menu_model (GtkPopoverBar *bar);
G_END_DECLS