]> Pileus Git - ~andy/gtk/commitdiff
Kill gtk_tree_view_size_request
authorJohn Lindgren <john.lindgren@aol.com>
Tue, 18 Dec 2012 05:47:07 +0000 (00:47 -0500)
committerBenjamin Otte <otte@redhat.com>
Tue, 15 Jan 2013 13:40:40 +0000 (14:40 +0100)
Splits up size_request() so that the height calculations are only done
when get_preferred_height() is called and the width calculations are
only done when get_preferred_width() is called.  Since
get_preferred_width() does not change the treeview->priv->width value,
treeview->priv->prev_width will always be equal to it and can therefore
be removed.  The only place where prev_width was used is a block in
gtk_tree_view_size_allocate().  This block seems to be adjusting the
horizontal scrollbar to account for treeview->priv->width having been
changed in size_request() and should no longer be necessary.  A similar
block immediately above it seems to already account for the width change
in size_allocate().

https://bugzilla.gnome.org/show_bug.cgi?id=691751

gtk/gtktreeview.c

index 688a558cf43a8ae4a523a3dbd3a7010a3d1e578b..5f6cfea28f467bfe6c959e7e2ff93ddbe245ba63 100644 (file)
@@ -386,8 +386,6 @@ struct _GtkTreeViewPrivate
   gint x_drag;
 
   /* Non-interactive Header Resizing, expand flag support */
-  gint prev_width;
-
   gint last_extra_space;
   gint last_extra_space_per_column;
   gint last_number_of_expand_columns;
@@ -585,9 +583,6 @@ static void     gtk_tree_view_get_preferred_width  (GtkWidget        *widget,
 static void     gtk_tree_view_get_preferred_height (GtkWidget        *widget,
                                                    gint             *minimum,
                                                    gint             *natural);
-static void     gtk_tree_view_size_request         (GtkWidget        *widget,
-                                                   GtkRequisition   *requisition,
-                                                    gboolean          may_validate);
 static void     gtk_tree_view_size_allocate        (GtkWidget        *widget,
                                                    GtkAllocation    *allocation);
 static gboolean gtk_tree_view_draw                 (GtkWidget        *widget,
@@ -2368,9 +2363,9 @@ gtk_tree_view_unrealize (GtkWidget *widget)
   GTK_WIDGET_CLASS (gtk_tree_view_parent_class)->unrealize (widget);
 }
 
-/* GtkWidget::size_request helper */
+/* GtkWidget::get_preferred_height helper */
 static void
-gtk_tree_view_size_request_columns (GtkTreeView *tree_view)
+gtk_tree_view_update_height (GtkTreeView *tree_view)
 {
   GList *list;
 
@@ -2388,76 +2383,39 @@ gtk_tree_view_size_request_columns (GtkTreeView *tree_view)
       gtk_widget_get_preferred_size (button, &requisition, NULL);
       tree_view->priv->header_height = MAX (tree_view->priv->header_height, requisition.height);
     }
-}
 
+  if (tree_view->priv->tree == NULL)
+    tree_view->priv->height = 0;
+  else
+    tree_view->priv->height = tree_view->priv->tree->root->offset;
+}
 
-/* Called only by ::size_request */
 static void
-gtk_tree_view_update_size (GtkTreeView *tree_view)
+gtk_tree_view_get_preferred_width (GtkWidget *widget,
+                                  gint      *minimum,
+                                  gint      *natural)
 {
+  GtkTreeView *tree_view = GTK_TREE_VIEW (widget);
   GList *list;
   GtkTreeViewColumn *column;
-  gint i;
-
-  if (tree_view->priv->model == NULL)
-    {
-      tree_view->priv->width = 0;
-      tree_view->priv->prev_width = 0;                   
-      tree_view->priv->height = 0;
-      return;
-    }
+  gint width = 0;
 
-  tree_view->priv->prev_width = tree_view->priv->width;  
-  tree_view->priv->width = 0;
+  /* we validate some rows initially just to make sure we have some size.
+   * In practice, with a lot of static lists, this should get a good width.
+   */
+  do_validate_rows (tree_view, FALSE);
 
   /* keep this in sync with size_allocate below */
-  for (list = tree_view->priv->columns, i = 0; list; list = list->next, i++)
+  for (list = tree_view->priv->columns; list; list = list->next)
     {
       column = list->data;
       if (!gtk_tree_view_column_get_visible (column))
        continue;
 
-      tree_view->priv->width += _gtk_tree_view_column_request_width (column);
-    }
-
-  if (tree_view->priv->tree == NULL)
-    tree_view->priv->height = 0;
-  else
-    tree_view->priv->height = tree_view->priv->tree->root->offset;
-}
-
-static void
-gtk_tree_view_size_request (GtkWidget      *widget,
-                           GtkRequisition *requisition,
-                            gboolean        may_validate)
-{
-  GtkTreeView *tree_view = GTK_TREE_VIEW (widget);
-
-  if (may_validate)
-    {
-      /* we validate some rows initially just to make sure we have some size.
-       * In practice, with a lot of static lists, this should get a good width.
-       */
-      do_validate_rows (tree_view, FALSE);
+      width += _gtk_tree_view_column_request_width (column);
     }
 
-  gtk_tree_view_size_request_columns (tree_view);
-  gtk_tree_view_update_size (GTK_TREE_VIEW (widget));
-
-  requisition->width = tree_view->priv->width;
-  requisition->height = tree_view->priv->height + gtk_tree_view_get_effective_header_height (tree_view);
-}
-
-static void
-gtk_tree_view_get_preferred_width (GtkWidget *widget,
-                                  gint      *minimum,
-                                  gint      *natural)
-{
-  GtkRequisition requisition;
-
-  gtk_tree_view_size_request (widget, &requisition, TRUE);
-
-  *minimum = *natural = requisition.width;
+  *minimum = *natural = width;
 }
 
 static void
@@ -2465,11 +2423,14 @@ gtk_tree_view_get_preferred_height (GtkWidget *widget,
                                    gint      *minimum,
                                    gint      *natural)
 {
-  GtkRequisition requisition;
+  GtkTreeView *tree_view = GTK_TREE_VIEW (widget);
+  gint height;
+
+  gtk_tree_view_update_height (tree_view);
 
-  gtk_tree_view_size_request (widget, &requisition, TRUE);
+  height = tree_view->priv->height + gtk_tree_view_get_effective_header_height (tree_view);
 
-  *minimum = *natural = requisition.height;
+  *minimum = *natural = height;
 }
 
 static int
@@ -2723,11 +2684,6 @@ gtk_tree_view_size_allocate (GtkWidget     *widget,
                                                0,
                                                tree_view->priv->width - allocation->width));
            }
-         else
-            gtk_adjustment_set_value (tree_view->priv->hadjustment,
-                                      CLAMP (tree_view->priv->width - (tree_view->priv->prev_width - gtk_adjustment_get_value (tree_view->priv->hadjustment)),
-                                             0,
-                                             tree_view->priv->width - allocation->width));
        }
       else
         {