1
0
mirror of https://gitlab.gnome.org/GNOME/evince synced 2024-07-05 00:59:07 +00:00

libview: Keep the offset inside a line when moving the caret between lines.

https://bugzilla.gnome.org/show_bug.cgi?id=702075
This commit is contained in:
Antia Puentes 2013-06-26 17:40:10 +02:00 committed by Carlos Garcia Campos
parent 040a42db65
commit 255b977888
2 changed files with 19 additions and 1 deletions

View File

@ -215,6 +215,7 @@ struct _EvView {
gboolean caret_enabled;
gint cursor_offset;
gint cursor_page;
gdouble cursor_line_offset;
gboolean cursor_visible;
guint cursor_blink_timeout_id;
guint cursor_blink_time;

View File

@ -4175,6 +4175,11 @@ ev_view_button_press_event (GtkWidget *widget,
start_selection_for_event (view, event);
if (position_caret_cursor_at_location (view, event->x, event->y)) {
GdkRectangle area;
if (get_caret_cursor_area (view, view->cursor_page, view->cursor_offset, &area))
view->cursor_line_offset = area.x;
view->cursor_blink_time = 0;
ev_view_pend_cursor_blink (view);
@ -4626,7 +4631,12 @@ ev_view_button_release_event (GtkWidget *widget,
clear_link_selected (view);
ev_view_update_primary_selection (view);
position_caret_cursor_at_location (view, event->x, event->y);
if (position_caret_cursor_at_location (view, event->x, event->y)) {
GdkRectangle area;
if (get_caret_cursor_area (view, view->cursor_page, view->cursor_offset, &area))
view->cursor_line_offset = area.x;
}
if (view->selection_info.in_drag) {
clear_selection (view);
@ -5070,6 +5080,13 @@ ev_view_move_cursor (EvView *view,
if (!get_caret_cursor_area (view, view->cursor_page, view->cursor_offset, &rect))
return TRUE;
if (step == GTK_MOVEMENT_DISPLAY_LINES) {
position_caret_cursor_at_location (view, view->cursor_line_offset,
rect.y + (rect.height / 2));
} else {
view->cursor_line_offset = rect.x;
}
rect.x += view->scroll_x;
rect.y += view->scroll_y;