GitLab repository storage has been migrated to hashed layout. Please contact Infrastructure team if you notice any issues with repositories or hooks.

Commit 4deb783e authored by Kristian Rietveld's avatar Kristian Rietveld Committed by Kristian Rietveld

add keynav handling for unselect all, focus column header, change focus

Thu Feb 21 23:02:29 2002  Kristian Rietveld  <kris@gtk.org>

        * gtk/gtktreeview.[ch]: add keynav handling for unselect all,
        focus column header, change focus with arrow keys in column headers,
        column reordering, column resizing, small try to fix page up/down
        (this fixes #70889, and fixes a great deal of #53580)
parent e5e5a521
Thu Feb 21 23:02:29 2002 Kristian Rietveld <kris@gtk.org>
* gtk/gtktreeview.[ch]: add keynav handling for unselect all,
focus column header, change focus with arrow keys in column headers,
column reordering, column resizing, small try to fix page up/down
(this fixes #70889, and fixes a great deal of #53580)
Thu Feb 21 16:51:17 2002 Owen Taylor <otaylor@redhat.com>
* gtk/gtkaccelgroup.c (gtk_accelerator_valid): Add
......
Thu Feb 21 23:02:29 2002 Kristian Rietveld <kris@gtk.org>
* gtk/gtktreeview.[ch]: add keynav handling for unselect all,
focus column header, change focus with arrow keys in column headers,
column reordering, column resizing, small try to fix page up/down
(this fixes #70889, and fixes a great deal of #53580)
Thu Feb 21 16:51:17 2002 Owen Taylor <otaylor@redhat.com>
* gtk/gtkaccelgroup.c (gtk_accelerator_valid): Add
......
Thu Feb 21 23:02:29 2002 Kristian Rietveld <kris@gtk.org>
* gtk/gtktreeview.[ch]: add keynav handling for unselect all,
focus column header, change focus with arrow keys in column headers,
column reordering, column resizing, small try to fix page up/down
(this fixes #70889, and fixes a great deal of #53580)
Thu Feb 21 16:51:17 2002 Owen Taylor <otaylor@redhat.com>
* gtk/gtkaccelgroup.c (gtk_accelerator_valid): Add
......
Thu Feb 21 23:02:29 2002 Kristian Rietveld <kris@gtk.org>
* gtk/gtktreeview.[ch]: add keynav handling for unselect all,
focus column header, change focus with arrow keys in column headers,
column reordering, column resizing, small try to fix page up/down
(this fixes #70889, and fixes a great deal of #53580)
Thu Feb 21 16:51:17 2002 Owen Taylor <otaylor@redhat.com>
* gtk/gtkaccelgroup.c (gtk_accelerator_valid): Add
......
Thu Feb 21 23:02:29 2002 Kristian Rietveld <kris@gtk.org>
* gtk/gtktreeview.[ch]: add keynav handling for unselect all,
focus column header, change focus with arrow keys in column headers,
column reordering, column resizing, small try to fix page up/down
(this fixes #70889, and fixes a great deal of #53580)
Thu Feb 21 16:51:17 2002 Owen Taylor <otaylor@redhat.com>
* gtk/gtkaccelgroup.c (gtk_accelerator_valid): Add
......
Thu Feb 21 23:02:29 2002 Kristian Rietveld <kris@gtk.org>
* gtk/gtktreeview.[ch]: add keynav handling for unselect all,
focus column header, change focus with arrow keys in column headers,
column reordering, column resizing, small try to fix page up/down
(this fixes #70889, and fixes a great deal of #53580)
Thu Feb 21 16:51:17 2002 Owen Taylor <otaylor@redhat.com>
* gtk/gtkaccelgroup.c (gtk_accelerator_valid): Add
......
Thu Feb 21 23:02:29 2002 Kristian Rietveld <kris@gtk.org>
* gtk/gtktreeview.[ch]: add keynav handling for unselect all,
focus column header, change focus with arrow keys in column headers,
column reordering, column resizing, small try to fix page up/down
(this fixes #70889, and fixes a great deal of #53580)
Thu Feb 21 16:51:17 2002 Owen Taylor <otaylor@redhat.com>
* gtk/gtkaccelgroup.c (gtk_accelerator_valid): Add
......
......@@ -100,11 +100,13 @@ enum
CURSOR_CHANGED,
MOVE_CURSOR,
SELECT_ALL,
UNSELECT_ALL,
SELECT_CURSOR_ROW,
TOGGLE_CURSOR_ROW,
EXPAND_COLLAPSE_CURSOR_ROW,
SELECT_CURSOR_PARENT,
START_INTERACTIVE_SEARCH,
FOCUS_COLUMN_HEADER,
LAST_SIGNAL
};
......@@ -220,10 +222,11 @@ static void gtk_tree_view_drag_data_received (GtkWidget *widget,
static void gtk_tree_view_set_adjustments (GtkTreeView *tree_view,
GtkAdjustment *hadj,
GtkAdjustment *vadj);
static void gtk_tree_view_real_move_cursor (GtkTreeView *tree_view,
static gboolean gtk_tree_view_real_move_cursor (GtkTreeView *tree_view,
GtkMovementStep step,
gint count);
static void gtk_tree_view_real_select_all (GtkTreeView *tree_view);
static void gtk_tree_view_real_unselect_all (GtkTreeView *tree_view);
static void gtk_tree_view_real_select_cursor_row (GtkTreeView *tree_view,
gboolean start_editing);
static void gtk_tree_view_real_toggle_cursor_row (GtkTreeView *tree_view);
......@@ -393,6 +396,10 @@ static void gtk_tree_view_real_start_editing (GtkTreeView *tree_view,
static void gtk_tree_view_stop_editing (GtkTreeView *tree_view,
gboolean cancel_editing);
static void gtk_tree_view_real_start_interactive_search (GtkTreeView *tree_view);
static void gtk_tree_view_real_focus_column_header (GtkTreeView *tree_view);
static GtkTreeViewColumn *gtk_tree_view_get_drop_column (GtkTreeView *tree_view,
GtkTreeViewColumn *column,
gint drop_position);
static GtkContainerClass *parent_class = NULL;
......@@ -488,11 +495,13 @@ gtk_tree_view_class_init (GtkTreeViewClass *class)
class->set_scroll_adjustments = gtk_tree_view_set_adjustments;
class->move_cursor = gtk_tree_view_real_move_cursor;
class->select_all = gtk_tree_view_real_select_all;
class->unselect_all = gtk_tree_view_real_unselect_all;
class->select_cursor_row = gtk_tree_view_real_select_cursor_row;
class->toggle_cursor_row = gtk_tree_view_real_toggle_cursor_row;
class->expand_collapse_cursor_row = gtk_tree_view_real_expand_collapse_cursor_row;
class->select_cursor_parent = gtk_tree_view_real_select_cursor_parent;
class->start_interactive_search = gtk_tree_view_real_start_interactive_search;
class->focus_column_header = gtk_tree_view_real_focus_column_header;
/* Properties */
......@@ -723,6 +732,15 @@ gtk_tree_view_class_init (GtkTreeViewClass *class)
_gtk_marshal_NONE__NONE,
GTK_TYPE_NONE, 0);
tree_view_signals[UNSELECT_ALL] =
g_signal_new ("unselect_all",
G_TYPE_FROM_CLASS (object_class),
G_SIGNAL_RUN_LAST | GTK_RUN_ACTION,
G_STRUCT_OFFSET (GtkTreeViewClass, unselect_all),
NULL, NULL,
_gtk_marshal_NONE__NONE,
GTK_TYPE_NONE, 0);
tree_view_signals[SELECT_CURSOR_ROW] =
g_signal_new ("select_cursor_row",
G_TYPE_FROM_CLASS (object_class),
......@@ -769,6 +787,15 @@ gtk_tree_view_class_init (GtkTreeViewClass *class)
_gtk_marshal_NONE__NONE,
GTK_TYPE_NONE, 0);
tree_view_signals[FOCUS_COLUMN_HEADER] =
g_signal_new ("focus_column_header",
G_TYPE_FROM_CLASS (object_class),
G_SIGNAL_RUN_LAST | GTK_RUN_ACTION,
G_STRUCT_OFFSET (GtkTreeViewClass, focus_column_header),
NULL, NULL,
_gtk_marshal_NONE__NONE,
GTK_TYPE_NONE, 0);
/* Key bindings */
gtk_tree_view_add_move_binding (binding_set, GDK_Up, 0,
GTK_MOVEMENT_DISPLAY_LINES, -1);
......@@ -821,6 +848,10 @@ gtk_tree_view_class_init (GtkTreeViewClass *class)
gtk_binding_entry_add_signal (binding_set, GDK_space, GDK_CONTROL_MASK, "toggle_cursor_row", 0);
gtk_binding_entry_add_signal (binding_set, GDK_a, GDK_CONTROL_MASK, "select_all", 0);
gtk_binding_entry_add_signal (binding_set, GDK_slash, GDK_CONTROL_MASK, "select_all", 0);
gtk_binding_entry_add_signal (binding_set, GDK_A, GDK_CONTROL_MASK | GDK_SHIFT_MASK, "unselect_all", 0);
gtk_binding_entry_add_signal (binding_set, GDK_backslash, GDK_CONTROL_MASK, "unselect_all", 0);
gtk_binding_entry_add_signal (binding_set, GDK_space, GDK_SHIFT_MASK, "select_cursor_row", 1,
GTK_TYPE_BOOL, TRUE);
......@@ -881,6 +912,10 @@ gtk_tree_view_class_init (GtkTreeViewClass *class)
gtk_binding_entry_add_signal (binding_set, GDK_f, GDK_CONTROL_MASK, "start_interactive_search", 0);
gtk_binding_entry_add_signal (binding_set, GDK_F, GDK_CONTROL_MASK, "start_interactive_search", 0);
gtk_binding_entry_add_signal (binding_set, GDK_Tab, GDK_SHIFT_MASK, "focus_column_header", 0);
gtk_binding_entry_add_signal (binding_set, GDK_KP_Tab, GDK_SHIFT_MASK, "focus_column_header", 0);
gtk_binding_entry_add_signal (binding_set, GDK_ISO_Left_Tab, GDK_SHIFT_MASK, "focus_column_header", 0);
}
static void
......@@ -3048,11 +3083,222 @@ gtk_tree_view_expose (GtkWidget *widget,
return TRUE;
}
enum
{
DROP_HOME,
DROP_RIGHT,
DROP_LEFT,
DROP_END
};
/* returns 0x1 when no column has been found -- yes it's hackish */
static GtkTreeViewColumn *
gtk_tree_view_get_drop_column (GtkTreeView *tree_view,
GtkTreeViewColumn *column,
gint drop_position)
{
GtkTreeViewColumn *left_column = NULL;
GtkTreeViewColumn *cur_column = NULL;
GList *tmp_list;
if (!column->reorderable)
return (GtkTreeViewColumn *)0x1;
switch (drop_position)
{
case DROP_HOME:
/* find first column where we can drop */
tmp_list = tree_view->priv->columns;
if (column == GTK_TREE_VIEW_COLUMN (tmp_list->data))
return (GtkTreeViewColumn *)0x1;
while (tmp_list)
{
g_assert (tmp_list);
cur_column = GTK_TREE_VIEW_COLUMN (tmp_list->data);
tmp_list = tmp_list->next;
if (left_column && left_column->visible == FALSE)
continue;
if (!tree_view->priv->column_drop_func)
return left_column;
if (!(*tree_view->priv->column_drop_func) (tree_view, column, left_column, cur_column, tree_view->priv->column_drop_func_data))
{
left_column = cur_column;
continue;
}
return cur_column;
}
if (!tree_view->priv->column_drop_func)
return left_column;
if ((*tree_view->priv->column_drop_func) (tree_view, column, left_column, NULL, tree_view->priv->column_drop_func_data))
return left_column;
else
return (GtkTreeViewColumn *)0x1;
break;
case DROP_RIGHT:
/* find first column after column where we can drop */
tmp_list = tree_view->priv->columns;
for (; tmp_list; tmp_list = tmp_list->next)
if (GTK_TREE_VIEW_COLUMN (tmp_list->data) == column)
break;
if (!tmp_list || !tmp_list->next)
return (GtkTreeViewColumn *)0x1;
tmp_list = tmp_list->next;
left_column = GTK_TREE_VIEW_COLUMN (tmp_list->data);
tmp_list = tmp_list->next;
while (tmp_list)
{
g_assert (tmp_list);
cur_column = GTK_TREE_VIEW_COLUMN (tmp_list->data);
tmp_list = tmp_list->next;
if (left_column && left_column->visible == FALSE)
{
left_column = cur_column;
if (tmp_list)
tmp_list = tmp_list->next;
continue;
}
if (!tree_view->priv->column_drop_func)
return left_column;
if (!(*tree_view->priv->column_drop_func) (tree_view, column, left_column, cur_column, tree_view->priv->column_drop_func_data))
{
left_column = cur_column;
continue;
}
return cur_column;
}
if (!tree_view->priv->column_drop_func)
return left_column;
if ((*tree_view->priv->column_drop_func) (tree_view, column, left_column, NULL, tree_view->priv->column_drop_func_data))
return left_column;
else
return (GtkTreeViewColumn *)0x1;
break;
case DROP_LEFT:
/* find first column before column where we can drop */
tmp_list = tree_view->priv->columns;
for (; tmp_list; tmp_list = tmp_list->next)
if (GTK_TREE_VIEW_COLUMN (tmp_list->data) == column)
break;
if (!tmp_list || !tmp_list->prev)
return (GtkTreeViewColumn *)0x1;
tmp_list = tmp_list->prev;
cur_column = GTK_TREE_VIEW_COLUMN (tmp_list->data);
tmp_list = tmp_list->prev;
while (tmp_list)
{
g_assert (tmp_list);
left_column = GTK_TREE_VIEW_COLUMN (tmp_list->data);
if (left_column && !left_column->visible)
{
/*if (!tmp_list->prev)
return (GtkTreeViewColumn *)0x1;
*/
/*
cur_column = GTK_TREE_VIEW_COLUMN (tmp_list->prev->data);
tmp_list = tmp_list->prev->prev;
continue;*/
cur_column = left_column;
if (tmp_list)
tmp_list = tmp_list->prev;
continue;
}
if (!tree_view->priv->column_drop_func)
return left_column;
if ((*tree_view->priv->column_drop_func) (tree_view, column, left_column, cur_column, tree_view->priv->column_drop_func_data))
return left_column;
cur_column = left_column;
tmp_list = tmp_list->prev;
}
if (!tree_view->priv->column_drop_func)
return NULL;
if ((*tree_view->priv->column_drop_func) (tree_view, column, NULL, cur_column, tree_view->priv->column_drop_func_data))
return NULL;
else
return (GtkTreeViewColumn *)0x1;
break;
case DROP_END:
/* same as DROP_HOME case, but doing it backwards */
tmp_list = g_list_last (tree_view->priv->columns);
cur_column = NULL;
if (column == GTK_TREE_VIEW_COLUMN (tmp_list->data))
return (GtkTreeViewColumn *)0x1;
while (tmp_list)
{
g_assert (tmp_list);
left_column = GTK_TREE_VIEW_COLUMN (tmp_list->data);
if (left_column && !left_column->visible)
{
cur_column = left_column;
tmp_list = tmp_list->prev;
}
if (!tree_view->priv->column_drop_func)
return left_column;
if ((*tree_view->priv->column_drop_func) (tree_view, column, left_column, cur_column, tree_view->priv->column_drop_func_data))
return left_column;
cur_column = left_column;
tmp_list = tmp_list->prev;
}
if (!tree_view->priv->column_drop_func)
return NULL;
if ((*tree_view->priv->column_drop_func) (tree_view, column, NULL, cur_column, tree_view->priv->column_drop_func_data))
return NULL;
else
return (GtkTreeViewColumn *)0x1;
break;
}
return (GtkTreeViewColumn *)0x1;
}
static gboolean
gtk_tree_view_key_press (GtkWidget *widget,
GdkEventKey *event)
{
GtkTreeView *tree_view = (GtkTreeView *) widget;
GList *list;
if (GTK_TREE_VIEW_FLAG_SET (tree_view, GTK_TREE_VIEW_IN_COLUMN_DRAG))
{
......@@ -3064,6 +3310,146 @@ gtk_tree_view_key_press (GtkWidget *widget,
return TRUE;
}
/* FIXME: this is prolly broken when we go bidi */
if (tree_view->priv->columns && (event->state & GDK_SHIFT_MASK)
&& (event->keyval == GDK_Left || event->keyval == GDK_Right))
{
list = tree_view->priv->columns;
while (list)
{
GtkTreeViewColumn *column = GTK_TREE_VIEW_COLUMN (list->data);
if (GTK_WIDGET_HAS_FOCUS (column->button))
{
if (!column->resizable)
return TRUE;
if (event->keyval == GDK_Left)
{
column->resized_width = MAX (column->resized_width,
column->width);
column->resized_width -= 2;
if (column->resized_width < 0)
column->resized_width = 0;
column->resized_width = MAX (column->min_width,
column->resized_width);
column->use_resized_width = TRUE;
gtk_widget_queue_resize (widget);
return TRUE;
}
else if (event->keyval == GDK_Right)
{
column->resized_width = MAX (column->resized_width,
column->width);
column->resized_width += 2;
column->use_resized_width = TRUE;
gtk_widget_queue_resize (widget);
return TRUE;
}
}
list = list->next;
}
}
/* FIXME: broken when we go bidi? */
if (tree_view->priv->columns && (event->state & GDK_CONTROL_MASK) &&
(event->keyval == GDK_Left || event->keyval == GDK_Right
|| event->keyval == GDK_Home || event->keyval == GDK_End))
{
list = tree_view->priv->columns;
while (list)
{
GtkTreeViewColumn *column = GTK_TREE_VIEW_COLUMN (list->data);
if (GTK_WIDGET_HAS_FOCUS (column->button))
{
if (event->keyval == GDK_Left)
{
GtkTreeViewColumn *col;
col = gtk_tree_view_get_drop_column (tree_view, column, DROP_LEFT);
if (col != (GtkTreeViewColumn *)0x1)
gtk_tree_view_move_column_after (tree_view, column, col);
return TRUE;
}
else if (event->keyval == GDK_Right)
{
GtkTreeViewColumn *col;
col = gtk_tree_view_get_drop_column (tree_view, column, DROP_RIGHT);
if (col != (GtkTreeViewColumn *)0x1)
gtk_tree_view_move_column_after (tree_view, column, col);
return TRUE;
}
else if (event->keyval == GDK_Home)
{
GtkTreeViewColumn *col;
col = gtk_tree_view_get_drop_column (tree_view, column, DROP_HOME);
if (col != (GtkTreeViewColumn *)0x1)
gtk_tree_view_move_column_after (tree_view, column, col);
return TRUE;
}
else if (event->keyval == GDK_End)
{
GtkTreeViewColumn *col;
col = gtk_tree_view_get_drop_column (tree_view, column, DROP_END);
if (col != (GtkTreeViewColumn *)0x1)
gtk_tree_view_move_column_after (tree_view, column, col);
return TRUE;
}
}
list = list->next;
}
}
/* FIXME: this is prolly broken when we go bidi */
if (tree_view->priv->columns &&
(event->keyval == GDK_Left || event->keyval == GDK_Right))
{
gint width = 0;
list = tree_view->priv->columns;
while (list)
{
GtkTreeViewColumn *column = GTK_TREE_VIEW_COLUMN (list->data);
if (GTK_WIDGET_HAS_FOCUS (column->button))
{
if (event->keyval == GDK_Left && list->prev)
{
GList *tmp;
for (tmp = list->prev; tmp; tmp = tmp->prev)
if (GTK_TREE_VIEW_COLUMN (tmp->data)->visible)
break;
if (!tmp)
return FALSE;
tree_view->priv->focus_column = GTK_TREE_VIEW_COLUMN (tmp->data);
gtk_widget_grab_focus (tree_view->priv->focus_column->button);
width -= tree_view->priv->focus_column->width;
gtk_adjustment_set_value (tree_view->priv->hadjustment, CLAMP (width, tree_view->priv->hadjustment->lower, tree_view->priv->hadjustment->upper - tree_view->priv->hadjustment->page_size));
return TRUE;
}
else if (event->keyval == GDK_Right && list->next)
{
GList *tmp;
for (tmp = list->next; tmp; tmp = tmp->next)
if (GTK_TREE_VIEW_COLUMN (tmp->data)->visible)
break;
if (!tmp)
return FALSE;
tree_view->priv->focus_column = GTK_TREE_VIEW_COLUMN (tmp->data);
gtk_widget_grab_focus (tree_view->priv->focus_column->button);
width += tree_view->priv->focus_column->width;
gtk_adjustment_set_value (tree_view->priv->hadjustment, CLAMP (width, tree_view->priv->hadjustment->lower, tree_view->priv->hadjustment->upper - tree_view->priv->hadjustment->page_size));
return TRUE;
}
}
width += GTK_TREE_VIEW_COLUMN (list->data)->width;
list = list->next;
}
}
return (* GTK_WIDGET_CLASS (parent_class)->key_press_event) (widget, event);
}
......@@ -4862,20 +5248,23 @@ gtk_tree_view_set_adjustments (GtkTreeView *tree_view,
}
static void
static gboolean
gtk_tree_view_real_move_cursor (GtkTreeView *tree_view,
GtkMovementStep step,
gint count)
{
g_return_if_fail (GTK_IS_TREE_VIEW (tree_view));
g_return_if_fail (step == GTK_MOVEMENT_LOGICAL_POSITIONS ||
step == GTK_MOVEMENT_VISUAL_POSITIONS ||
step == GTK_MOVEMENT_DISPLAY_LINES ||
step == GTK_MOVEMENT_PAGES ||
step == GTK_MOVEMENT_BUFFER_ENDS);
g_return_val_if_fail (GTK_IS_TREE_VIEW (tree_view), FALSE);
g_return_val_if_fail (step == GTK_MOVEMENT_LOGICAL_POSITIONS ||
step == GTK_MOVEMENT_VISUAL_POSITIONS ||
step == GTK_MOVEMENT_DISPLAY_LINES ||
step == GTK_MOVEMENT_PAGES ||
step == GTK_MOVEMENT_BUFFER_ENDS, FALSE);
if (tree_view->priv->tree == NULL)
return;
return FALSE;
if (!GTK_WIDGET_HAS_FOCUS (GTK_WIDGET (tree_view)))
return FALSE;
gtk_tree_view_stop_editing (tree_view, FALSE);
GTK_TREE_VIEW_SET_FLAG (tree_view, GTK_TREE_VIEW_DRAW_KEYFOCUS);
gtk_widget_grab_focus (GTK_WIDGET (tree_view));
......@@ -4899,6 +5288,8 @@ gtk_tree_view_real_move_cursor (GtkTreeView *tree_view,
default:
g_assert_not_reached ();
}
return TRUE;
}
static void
......@@ -6313,12 +6704,20 @@ gtk_tree_view_move_cursor_page_up_down (GtkTreeView *tree_view,
y = _gtk_rbtree_node_find_offset (cursor_tree, cursor_node);
y += count * tree_view->priv->vadjustment->page_size;
if (count > 0)
y -= MAX (GTK_RBNODE_GET_HEIGHT (cursor_node),
tree_view->priv->expander_size);
else if (count < 0)
y += MAX (GTK_RBNODE_GET_HEIGHT (cursor_node),
tree_view->priv->expander_size);
y = CLAMP (y, (gint)tree_view->priv->vadjustment->lower, (gint)tree_view->priv->vadjustment->upper - vertical_separator);
_gtk_rbtree_find_offset (tree_view->priv->tree, y, &cursor_tree, &cursor_node);
cursor_path = _gtk_tree_view_find_path (tree_view, cursor_tree, cursor_node);
g_return_if_fail (cursor_path != NULL);
gtk_tree_view_real_set_cursor (tree_view, cursor_path, TRUE);
gtk_tree_view_scroll_to_point (tree_view, -1, y);
gtk_tree_view_clamp_node_visible (tree_view, cursor_tree, cursor_node);
gtk_tree_path_free (cursor_path);
}
......@@ -6429,15 +6828,8 @@ gtk_tree_view_move_cursor_start_end (GtkTreeView *tree_view,
}
path = _gtk_tree_view_find_path (tree_view, cursor_tree, cursor_node);
_gtk_tree_selection_internal_select_node (tree_view->priv->selection,
cursor_node,
cursor_tree,
path,
FALSE?GDK_SHIFT_MASK:0);
gtk_tree_row_reference_free (tree_view->priv->cursor);
tree_view->priv->cursor = gtk_tree_row_reference_new_proxy (G_OBJECT (tree_view), tree_view->priv->model, path);
gtk_tree_view_clamp_node_visible (tree_view, cursor_tree, cursor_node);
gtk_tree_view_real_set_cursor (tree_view, path, TRUE);
gtk_tree_path_free (path);
}
static void
......@@ -6448,6 +6840,14 @@ gtk_tree_view_real_select_all (GtkTreeView *tree_view)
gtk_tree_selection_select_all (tree_view->priv->selection);
}
static void
gtk_tree_view_real_unselect_all (GtkTreeView *tree_view)
{
if (tree_view->priv->selection->type != GTK_SELECTION_MULTIPLE)
return;
gtk_tree_selection_unselect_all (tree_view->priv->selection);
}
static void
gtk_tree_view_real_select_cursor_row (GtkTreeView *tree_view,
gboolean start_editing)
......@@ -6676,6 +7076,15 @@ gtk_tree_view_real_start_interactive_search (GtkTreeView *tree_view)
gtk_tree_view_search_init (entry, tree_view);
}
static void
gtk_tree_view_real_focus_column_header (GtkTreeView *tree_view)
{
if (!tree_view->priv->focus_column)
return;
gtk_widget_grab_focus (tree_view->priv->focus_column->button);
}
/* this function returns the new width of the column being resized given
* the column and x position of the cursor; the x cursor position is passed
* in as a pointer and automagicly corrected if it's beyond min/max limits
......
......@@ -87,10 +87,11 @@ struct _GtkTreeViewClass
void (* cursor_changed) (GtkTreeView *tree_view);
/* Key Binding signals */
void (* move_cursor) (GtkTreeView *tree_view,
gboolean (* move_cursor) (GtkTreeView *tree_view,
GtkMovementStep step,
gint count);
void (* select_all) (GtkTreeView *tree_view);
void (* unselect_all) (GtkTreeView *tree_view);
void (* select_cursor_row) (GtkTreeView *tree_view,
gboolean start_editing);
void (* toggle_cursor_row) (GtkTreeView *tree_view);
......@@ -99,7 +100,8 @@ struct _GtkTreeViewClass
gboolean expand,
gboolean open_all);
void (* select_cursor_parent) (GtkTreeView *tree_view);
void (* start_interactive_search) (GtkTreeView *tree_view);