From 6061f234a98b1025b565fe9f5cc8a25d4f8cd586 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Tue, 29 Apr 2014 12:17:40 -0400 Subject: [PATCH] GtkMenuSectionBox: Don't show separators for nested subsections ...unless they are labeled. To implement this, keep track of the nesting depth of section boxes, starting from 0 for the toplevel and the submenu ones, and only insert unlabeled separators if the depth is at most 1. --- gtk/gtkmenusectionbox.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/gtk/gtkmenusectionbox.c b/gtk/gtkmenusectionbox.c index 935ddf51af..f9489aa0c5 100644 --- a/gtk/gtkmenusectionbox.c +++ b/gtk/gtkmenusectionbox.c @@ -46,6 +46,7 @@ struct _GtkMenuSectionBox GtkWidget *separator; guint separator_sync_idle; gboolean iconic; + gint depth; }; G_DEFINE_TYPE (GtkMenuSectionBox, gtk_menu_section_box, GTK_TYPE_BOX) @@ -56,7 +57,7 @@ void gtk_menu_section_box_new_submenu (GtkMenu GtkMenuSectionBox *toplevel, GtkWidget *focus); GtkWidget * gtk_menu_section_box_new_section (GtkMenuTrackerItem *item, - GtkMenuSectionBox *toplevel); + GtkMenuSectionBox *parent); static void gtk_menu_section_box_sync_item (GtkWidget *widget, @@ -96,7 +97,7 @@ gtk_menu_section_box_sync_separators (GtkMenuSectionBox *box, has_separator = gtk_widget_get_parent (box->separator) != NULL; has_label = !GTK_IS_SEPARATOR (box->separator); - should_have_separator = (has_label || n_items_before > 0) && *n_items > n_items_before; + should_have_separator = (has_label || (n_items_before > 0 && box->depth <= 1)) && *n_items > n_items_before; if (should_have_separator == has_separator) return; @@ -229,7 +230,7 @@ gtk_menu_section_box_insert_func (GtkMenuTrackerItem *item, if (gtk_menu_tracker_item_get_is_separator (item)) { - widget = gtk_menu_section_box_new_section (item, box->toplevel); + widget = gtk_menu_section_box_new_section (item, box); } else if (gtk_menu_tracker_item_get_has_link (item, G_MENU_LINK_SUBMENU)) { @@ -395,7 +396,7 @@ gtk_menu_section_box_new_submenu (GtkMenuTrackerItem *item, GtkWidget * gtk_menu_section_box_new_section (GtkMenuTrackerItem *item, - GtkMenuSectionBox *toplevel) + GtkMenuSectionBox *parent) { GtkMenuSectionBox *box; GtkWidget *separator; @@ -403,8 +404,9 @@ gtk_menu_section_box_new_section (GtkMenuTrackerItem *item, const gchar *hint; box = g_object_new (GTK_TYPE_MENU_SECTION_BOX, NULL); - box->size_group = g_object_ref (toplevel->size_group); - box->toplevel = toplevel; + box->size_group = g_object_ref (parent->size_group); + box->toplevel = parent->toplevel; + box->depth = parent->depth + 1; separator = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL); label = gtk_menu_tracker_item_get_label (item);