summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog9
-rw-r--r--ChangeLog.pre-2-109
-rw-r--r--ChangeLog.pre-2-29
-rw-r--r--ChangeLog.pre-2-49
-rw-r--r--ChangeLog.pre-2-69
-rw-r--r--ChangeLog.pre-2-89
-rw-r--r--gtk/gtktreeview.c65
7 files changed, 108 insertions, 11 deletions
diff --git a/ChangeLog b/ChangeLog
index a605006b1..8d1fe164a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+Wed May 8 16:14:49 2002 Soeren Sandmann <sandmann@daimi.au.dk>
+
+ * gtk/gtktreeview.c
+ (gtk_tree_view_init): set_redraw_on_allocate (FALSE);
+ (gtk_tree_view_size_allocate): invalidate last column if width
+ changed.
+ (gtk_tree_view_bin_expose): skip over cells that aren't in
+ event->region
+
Tue May 7 18:36:03 2002 Owen Taylor <otaylor@redhat.com>
* gdk/x11/xsettings-client.c (xsettings_client_process_event):
diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10
index a605006b1..8d1fe164a 100644
--- a/ChangeLog.pre-2-10
+++ b/ChangeLog.pre-2-10
@@ -1,3 +1,12 @@
+Wed May 8 16:14:49 2002 Soeren Sandmann <sandmann@daimi.au.dk>
+
+ * gtk/gtktreeview.c
+ (gtk_tree_view_init): set_redraw_on_allocate (FALSE);
+ (gtk_tree_view_size_allocate): invalidate last column if width
+ changed.
+ (gtk_tree_view_bin_expose): skip over cells that aren't in
+ event->region
+
Tue May 7 18:36:03 2002 Owen Taylor <otaylor@redhat.com>
* gdk/x11/xsettings-client.c (xsettings_client_process_event):
diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2
index a605006b1..8d1fe164a 100644
--- a/ChangeLog.pre-2-2
+++ b/ChangeLog.pre-2-2
@@ -1,3 +1,12 @@
+Wed May 8 16:14:49 2002 Soeren Sandmann <sandmann@daimi.au.dk>
+
+ * gtk/gtktreeview.c
+ (gtk_tree_view_init): set_redraw_on_allocate (FALSE);
+ (gtk_tree_view_size_allocate): invalidate last column if width
+ changed.
+ (gtk_tree_view_bin_expose): skip over cells that aren't in
+ event->region
+
Tue May 7 18:36:03 2002 Owen Taylor <otaylor@redhat.com>
* gdk/x11/xsettings-client.c (xsettings_client_process_event):
diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4
index a605006b1..8d1fe164a 100644
--- a/ChangeLog.pre-2-4
+++ b/ChangeLog.pre-2-4
@@ -1,3 +1,12 @@
+Wed May 8 16:14:49 2002 Soeren Sandmann <sandmann@daimi.au.dk>
+
+ * gtk/gtktreeview.c
+ (gtk_tree_view_init): set_redraw_on_allocate (FALSE);
+ (gtk_tree_view_size_allocate): invalidate last column if width
+ changed.
+ (gtk_tree_view_bin_expose): skip over cells that aren't in
+ event->region
+
Tue May 7 18:36:03 2002 Owen Taylor <otaylor@redhat.com>
* gdk/x11/xsettings-client.c (xsettings_client_process_event):
diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6
index a605006b1..8d1fe164a 100644
--- a/ChangeLog.pre-2-6
+++ b/ChangeLog.pre-2-6
@@ -1,3 +1,12 @@
+Wed May 8 16:14:49 2002 Soeren Sandmann <sandmann@daimi.au.dk>
+
+ * gtk/gtktreeview.c
+ (gtk_tree_view_init): set_redraw_on_allocate (FALSE);
+ (gtk_tree_view_size_allocate): invalidate last column if width
+ changed.
+ (gtk_tree_view_bin_expose): skip over cells that aren't in
+ event->region
+
Tue May 7 18:36:03 2002 Owen Taylor <otaylor@redhat.com>
* gdk/x11/xsettings-client.c (xsettings_client_process_event):
diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8
index a605006b1..8d1fe164a 100644
--- a/ChangeLog.pre-2-8
+++ b/ChangeLog.pre-2-8
@@ -1,3 +1,12 @@
+Wed May 8 16:14:49 2002 Soeren Sandmann <sandmann@daimi.au.dk>
+
+ * gtk/gtktreeview.c
+ (gtk_tree_view_init): set_redraw_on_allocate (FALSE);
+ (gtk_tree_view_size_allocate): invalidate last column if width
+ changed.
+ (gtk_tree_view_bin_expose): skip over cells that aren't in
+ event->region
+
Tue May 7 18:36:03 2002 Owen Taylor <otaylor@redhat.com>
* gdk/x11/xsettings-client.c (xsettings_client_process_event):
diff --git a/gtk/gtktreeview.c b/gtk/gtktreeview.c
index 216b96f77..af3c92b97 100644
--- a/gtk/gtktreeview.c
+++ b/gtk/gtktreeview.c
@@ -916,6 +916,8 @@ gtk_tree_view_init (GtkTreeView *tree_view)
tree_view->priv = g_new0 (GtkTreeViewPrivate, 1);
GTK_WIDGET_SET_FLAGS (tree_view, GTK_CAN_FOCUS);
+ gtk_widget_set_redraw_on_allocate (GTK_WIDGET (tree_view), FALSE);
+
tree_view->priv->flags = GTK_TREE_VIEW_IS_LIST | GTK_TREE_VIEW_SHOW_EXPANDERS | GTK_TREE_VIEW_DRAW_KEYFOCUS | GTK_TREE_VIEW_HEADERS_VISIBLE;
/* We need some padding */
@@ -1603,14 +1605,51 @@ gtk_tree_view_size_allocate_columns (GtkWidget *widget)
}
static void
+invalidate_last_column (GtkTreeView *tree_view)
+{
+ GList *list, *last_column;
+ gint last_column_x;
+ GtkWidget *widget = GTK_WIDGET (tree_view);
+
+ for (last_column = g_list_last (tree_view->priv->columns);
+ last_column && !(GTK_TREE_VIEW_COLUMN (last_column->data)->visible);
+ last_column = last_column->prev)
+ ;
+
+ last_column_x = 0;
+ for (list = tree_view->priv->columns; list; list = list->next)
+ {
+ GtkTreeViewColumn *column = list->data;
+ if (list == last_column)
+ {
+ GdkRectangle invalid_rect;
+
+ invalid_rect.x = last_column_x;
+ invalid_rect.y = 0;
+ invalid_rect.width = column->width;
+ invalid_rect.height = widget->allocation.height;
+
+ gdk_window_invalidate_rect (widget->window, &invalid_rect, TRUE);
+ break;
+ }
+
+ last_column_x += column->width;
+ }
+}
+
+static void
gtk_tree_view_size_allocate (GtkWidget *widget,
GtkAllocation *allocation)
{
GList *tmp_list;
GtkTreeView *tree_view;
+ gboolean width_changed = FALSE;
g_return_if_fail (GTK_IS_TREE_VIEW (widget));
+ if (allocation->width != widget->allocation.width)
+ width_changed = TRUE;
+
widget->allocation = *allocation;
tree_view = GTK_TREE_VIEW (widget);
@@ -1672,6 +1711,9 @@ gtk_tree_view_size_allocate (GtkWidget *widget,
}
gtk_tree_view_size_allocate_columns (widget);
+
+ if (GTK_WIDGET_REALIZED (widget) && width_changed)
+ invalidate_last_column (tree_view);
}
static gboolean
@@ -2842,16 +2884,6 @@ gtk_tree_view_bin_expose (GtkWidget *widget,
parity = _gtk_rbtree_node_find_parity (tree, node);
- for (list = tree_view->priv->columns; list; list = list->next)
- {
- GtkTreeViewColumn *column = list->data;
- gtk_tree_view_column_cell_set_cell_data (column,
- tree_view->priv->model,
- &iter,
- GTK_RBNODE_FLAG_SET (node, GTK_RBNODE_IS_PARENT),
- node->children?TRUE:FALSE);
- }
-
has_special_cell = gtk_tree_view_has_special_cell (tree_view);
for (list = tree_view->priv->columns; list; list = list->next)
@@ -2884,6 +2916,18 @@ gtk_tree_view_bin_expose (GtkWidget *widget,
cell_area.height -= vertical_separator;
cell_area.width -= horizontal_separator;
+ if (gdk_region_rect_in (event->region, &background_area) == GDK_OVERLAP_RECTANGLE_OUT)
+ {
+ cell_offset += column->width;
+ continue;
+ }
+
+ gtk_tree_view_column_cell_set_cell_data (column,
+ tree_view->priv->model,
+ &iter,
+ GTK_RBNODE_FLAG_SET (node, GTK_RBNODE_IS_PARENT),
+ node->children?TRUE:FALSE);
+
/* Select the detail for drawing the cell. relevant
* factors are parity, sortedness, and whether to
* display rules.
@@ -2995,7 +3039,6 @@ gtk_tree_view_bin_expose (GtkWidget *widget,
cell_offset += column->width;
}
-
if (node == drag_highlight)
{
/* Draw indicator for the drop