[gnome-builder] header-bar: hide workbench menu when no items are present



commit 6018ad4a4d1a2bac915b57dcd2261bbc51261cf3
Author: Christian Hergert <chergert redhat com>
Date:   Sat Dec 16 15:06:06 2017 -0800

    header-bar: hide workbench menu when no items are present
    
    If there are no items in the workbench menu, we should hide the
    button automatically. This can happen if no plugins add any
    items to the menu.

 src/libide/workbench/ide-workbench-header-bar.c |   29 +++++++++++++++++++++++
 1 files changed, 29 insertions(+), 0 deletions(-)
---
diff --git a/src/libide/workbench/ide-workbench-header-bar.c b/src/libide/workbench/ide-workbench-header-bar.c
index 2bb358c..dc0c44f 100644
--- a/src/libide/workbench/ide-workbench-header-bar.c
+++ b/src/libide/workbench/ide-workbench-header-bar.c
@@ -52,6 +52,23 @@ ide_workbench_header_bar_new (void)
 }
 
 static void
+ide_workbench_header_bar_menu_items_changed (IdeWorkbenchHeaderBar *self,
+                                             guint                  position,
+                                             guint                  removed,
+                                             guint                  added,
+                                             GMenu                 *menu)
+{
+  IdeWorkbenchHeaderBarPrivate *priv = ide_workbench_header_bar_get_instance_private (self);
+  gboolean visible;
+
+  g_assert (IDE_IS_WORKBENCH_HEADER_BAR (self));
+  g_assert (G_IS_MENU (menu));
+
+  visible = g_menu_model_get_n_items (G_MENU_MODEL (menu)) > 0;
+  gtk_widget_set_visible (GTK_WIDGET (priv->menu_button), visible);
+}
+
+static void
 search_popover_position_func (DzlSuggestionEntry *entry,
                               GdkRectangle       *area,
                               gboolean           *is_absolute,
@@ -115,6 +132,18 @@ ide_workbench_header_bar_init (IdeWorkbenchHeaderBar *self)
 
   dzl_suggestion_entry_set_position_func (DZL_SUGGESTION_ENTRY (priv->search_entry),
                                           search_popover_position_func, NULL, NULL);
+
+  /*
+   * We want to track whether or not there are any menu items
+   * in the workbench menu. If there are no items, then we will
+   * hide the menu.
+   */
+  g_signal_connect_object (model,
+                           "items-changed",
+                           G_CALLBACK (ide_workbench_header_bar_menu_items_changed),
+                           self,
+                           G_CONNECT_SWAPPED);
+  ide_workbench_header_bar_menu_items_changed (self, 0, 0, 0, model);
 }
 
 void


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]