[tepl/wip/tab] Tab: remove scrolled_window instance variable



commit 429e0249872aa755e8551efc1306a2809070e187
Author: Sébastien Wilmet <swilmet gnome org>
Date:   Wed Jun 21 14:59:23 2017 +0200

    Tab: remove scrolled_window instance variable
    
    To pack the info bars in a more generic way.

 tepl/tepl-tab.c |   52 +++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 37 insertions(+), 15 deletions(-)
---
diff --git a/tepl/tepl-tab.c b/tepl/tepl-tab.c
index 2c289e5..7825740 100644
--- a/tepl/tepl-tab.c
+++ b/tepl/tepl-tab.c
@@ -36,9 +36,6 @@
 struct _TeplTabPrivate
 {
        TeplView *view;
-
-       /* @scrolled_window contains @view. */
-       GtkScrolledWindow *scrolled_window;
 };
 
 enum
@@ -78,14 +75,15 @@ static void
 tepl_tab_pack_view_default (TeplTab  *tab,
                            TeplView *view)
 {
-       g_return_if_fail (tab->priv->scrolled_window == NULL);
-       tab->priv->scrolled_window = create_scrolled_window ();
+       GtkScrolledWindow *scrolled_window;
+
+       scrolled_window = create_scrolled_window ();
 
-       gtk_container_add (GTK_CONTAINER (tab->priv->scrolled_window),
+       gtk_container_add (GTK_CONTAINER (scrolled_window),
                           GTK_WIDGET (view));
 
        gtk_container_add (GTK_CONTAINER (tab),
-                          GTK_WIDGET (tab->priv->scrolled_window));
+                          GTK_WIDGET (scrolled_window));
 }
 
 static void
@@ -239,16 +237,40 @@ void
 tepl_tab_add_info_bar (TeplTab    *tab,
                       GtkInfoBar *info_bar)
 {
+       GList *children;
+       GList *l;
+       GtkWidget *sibling = NULL;
+
        g_return_if_fail (TEPL_IS_TAB (tab));
        g_return_if_fail (GTK_IS_INFO_BAR (info_bar));
 
-       gtk_grid_insert_next_to (GTK_GRID (tab),
-                                GTK_WIDGET (tab->priv->scrolled_window),
-                                GTK_POS_TOP);
+       children = gtk_container_get_children (GTK_CONTAINER (tab));
+
+       for (l = children; l != NULL; l = l->next)
+       {
+               GtkWidget *child = l->data;
+
+               if (!GTK_IS_INFO_BAR (child))
+               {
+                       sibling = child;
+                       break;
+               }
+       }
+
+       g_list_free (children);
+
+       if (sibling != NULL)
+       {
+               gtk_grid_insert_next_to (GTK_GRID (tab), sibling, GTK_POS_TOP);
 
-       gtk_grid_attach_next_to (GTK_GRID (tab),
-                                GTK_WIDGET (info_bar),
-                                GTK_WIDGET (tab->priv->scrolled_window),
-                                GTK_POS_TOP,
-                                1, 1);
+               gtk_grid_attach_next_to (GTK_GRID (tab),
+                                        GTK_WIDGET (info_bar),
+                                        sibling,
+                                        GTK_POS_TOP,
+                                        1, 1);
+       }
+       else
+       {
+               gtk_container_add (GTK_CONTAINER (tab), GTK_WIDGET (info_bar));
+       }
 }


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