[gtk+/native-layout] Partially fixed GtkTreeview for extended layout



commit 22de1a7c65580ad2c73fb989984c332dd850f6b0
Author: Tristan Van Berkom <tristan van berkom gmail com>
Date:   Sat Apr 3 20:30:14 2010 -0400

    Partially fixed GtkTreeview for extended layout
    
    Removed the size_request() handling on the class and calculate
    minimum size from get_desired_size(); base the natural width on
    either the minimum of column headers, or a greater natural request
    of the columns renderers.

 gtk/gtktreeview.c |   76 +++++++++++++++++++++++++---------------------------
 1 files changed, 37 insertions(+), 39 deletions(-)
---
diff --git a/gtk/gtktreeview.c b/gtk/gtktreeview.c
index 5293b04..f680f62 100644
--- a/gtk/gtktreeview.c
+++ b/gtk/gtktreeview.c
@@ -166,8 +166,6 @@ static void     gtk_tree_view_destroy              (GtkObject        *object);
 static void     gtk_tree_view_realize              (GtkWidget        *widget);
 static void     gtk_tree_view_unrealize            (GtkWidget        *widget);
 static void     gtk_tree_view_map                  (GtkWidget        *widget);
-static void     gtk_tree_view_size_request         (GtkWidget        *widget,
-						    GtkRequisition   *requisition);
 static void     gtk_tree_view_size_allocate        (GtkWidget        *widget,
 						    GtkAllocation    *allocation);
 static gboolean gtk_tree_view_expose               (GtkWidget        *widget,
@@ -518,7 +516,6 @@ gtk_tree_view_class_init (GtkTreeViewClass *class)
   widget_class->map = gtk_tree_view_map;
   widget_class->realize = gtk_tree_view_realize;
   widget_class->unrealize = gtk_tree_view_unrealize;
-  widget_class->size_request = gtk_tree_view_size_request;
   widget_class->size_allocate = gtk_tree_view_size_allocate;
   widget_class->button_press_event = gtk_tree_view_button_press;
   widget_class->button_release_event = gtk_tree_view_button_release;
@@ -2027,37 +2024,6 @@ gtk_tree_view_update_size (GtkTreeView *tree_view)
     tree_view->priv->height = tree_view->priv->tree->root->offset;
 }
 
-static void
-gtk_tree_view_size_request (GtkWidget      *widget,
-			    GtkRequisition *requisition)
-{
-  GtkTreeView *tree_view = GTK_TREE_VIEW (widget);
-  GList *tmp_list;
-
-  /* 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);
-  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 + TREE_VIEW_HEADER_HEIGHT (tree_view);
-
-  tmp_list = tree_view->priv->children;
-
-  while (tmp_list)
-    {
-      GtkTreeViewChild *child = tmp_list->data;
-      GtkRequisition child_requisition;
-
-      tmp_list = tmp_list->next;
-
-      if (gtk_widget_get_visible (child->widget))
-        gtk_widget_size_request (child->widget, &child_requisition);
-    }
-}
-
 static int
 gtk_tree_view_calculate_width_before_expander (GtkTreeView *tree_view)
 {
@@ -2179,8 +2145,8 @@ gtk_tree_view_get_real_natural_width_from_column (GtkTreeView       *tree_view,
 
   if (GTK_TREE_VIEW_FLAG_SET (tree_view, GTK_TREE_VIEW_HEADERS_VISIBLE))
     {
-      gtk_extended_layout_get_desired_size (GTK_EXTENDED_LAYOUT (column->button),
-                                            NULL, &button_natural_size);
+      gtk_widget_get_desired_size (column->button,
+				   NULL, &button_natural_size);
 
       column_natural_width = MAX (column_natural_width, button_natural_size.width);
     }
@@ -2197,7 +2163,7 @@ gtk_tree_view_size_allocate_columns (GtkWidget *widget,
   GList *list, *first_column, *last_column;
   GtkTreeViewColumn *column;
   GtkAllocation allocation;
-  gint width = 0, natural_width;
+  gint width = 0, natural_width = 0;
   gint extra, extra_per_column, extra_for_last;
   gint full_requested_width = 0;
   gint full_natural_width = 0;
@@ -15738,6 +15704,38 @@ gtk_tree_view_get_tooltip_column (GtkTreeView *tree_view)
   return tree_view->priv->tooltip_column;
 }
 
+
+static void
+gtk_tree_view_get_minimum_size (GtkWidget      *widget,
+				GtkRequisition *requisition)
+{
+  GtkTreeView *tree_view = GTK_TREE_VIEW (widget);
+  GList *tmp_list;
+
+  /* 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);
+  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 + TREE_VIEW_HEADER_HEIGHT (tree_view);
+
+  tmp_list = tree_view->priv->children;
+
+  while (tmp_list)
+    {
+      GtkTreeViewChild *child = tmp_list->data;
+      GtkRequisition child_requisition;
+
+      tmp_list = tmp_list->next;
+
+      if (gtk_widget_get_visible (child->widget))
+        gtk_widget_size_request (child->widget, &child_requisition);
+    }
+}
+
 static void
 gtk_tree_view_extended_layout_get_desired_size (GtkExtendedLayout *layout,
                                                 GtkRequisition    *minimal_size,
@@ -15750,7 +15748,7 @@ gtk_tree_view_extended_layout_get_desired_size (GtkExtendedLayout *layout,
 
   tree_view = GTK_TREE_VIEW (layout);
 
-  gtk_widget_size_request (GTK_WIDGET (layout), &requisition);
+  gtk_tree_view_get_minimum_size (GTK_WIDGET (layout), &requisition);
 
   for (column_iter = tree_view->priv->columns; column_iter; column_iter = column_iter->next)
     {
@@ -15768,7 +15766,7 @@ gtk_tree_view_extended_layout_get_desired_size (GtkExtendedLayout *layout,
   if (desired_size)
     {
       desired_size->height = requisition.height;
-      desired_size->width = natural_width;
+      desired_size->width = MAX (requisition.width, natural_width);
     }
 }
 



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