add cursor_offset field.
2007-02-16 Kristian Rietveld <kris@gtk.org> * gtk/gtktreeprivate.h: add cursor_offset field. * gtk/gtktreeview.c (gtk_tree_view_init), (gtk_tree_view_move_cursor_page_up_down): fix off by one error in page up/down handling by memorizing the offset into the cursor row. (Fixes #399809, reported by Bruce Bowler). svn path=/trunk/; revision=17316
This commit is contained in:
committed by
Kristian Rietveld
parent
41aff18d7f
commit
c24c88fe30
@ -1,3 +1,12 @@
|
|||||||
|
2007-02-16 Kristian Rietveld <kris@gtk.org>
|
||||||
|
|
||||||
|
* gtk/gtktreeprivate.h: add cursor_offset field.
|
||||||
|
|
||||||
|
* gtk/gtktreeview.c (gtk_tree_view_init),
|
||||||
|
(gtk_tree_view_move_cursor_page_up_down): fix off by one error
|
||||||
|
in page up/down handling by memorizing the offset into the cursor
|
||||||
|
row. (Fixes #399809, reported by Bruce Bowler).
|
||||||
|
|
||||||
2007-02-16 Kristian Rietveld <kris@gtk.org>
|
2007-02-16 Kristian Rietveld <kris@gtk.org>
|
||||||
|
|
||||||
* gtk/gtktreeview.c (gtk_tree_view_search_dialog_hide): send
|
* gtk/gtktreeview.c (gtk_tree_view_search_dialog_hide): send
|
||||||
|
|||||||
@ -121,6 +121,7 @@ struct _GtkTreeViewPrivate
|
|||||||
/* we cache it for simplicity of the code */
|
/* we cache it for simplicity of the code */
|
||||||
gint dy;
|
gint dy;
|
||||||
gint drag_column_x;
|
gint drag_column_x;
|
||||||
|
gint cursor_offset;
|
||||||
|
|
||||||
GtkTreeViewColumn *expander_column;
|
GtkTreeViewColumn *expander_column;
|
||||||
GtkTreeViewColumn *edited_column;
|
GtkTreeViewColumn *edited_column;
|
||||||
|
|||||||
@ -1284,6 +1284,7 @@ gtk_tree_view_init (GtkTreeView *tree_view)
|
|||||||
|
|
||||||
/* We need some padding */
|
/* We need some padding */
|
||||||
tree_view->priv->dy = 0;
|
tree_view->priv->dy = 0;
|
||||||
|
tree_view->priv->cursor_offset = 0;
|
||||||
tree_view->priv->n_columns = 0;
|
tree_view->priv->n_columns = 0;
|
||||||
tree_view->priv->header_height = 1;
|
tree_view->priv->header_height = 1;
|
||||||
tree_view->priv->x_drag = 0;
|
tree_view->priv->x_drag = 0;
|
||||||
@ -9625,13 +9626,25 @@ gtk_tree_view_move_cursor_page_up_down (GtkTreeView *tree_view,
|
|||||||
|
|
||||||
y = _gtk_rbtree_node_find_offset (cursor_tree, cursor_node);
|
y = _gtk_rbtree_node_find_offset (cursor_tree, cursor_node);
|
||||||
window_y = RBTREE_Y_TO_TREE_WINDOW_Y (tree_view, y);
|
window_y = RBTREE_Y_TO_TREE_WINDOW_Y (tree_view, y);
|
||||||
|
y += tree_view->priv->cursor_offset;
|
||||||
y += count * (int)tree_view->priv->vadjustment->page_increment;
|
y += count * (int)tree_view->priv->vadjustment->page_increment;
|
||||||
y = CLAMP (y, (gint)tree_view->priv->vadjustment->lower, (gint)tree_view->priv->vadjustment->upper - vertical_separator);
|
y = CLAMP (y, (gint)tree_view->priv->vadjustment->lower, (gint)tree_view->priv->vadjustment->upper - vertical_separator);
|
||||||
|
|
||||||
if (y >= tree_view->priv->height)
|
if (y >= tree_view->priv->height)
|
||||||
y = tree_view->priv->height - 1;
|
y = tree_view->priv->height - 1;
|
||||||
|
|
||||||
y -= _gtk_rbtree_find_offset (tree_view->priv->tree, y, &cursor_tree, &cursor_node);
|
tree_view->priv->cursor_offset =
|
||||||
|
_gtk_rbtree_find_offset (tree_view->priv->tree, y,
|
||||||
|
&cursor_tree, &cursor_node);
|
||||||
|
|
||||||
|
if (tree_view->priv->cursor_offset >= BACKGROUND_HEIGHT (cursor_node))
|
||||||
|
{
|
||||||
|
_gtk_rbtree_next_full (cursor_tree, cursor_node,
|
||||||
|
&cursor_tree, &cursor_node);
|
||||||
|
tree_view->priv->cursor_offset -= BACKGROUND_HEIGHT (cursor_node);
|
||||||
|
}
|
||||||
|
|
||||||
|
y -= tree_view->priv->cursor_offset;
|
||||||
cursor_path = _gtk_tree_view_find_path (tree_view, cursor_tree, cursor_node);
|
cursor_path = _gtk_tree_view_find_path (tree_view, cursor_tree, cursor_node);
|
||||||
g_return_if_fail (cursor_path != NULL);
|
g_return_if_fail (cursor_path != NULL);
|
||||||
gtk_tree_view_real_set_cursor (tree_view, cursor_path, TRUE, FALSE);
|
gtk_tree_view_real_set_cursor (tree_view, cursor_path, TRUE, FALSE);
|
||||||
|
|||||||
Reference in New Issue
Block a user