[gnome-builder] layout: use sizegroup to keep panel header heights in sync



commit d1ad38049fe337f3783617c4f885aee90f242728
Author: Christian Hergert <chergert redhat com>
Date:   Fri Dec 11 01:40:00 2015 -0800

    layout: use sizegroup to keep panel header heights in sync

 data/ui/ide-workbench.ui       |    3 +++
 libide/ide-layout-pane.c       |    6 ++++++
 libide/ide-layout-tab-bar.c    |   19 +++++++++++++++++++
 libide/ide-workbench-private.h |    2 ++
 libide/ide-workbench.c         |    1 +
 5 files changed, 31 insertions(+), 0 deletions(-)
---
diff --git a/data/ui/ide-workbench.ui b/data/ui/ide-workbench.ui
index f1e8f7e..17dca7e 100644
--- a/data/ui/ide-workbench.ui
+++ b/data/ui/ide-workbench.ui
@@ -62,4 +62,7 @@
       </object>
     </child>
   </template>
+  <object class="GtkSizeGroup" id="header_size_group">
+    <property name="mode">vertical</property>
+  </object>
 </interface>
diff --git a/libide/ide-layout-pane.c b/libide/ide-layout-pane.c
index abb794c..cc4f6e3 100644
--- a/libide/ide-layout-pane.c
+++ b/libide/ide-layout-pane.c
@@ -21,6 +21,8 @@
 #include "egg-signal-group.h"
 
 #include "ide-layout-pane.h"
+#include "ide-workbench.h"
+#include "ide-workbench-private.h"
 
 struct _IdeLayoutPane
 {
@@ -199,6 +201,10 @@ ide_layout_pane_hierarchy_changed (GtkWidget *widget,
     toplevel = NULL;
 
   egg_signal_group_set_target (self->toplevel_signals, toplevel);
+
+  if (IDE_IS_WORKBENCH (toplevel) && gtk_widget_get_visible (GTK_WIDGET (self->stack_switcher)))
+    gtk_size_group_add_widget (IDE_WORKBENCH (toplevel)->header_size_group,
+                               GTK_WIDGET (self->stack_switcher));
 }
 
 static void
diff --git a/libide/ide-layout-tab-bar.c b/libide/ide-layout-tab-bar.c
index 477d526..f4cb33c 100644
--- a/libide/ide-layout-tab-bar.c
+++ b/libide/ide-layout-tab-bar.c
@@ -302,6 +302,23 @@ ide_layout_tab_bar_set_stack (IdeLayoutTabBar *self,
 }
 
 static void
+ide_layout_tab_bar_hierarchy_changed (GtkWidget *widget,
+                                      GtkWidget *old_toplevel)
+{
+  IdeLayoutTabBar *self = (IdeLayoutTabBar *)widget;
+  GtkWidget *toplevel;
+
+  g_assert (IDE_IS_LAYOUT_TAB_BAR (self));
+
+  toplevel = gtk_widget_get_toplevel (GTK_WIDGET (self));
+  if (!GTK_IS_WINDOW (toplevel))
+    toplevel = NULL;
+
+  if (IDE_IS_WORKBENCH (toplevel))
+    gtk_size_group_add_widget (IDE_WORKBENCH (toplevel)->header_size_group, widget);
+}
+
+static void
 ide_layout_tab_bar_get_property (GObject    *object,
                                  guint       prop_id,
                                  GValue     *value,
@@ -348,6 +365,8 @@ ide_tab_layout_bar_class_init (IdeLayoutTabBarClass *klass)
   object_class->get_property = ide_layout_tab_bar_get_property;
   object_class->set_property = ide_layout_tab_bar_set_property;
 
+  widget_class->hierarchy_changed = ide_layout_tab_bar_hierarchy_changed;
+
   properties [PROP_STACK] =
     g_param_spec_object ("stack",
                          "stack",
diff --git a/libide/ide-workbench-private.h b/libide/ide-workbench-private.h
index 0d2239e..0f1f98e 100644
--- a/libide/ide-workbench-private.h
+++ b/libide/ide-workbench-private.h
@@ -43,6 +43,8 @@ struct _IdeWorkbench
   GtkStack                  *perspectives_stack;
   GtkStackSwitcher          *perspectives_stack_switcher;
   GtkPopover                *perspectives_popover;
+
+  GtkSizeGroup              *header_size_group;
 };
 
 void ide_workbench_set_context  (IdeWorkbench *workbench,
diff --git a/libide/ide-workbench.c b/libide/ide-workbench.c
index 7775f79..94a97f8 100644
--- a/libide/ide-workbench.c
+++ b/libide/ide-workbench.c
@@ -332,6 +332,7 @@ ide_workbench_class_init (IdeWorkbenchClass *klass)
 
   gtk_widget_class_set_css_name (widget_class, "workbench");
   gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/builder/ui/ide-workbench.ui");
+  gtk_widget_class_bind_template_child (widget_class, IdeWorkbench, header_size_group);
   gtk_widget_class_bind_template_child (widget_class, IdeWorkbench, perspectives_stack);
   gtk_widget_class_bind_template_child (widget_class, IdeWorkbench, perspectives_stack_switcher);
   gtk_widget_class_bind_template_child (widget_class, IdeWorkbench, titlebar_stack);


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