[gtk+/wip/desrt/popover-iconic: 4/10] GtkMenuTracker: add 'merge_sections' flag
- From: Ryan Lortie <desrt src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/wip/desrt/popover-iconic: 4/10] GtkMenuTracker: add 'merge_sections' flag
- Date: Mon, 28 Apr 2014 16:15:50 +0000 (UTC)
commit b82ef4ecc70b6dcd5bc38963ec0154e859542b45
Author: Ryan Lortie <desrt desrt ca>
Date: Mon Apr 28 14:20:08 2014 +0200
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().
gtk/gtkmenushell.c | 4 ++--
gtk/gtkmenutracker.c | 11 ++++++++---
gtk/gtkmenutracker.h | 2 ++
gtk/gtkpopover.c | 3 ++-
4 files changed, 14 insertions(+), 6 deletions(-)
---
diff --git a/gtk/gtkmenushell.c b/gtk/gtkmenushell.c
index 6626a0e..3c669a6 100644
--- a/gtk/gtkmenushell.c
+++ b/gtk/gtkmenushell.c
@@ -2071,7 +2071,7 @@ gtk_menu_shell_tracker_insert_func (GtkMenuTrackerItem *item,
* lazy...
*/
submenu->priv->tracker = gtk_menu_tracker_new_for_item_link (item,
- G_MENU_LINK_SUBMENU,
+ G_MENU_LINK_SUBMENU, TRUE,
gtk_menu_shell_tracker_insert_func,
gtk_menu_shell_tracker_remove_func,
submenu);
@@ -2186,7 +2186,7 @@ gtk_menu_shell_bind_model (GtkMenuShell *menu_shell,
if (model)
menu_shell->priv->tracker = gtk_menu_tracker_new (GTK_ACTION_OBSERVABLE (muxer),
- model, with_separators, action_namespace,
+ model, with_separators, FALSE, action_namespace,
gtk_menu_shell_tracker_insert_func,
gtk_menu_shell_tracker_remove_func,
menu_shell);
diff --git a/gtk/gtkmenutracker.c b/gtk/gtkmenutracker.c
index 87a6d2c..dc6e5eb 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);
diff --git a/gtk/gtkmenutracker.h b/gtk/gtkmenutracker.h
index 6d9d6c8..5d4b945 100644
--- a/gtk/gtkmenutracker.h
+++ b/gtk/gtkmenutracker.h
@@ -35,6 +35,7 @@ typedef void (* GtkMenuTrackerRemoveFunc) (gint
GtkMenuTracker * gtk_menu_tracker_new (GtkActionObservable *observer,
GMenuModel *model,
gboolean
with_separators,
+ gboolean
merge_sections,
const gchar
*action_namespace,
GtkMenuTrackerInsertFunc
insert_func,
GtkMenuTrackerRemoveFunc
remove_func,
@@ -42,6 +43,7 @@ GtkMenuTracker * gtk_menu_tracker_new (GtkActi
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);
diff --git a/gtk/gtkpopover.c b/gtk/gtkpopover.c
index 77f414b..7af83ef 100644
--- a/gtk/gtkpopover.c
+++ b/gtk/gtkpopover.c
@@ -2084,7 +2084,7 @@ gtk_popover_tracker_insert_func (GtkMenuTrackerItem *item,
gtk_widget_set_halign (content, GTK_ALIGN_FILL);
gtk_widget_show (content);
gtk_container_add (GTK_CONTAINER (child), content);
- tracker = gtk_menu_tracker_new_for_item_link (item, G_MENU_LINK_SUBMENU,
+ tracker = gtk_menu_tracker_new_for_item_link (item, G_MENU_LINK_SUBMENU, TRUE,
gtk_popover_tracker_insert_func,
gtk_popover_tracker_remove_func, content);
@@ -2202,6 +2202,7 @@ gtk_popover_bind_model (GtkPopover *popover,
priv->tracker = gtk_menu_tracker_new (GTK_ACTION_OBSERVABLE (muxer),
model,
TRUE,
+ TRUE,
action_namespace,
gtk_popover_tracker_insert_func,
gtk_popover_tracker_remove_func,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]