[gtk+] treeview: Do not unconditionally set width_changed to TRUE, which redraws



commit 874dfc24b2825be505bffbfc0bd7564ab654f254
Author: Kristian Rietveld <kris gtk org>
Date:   Tue Apr 5 21:13:43 2011 +0200

    treeview: Do not unconditionally set width_changed to TRUE, which redraws
    
    Patches by Benjamin Otte.
    
    The "invalidate last column" hack is removed.  It is now of no use since
    the entire widget will be redrawn when a single column changes.

 gtk/gtktreeview.c       |   86 ++++------------------------------------------
 gtk/gtktreeviewcolumn.c |    3 ++
 2 files changed, 11 insertions(+), 78 deletions(-)
---
diff --git a/gtk/gtktreeview.c b/gtk/gtktreeview.c
index 4c62fa6..7c2901d 100644
--- a/gtk/gtktreeview.c
+++ b/gtk/gtktreeview.c
@@ -2489,63 +2489,6 @@ gtk_tree_view_calculate_width_before_expander (GtkTreeView *tree_view)
   return width;
 }
 
-static void
-invalidate_column (GtkTreeView       *tree_view,
-                   GtkTreeViewColumn *column)
-{
-  gint column_offset = 0;
-  GList *list;
-  GtkWidget *widget = GTK_WIDGET (tree_view);
-  gboolean rtl;
-
-  if (!gtk_widget_get_realized (widget))
-    return;
-
-  rtl = (gtk_widget_get_direction (GTK_WIDGET (tree_view)) == GTK_TEXT_DIR_RTL);
-  for (list = (rtl ? g_list_last (tree_view->priv->columns) : g_list_first (tree_view->priv->columns));
-       list;
-       list = (rtl ? list->prev : list->next))
-    {
-      GtkTreeViewColumn *tmpcolumn = list->data;
-      if (tmpcolumn == column)
-	{
-          GtkAllocation allocation;
-	  GdkRectangle invalid_rect;
-
-          gtk_widget_get_allocation (widget, &allocation);
-	  invalid_rect.x = column_offset;
-	  invalid_rect.y = 0;
-	  invalid_rect.width = gtk_tree_view_column_get_width (column);
-	  invalid_rect.height = allocation.height;
-
-	  gdk_window_invalidate_rect (gtk_widget_get_window (widget), &invalid_rect, TRUE);
-	  break;
-	}
-
-      column_offset += gtk_tree_view_column_get_width (tmpcolumn);
-    }
-}
-
-static void
-invalidate_last_column (GtkTreeView *tree_view)
-{
-  GList *last_column;
-  gboolean rtl;
-
-  rtl = (gtk_widget_get_direction (GTK_WIDGET (tree_view)) == GTK_TEXT_DIR_RTL);
-
-  for (last_column = (rtl ? g_list_first (tree_view->priv->columns) : g_list_last (tree_view->priv->columns));
-       last_column;
-       last_column = (rtl ? last_column->next : last_column->prev))
-    {
-      if (gtk_tree_view_column_get_visible (GTK_TREE_VIEW_COLUMN (last_column->data)))
-        {
-          invalidate_column (tree_view, last_column->data);
-          return;
-        }
-    }
-}
-
 /* GtkWidget::size_allocate helper */
 static void
 gtk_tree_view_size_allocate_columns (GtkWidget *widget,
@@ -2559,7 +2502,6 @@ gtk_tree_view_size_allocate_columns (GtkWidget *widget,
   gint extra, extra_per_column, extra_for_last;
   gint full_requested_width = 0;
   gint number_of_expand_columns = 0;
-  gboolean column_changed = FALSE;
   gboolean rtl;
   gboolean update_expand;
   
@@ -2694,20 +2636,18 @@ gtk_tree_view_size_allocate_columns (GtkWidget *widget,
       _gtk_tree_view_column_allocate (column, width, column_width);
 
       width += column_width;
-
-      if (column_width > old_width)
-        column_changed = TRUE;
     }
 
   /* We change the width here.  The user might have been resizing columns,
-   * so the total width of the tree view changes.
+   * which changes the total width of the tree view.  This is of
+   * importance for getting the horizontal scroll bar right.
    */
-  tree_view->priv->width = width;
-  if (width_changed)
-    *width_changed = TRUE;
-
-  if (column_changed)
-    gtk_widget_queue_draw (GTK_WIDGET (tree_view));
+  if (tree_view->priv->width != width)
+    {
+      tree_view->priv->width = width;
+      if (width_changed)
+        *width_changed = TRUE;
+    }
 }
 
 
@@ -2874,16 +2814,6 @@ gtk_tree_view_size_allocate (GtkWidget     *widget,
 
           tree_view->priv->prev_width_before_expander = width_before_expander;
         }
-
-      /* This little hack only works if we have an LTR locale, and no column has the  */
-      if (width_changed)
-	{
-	  if (gtk_widget_get_direction (GTK_WIDGET (tree_view)) == GTK_TEXT_DIR_LTR &&
-	      ! has_expand_column)
-	    invalidate_last_column (tree_view);
-	  else
-	    gtk_widget_queue_draw (widget);
-	}
     }
 }
 
diff --git a/gtk/gtktreeviewcolumn.c b/gtk/gtktreeviewcolumn.c
index 892db02..cb04b1b 100644
--- a/gtk/gtktreeviewcolumn.c
+++ b/gtk/gtktreeviewcolumn.c
@@ -2110,6 +2110,9 @@ _gtk_tree_view_column_allocate (GtkTreeViewColumn *tree_column,
 
   priv = tree_column->priv;
 
+  if (priv->width != width)
+    gtk_widget_queue_draw (priv->tree_view);
+
   priv->width = width;
 
   gtk_cell_area_context_allocate (priv->cell_area_context, priv->width - priv->padding, -1);



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