summaryrefslogtreecommitdiff
path: root/gtk/gtkmenutracker.c
diff options
context:
space:
mode:
authorRyan Lortie <desrt@desrt.ca>2014-04-28 14:20:08 +0200
committerMatthias Clasen <mclasen@redhat.com>2014-04-28 14:14:42 -0400
commitd930716daf0b04d01832658b21ba96898686c70e (patch)
tree355024ddfcb6514b2bcc6b8064cf4bdb296f2a05 /gtk/gtkmenutracker.c
parentf6ee00769a9190ed95857dab9fc78f935b6645db (diff)
downloadgtk+-d930716daf0b04d01832658b21ba96898686c70e.tar.gz
GtkMenuTracker: add 'merge_sections' flag
Add the possibility of a GtkMenuTracker that performs no section merging. Instead, it will report an item in the form of a separator for subsections. It is then possible to get a separate tracker for the subsection contents by using gtk_menu_tracker_new_for_item_link().
Diffstat (limited to 'gtk/gtkmenutracker.c')
-rw-r--r--gtk/gtkmenutracker.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/gtk/gtkmenutracker.c b/gtk/gtkmenutracker.c
index 87a6d2cb52..dc6e5eb19a 100644
--- a/gtk/gtkmenutracker.c
+++ b/gtk/gtkmenutracker.c
@@ -60,6 +60,7 @@ typedef struct _GtkMenuTrackerSection GtkMenuTrackerSection;
struct _GtkMenuTracker
{
GtkActionObservable *observable;
+ gboolean merge_sections;
GtkMenuTrackerInsertFunc insert_func;
GtkMenuTrackerRemoveFunc remove_func;
gpointer user_data;
@@ -308,7 +309,8 @@ gtk_menu_tracker_add_items (GtkMenuTracker *tracker,
submenu = g_menu_model_get_item_link (model, position + n_items, G_MENU_LINK_SECTION);
g_assert (submenu != model);
- if (submenu != NULL)
+
+ if (submenu != NULL && tracker->merge_sections)
{
GtkMenuTrackerSection *subsection;
gchar *action_namespace = NULL;
@@ -340,7 +342,7 @@ gtk_menu_tracker_add_items (GtkMenuTracker *tracker,
GtkMenuTrackerItem *item;
item = _gtk_menu_tracker_item_new (tracker->observable, model, position + n_items,
- section->action_namespace, FALSE);
+ section->action_namespace, submenu != NULL);
/* In the case that the item may disappear we handle that by
* treating the item that we just created as being its own
@@ -540,6 +542,7 @@ GtkMenuTracker *
gtk_menu_tracker_new (GtkActionObservable *observable,
GMenuModel *model,
gboolean with_separators,
+ gboolean merge_sections,
const gchar *action_namespace,
GtkMenuTrackerInsertFunc insert_func,
GtkMenuTrackerRemoveFunc remove_func,
@@ -548,6 +551,7 @@ gtk_menu_tracker_new (GtkActionObservable *observable,
GtkMenuTracker *tracker;
tracker = g_slice_new (GtkMenuTracker);
+ tracker->merge_sections = merge_sections;
tracker->observable = g_object_ref (observable);
tracker->insert_func = insert_func;
tracker->remove_func = remove_func;
@@ -562,6 +566,7 @@ gtk_menu_tracker_new (GtkActionObservable *observable,
GtkMenuTracker *
gtk_menu_tracker_new_for_item_link (GtkMenuTrackerItem *item,
const gchar *link_name,
+ gboolean merge_sections,
GtkMenuTrackerInsertFunc insert_func,
GtkMenuTrackerRemoveFunc remove_func,
gpointer user_data)
@@ -574,7 +579,7 @@ gtk_menu_tracker_new_for_item_link (GtkMenuTrackerItem *item,
namespace = _gtk_menu_tracker_item_get_link_namespace (item);
tracker = gtk_menu_tracker_new (_gtk_menu_tracker_item_get_observable (item), submenu,
- TRUE, namespace, insert_func, remove_func, user_data);
+ TRUE, merge_sections, namespace, insert_func, remove_func, user_data);
g_object_unref (submenu);
g_free (namespace);