diff options
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | ChangeLog.pre-2-0 | 7 | ||||
-rw-r--r-- | ChangeLog.pre-2-10 | 7 | ||||
-rw-r--r-- | ChangeLog.pre-2-2 | 7 | ||||
-rw-r--r-- | ChangeLog.pre-2-4 | 7 | ||||
-rw-r--r-- | ChangeLog.pre-2-6 | 7 | ||||
-rw-r--r-- | ChangeLog.pre-2-8 | 7 | ||||
-rw-r--r-- | gtk/gtktreeviewcolumn.c | 209 |
8 files changed, 187 insertions, 71 deletions
@@ -1,3 +1,10 @@ +Wed Mar 6 00:20:59 2002 Jonathan Blandford <jrb@redhat.com> + + * gtk/gtktreeviewcolumn.c + (gtk_tree_view_column_cell_process_action): move event handling to + the process_action function so we can have the event go to + individual cells. + Tue Mar 5 22:16:58 2002 Owen Taylor <otaylor@redhat.com> * GTK+-2.0.0 rc1 diff --git a/ChangeLog.pre-2-0 b/ChangeLog.pre-2-0 index 7f805bb67..d5aaceb8a 100644 --- a/ChangeLog.pre-2-0 +++ b/ChangeLog.pre-2-0 @@ -1,3 +1,10 @@ +Wed Mar 6 00:20:59 2002 Jonathan Blandford <jrb@redhat.com> + + * gtk/gtktreeviewcolumn.c + (gtk_tree_view_column_cell_process_action): move event handling to + the process_action function so we can have the event go to + individual cells. + Tue Mar 5 22:16:58 2002 Owen Taylor <otaylor@redhat.com> * GTK+-2.0.0 rc1 diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 7f805bb67..d5aaceb8a 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,10 @@ +Wed Mar 6 00:20:59 2002 Jonathan Blandford <jrb@redhat.com> + + * gtk/gtktreeviewcolumn.c + (gtk_tree_view_column_cell_process_action): move event handling to + the process_action function so we can have the event go to + individual cells. + Tue Mar 5 22:16:58 2002 Owen Taylor <otaylor@redhat.com> * GTK+-2.0.0 rc1 diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2 index 7f805bb67..d5aaceb8a 100644 --- a/ChangeLog.pre-2-2 +++ b/ChangeLog.pre-2-2 @@ -1,3 +1,10 @@ +Wed Mar 6 00:20:59 2002 Jonathan Blandford <jrb@redhat.com> + + * gtk/gtktreeviewcolumn.c + (gtk_tree_view_column_cell_process_action): move event handling to + the process_action function so we can have the event go to + individual cells. + Tue Mar 5 22:16:58 2002 Owen Taylor <otaylor@redhat.com> * GTK+-2.0.0 rc1 diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index 7f805bb67..d5aaceb8a 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,10 @@ +Wed Mar 6 00:20:59 2002 Jonathan Blandford <jrb@redhat.com> + + * gtk/gtktreeviewcolumn.c + (gtk_tree_view_column_cell_process_action): move event handling to + the process_action function so we can have the event go to + individual cells. + Tue Mar 5 22:16:58 2002 Owen Taylor <otaylor@redhat.com> * GTK+-2.0.0 rc1 diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index 7f805bb67..d5aaceb8a 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,10 @@ +Wed Mar 6 00:20:59 2002 Jonathan Blandford <jrb@redhat.com> + + * gtk/gtktreeviewcolumn.c + (gtk_tree_view_column_cell_process_action): move event handling to + the process_action function so we can have the event go to + individual cells. + Tue Mar 5 22:16:58 2002 Owen Taylor <otaylor@redhat.com> * GTK+-2.0.0 rc1 diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index 7f805bb67..d5aaceb8a 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,10 @@ +Wed Mar 6 00:20:59 2002 Jonathan Blandford <jrb@redhat.com> + + * gtk/gtktreeviewcolumn.c + (gtk_tree_view_column_cell_process_action): move event handling to + the process_action function so we can have the event go to + individual cells. + Tue Mar 5 22:16:58 2002 Owen Taylor <otaylor@redhat.com> * GTK+-2.0.0 rc1 diff --git a/gtk/gtktreeviewcolumn.c b/gtk/gtktreeviewcolumn.c index 52b624138..a5009c6b1 100644 --- a/gtk/gtktreeviewcolumn.c +++ b/gtk/gtktreeviewcolumn.c @@ -2260,15 +2260,24 @@ gtk_tree_view_column_cell_get_size (GtkTreeViewColumn *tree_column, * code. Rather than duplicate them, we put them together to keep the code in * one place */ -static void -gtk_tree_view_column_cell_render_or_focus (GtkTreeViewColumn *tree_column, - GdkWindow *window, - GdkRectangle *background_area, - GdkRectangle *cell_area, - GdkRectangle *expose_area, - guint flags, - gboolean render, - GdkRectangle *focus_rectangle) +enum { + CELL_ACTION_RENDER, + CELL_ACTION_FOCUS, + CELL_ACTION_EVENT +}; + +static gboolean +gtk_tree_view_column_cell_process_action (GtkTreeViewColumn *tree_column, + GdkWindow *window, + GdkRectangle *background_area, + GdkRectangle *cell_area, + guint flags, + gint action, + GdkRectangle *expose_area, /* RENDER */ + GdkRectangle *focus_rectangle, /* FOCUS */ + GtkCellEditable **editable_widget, /* EVENT */ + GdkEvent *event, /* EVENT */ + gchar *path_string) /* EVENT */ { GList *list; GdkRectangle real_cell_area; @@ -2286,7 +2295,8 @@ gtk_tree_view_column_cell_render_or_focus (GtkTreeViewColumn *tree_column, real_cell_area = *cell_area; gtk_widget_style_get (GTK_WIDGET (tree_column->tree_view), - "focus-line-width", &focus_line_width, NULL); + "focus-line-width", &focus_line_width, + NULL); /* Find out how my extra space we have to allocate */ for (list = tree_column->cell_list; list; list = list->next) { @@ -2317,7 +2327,7 @@ gtk_tree_view_column_cell_render_or_focus (GtkTreeViewColumn *tree_column, real_cell_area.width = info->requested_width + (info->expand?extra_space:0); real_cell_area.x += focus_line_width; - if (render) + if (action == CELL_ACTION_RENDER) { gtk_cell_renderer_render (info->cell, window, @@ -2327,7 +2337,7 @@ gtk_tree_view_column_cell_render_or_focus (GtkTreeViewColumn *tree_column, expose_area, flags); } - else + else if (action == CELL_ACTION_FOCUS) { gint x_offset, y_offset, width, height; @@ -2346,6 +2356,61 @@ gtk_tree_view_column_cell_render_or_focus (GtkTreeViewColumn *tree_column, if (max_y < real_cell_area.y + y_offset + height) max_y = real_cell_area.y + y_offset + height; } + else if (action == CELL_ACTION_EVENT) + { + gint x_offset, y_offset, width, height; + gboolean try_event = FALSE; + + if (event) + { + if (real_cell_area.x <= ((GdkEventButton *)event)->x && + real_cell_area.x + real_cell_area.width > ((GdkEventButton *)event)->x) + try_event = TRUE; + } + else /* if (info->has_focus)*/ + /* FIXME 73676: allow focusing individual cells */ + { + try_event = TRUE; + } + if (try_event) + { + gboolean visible, mode; + + g_object_get (G_OBJECT (info->cell), + "visible", &visible, + "mode", &mode, + NULL); + if (visible && mode == GTK_CELL_RENDERER_MODE_ACTIVATABLE) + { + if (gtk_cell_renderer_activate (info->cell, + event, + tree_column->tree_view, + path_string, + background_area, + cell_area, + flags)) + return TRUE; + } + else if (visible && mode == GTK_CELL_RENDERER_MODE_EDITABLE) + { + *editable_widget = + gtk_cell_renderer_start_editing (info->cell, + event, + tree_column->tree_view, + path_string, + background_area, + cell_area, + flags); + + if (*editable_widget != NULL) + { + g_return_val_if_fail (GTK_IS_CELL_EDITABLE (*editable_widget), FALSE); + + return TRUE; + } + } + } + } real_cell_area.x += (info->requested_width + tree_column->spacing); } for (list = g_list_last (tree_column->cell_list); list; list = list->prev) @@ -2360,16 +2425,39 @@ gtk_tree_view_column_cell_render_or_focus (GtkTreeViewColumn *tree_column, real_cell_area.width = info->requested_width + (info->expand?extra_space:0); - gtk_cell_renderer_render (info->cell, - window, - tree_column->tree_view, - background_area, - &real_cell_area, - expose_area, - flags); + if (action == CELL_ACTION_RENDER) + { + gtk_cell_renderer_render (info->cell, + window, + tree_column->tree_view, + background_area, + &real_cell_area, + expose_area, + flags); + } + else if (action == CELL_ACTION_FOCUS) + { + gint x_offset, y_offset, width, height; + + gtk_cell_renderer_get_size (info->cell, + tree_column->tree_view, + &real_cell_area, + &x_offset, &y_offset, + &width, &height); + + if (min_x > (real_cell_area.x + x_offset)) + min_x = real_cell_area.x + x_offset; + if (max_x < real_cell_area.x + x_offset + width) + max_x = real_cell_area.x + x_offset + width; + if (min_y > (real_cell_area.y + y_offset)) + min_y = real_cell_area.y + y_offset; + if (max_y < real_cell_area.y + y_offset + height) + max_y = real_cell_area.y + y_offset + height; + } real_cell_area.x += (info->requested_width + tree_column->spacing); } - if (! render) + + if (action == CELL_ACTION_FOCUS) { if (min_x >= max_x || min_y >= max_y) { @@ -2385,6 +2473,8 @@ gtk_tree_view_column_cell_render_or_focus (GtkTreeViewColumn *tree_column, focus_rectangle->height = (max_y - min_y) + 2 * focus_line_width; } } + + return FALSE; } /** @@ -2412,14 +2502,14 @@ _gtk_tree_view_column_cell_render (GtkTreeViewColumn *tree_column, g_return_if_fail (cell_area != NULL); g_return_if_fail (expose_area != NULL); - gtk_tree_view_column_cell_render_or_focus (tree_column, - window, - background_area, - cell_area, - expose_area, - flags, - TRUE, - NULL); + gtk_tree_view_column_cell_process_action (tree_column, + window, + background_area, + cell_area, + flags, + CELL_ACTION_RENDER, + expose_area, + NULL, NULL, NULL, NULL); } gboolean @@ -2431,43 +2521,18 @@ _gtk_tree_view_column_cell_event (GtkTreeViewColumn *tree_column, GdkRectangle *cell_area, guint flags) { - gboolean visible, mode; - g_return_val_if_fail (GTK_IS_TREE_VIEW_COLUMN (tree_column), FALSE); - g_object_get (G_OBJECT (((GtkTreeViewColumnCellInfo *) tree_column->cell_list->data)->cell), - "visible", &visible, - "mode", &mode, - NULL); - if (visible && mode == GTK_CELL_RENDERER_MODE_ACTIVATABLE) - { - if (gtk_cell_renderer_activate (((GtkTreeViewColumnCellInfo *) tree_column->cell_list->data)->cell, - event, - tree_column->tree_view, - path_string, - background_area, - cell_area, - flags)) - return TRUE; - } - else if (visible && mode == GTK_CELL_RENDERER_MODE_EDITABLE) - { - *editable_widget = gtk_cell_renderer_start_editing (((GtkTreeViewColumnCellInfo *) tree_column->cell_list->data)->cell, - event, - tree_column->tree_view, - path_string, - background_area, - cell_area, - flags); - - if (*editable_widget != NULL) - { - g_return_val_if_fail (GTK_IS_CELL_EDITABLE (*editable_widget), FALSE); - - return TRUE; - } - } - return FALSE; + return gtk_tree_view_column_cell_process_action (tree_column, + NULL, + background_area, + cell_area, + flags, + CELL_ACTION_EVENT, + NULL, NULL, + editable_widget, + event, + path_string); } @@ -2475,6 +2540,7 @@ gboolean _gtk_tree_view_column_cell_focus (GtkTreeViewColumn *tree_column, gint direction) { + /* FIXME 73676: allow focusing individual cells */ if (GTK_TREE_VIEW (tree_column->tree_view)->priv->focus_column == tree_column) return FALSE; return TRUE; @@ -2514,14 +2580,15 @@ _gtk_tree_view_column_cell_draw_focus (GtkTreeViewColumn *tree_column, else { GdkRectangle focus_rectangle; - gtk_tree_view_column_cell_render_or_focus (tree_column, - window, - background_area, - cell_area, - expose_area, - flags, - FALSE, - &focus_rectangle); + gtk_tree_view_column_cell_process_action (tree_column, + window, + background_area, + cell_area, + flags, + CELL_ACTION_FOCUS, + expose_area, + &focus_rectangle, + NULL, NULL, NULL); cell_state = flags & GTK_CELL_RENDERER_SELECTED ? GTK_STATE_SELECTED : (flags & GTK_CELL_RENDERER_PRELIT ? GTK_STATE_PRELIGHT : |