summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKristian Rietveld <kris@gtk.org>2010-12-12 15:22:49 +0100
committerKristian Rietveld <kris@gtk.org>2010-12-12 15:22:49 +0100
commitff39c76bfd9ea882c80c60313b594cf73035fa6e (patch)
treecda4a45de33cd8d11b31b7a8d67320c4a0daa445
parentcbfc3f5bf03e837d00c90cc428d24c020af7ace1 (diff)
downloadgtk+-ff39c76bfd9ea882c80c60313b594cf73035fa6e.tar.gz
Welcome _gtk_tree_view_column_get_cell_at_pos to the second dimension
-rw-r--r--gtk/gtktreeprivate.h4
-rw-r--r--gtk/gtktreeview.c12
-rw-r--r--gtk/gtktreeviewcolumn.c33
3 files changed, 21 insertions, 28 deletions
diff --git a/gtk/gtktreeprivate.h b/gtk/gtktreeprivate.h
index be630f8be0..9fe2074a00 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 fd010fd74b..5833be63d2 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 fe6e5f58cc..fd5eb1c6cf 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;
}