[gtk+/treeview-refactor] Welcome _gtk_tree_view_column_get_cell_at_pos to the second dimension



commit ff39c76bfd9ea882c80c60313b594cf73035fa6e
Author: Kristian Rietveld <kris gtk org>
Date:   Sun Dec 12 15:22:49 2010 +0100

    Welcome _gtk_tree_view_column_get_cell_at_pos to the second dimension

 gtk/gtktreeprivate.h    |    4 +++-
 gtk/gtktreeview.c       |   12 +++++++++---
 gtk/gtktreeviewcolumn.c |   33 +++++++++------------------------
 3 files changed, 21 insertions(+), 28 deletions(-)
---
diff --git a/gtk/gtktreeprivate.h b/gtk/gtktreeprivate.h
index be630f8..9fe2074 100644
--- a/gtk/gtktreeprivate.h
+++ b/gtk/gtktreeprivate.h
@@ -122,7 +122,9 @@ gboolean _gtk_tree_view_column_cell_event   (GtkTreeViewColumn  *tree_column,
 gboolean          _gtk_tree_view_column_has_editable_cell(GtkTreeViewColumn  *column);
 GtkCellRenderer  *_gtk_tree_view_column_get_edited_cell  (GtkTreeViewColumn  *column);
 GtkCellRenderer  *_gtk_tree_view_column_get_cell_at_pos  (GtkTreeViewColumn  *column,
-							  gint                x);
+                                                          GdkRectangle       *cell_area,
+                                                          gint                x,
+                                                          gint                y);
 
 void		  _gtk_tree_view_column_cell_render      (GtkTreeViewColumn  *tree_column,
 							  cairo_t            *cr,
diff --git a/gtk/gtktreeview.c b/gtk/gtktreeview.c
index fd010fd..5833be6 100644
--- a/gtk/gtktreeview.c
+++ b/gtk/gtktreeview.c
@@ -3128,9 +3128,15 @@ gtk_tree_view_button_press (GtkWidget      *widget,
           if ((event->state & GDK_SHIFT_MASK) == GDK_SHIFT_MASK)
             tree_view->priv->shift_pressed = TRUE;
 
-
-	  /* This needs an x and a y ! */
-          focus_cell = _gtk_tree_view_column_get_cell_at_pos (column, event->x - background_area.x);
+          /* We update the focus cell here, this is also needed if the
+           * column does not contain an editable cell.  In this case,
+           * GtkCellArea did not receive the event for processing (and
+           * could not update the focus cell).
+           */
+          focus_cell = _gtk_tree_view_column_get_cell_at_pos (column,
+                                                              &cell_area,
+                                                              event->x,
+                                                              event->y);
 
           if (focus_cell)
             gtk_tree_view_column_focus_cell (column, focus_cell);
diff --git a/gtk/gtktreeviewcolumn.c b/gtk/gtktreeviewcolumn.c
index fe6e5f5..fd5eb1c 100644
--- a/gtk/gtktreeviewcolumn.c
+++ b/gtk/gtktreeviewcolumn.c
@@ -1472,34 +1472,19 @@ _gtk_tree_view_column_get_edited_cell (GtkTreeViewColumn *column)
 
 GtkCellRenderer *
 _gtk_tree_view_column_get_cell_at_pos (GtkTreeViewColumn *column,
-                                       gint               x)
+                                       GdkRectangle      *cell_area,
+                                       gint               x,
+                                       gint               y)
 {
-  GList *list;
-  GList *cell;
   GtkCellRenderer *match = NULL;
   GtkTreeViewColumnPrivate *priv = column->priv;
 
-  list = gtk_cell_layout_get_cells (GTK_CELL_LAYOUT (column));
-  for (cell = list; cell; cell = cell->next)
-    {
-      GdkRectangle zero_cell_area = { 0, };
-      GdkRectangle allocation;
-
-      gtk_cell_area_get_cell_allocation (priv->cell_area,
-                                         priv->cell_area_context,
-                                         priv->tree_view,
-                                         cell->data,
-                                         &zero_cell_area,
-                                         &allocation);
-
-      if (allocation.x <= x && x <= allocation.x + allocation.width)
-        {
-          match = cell->data;
-          break;
-        }
-    }
-
-  g_list_free (list);
+  match = gtk_cell_area_get_cell_at_position (priv->cell_area,
+                                              priv->cell_area_context,
+                                              priv->tree_view,
+                                              cell_area,
+                                              x, y,
+                                              NULL);
 
   return match;
 }



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