From 8fdc90f6d511cd854fdfdf4c5d7066a2bbe00c94 Mon Sep 17 00:00:00 2001 From: Carlos Garcia Campos Date: Sat, 26 Jan 2008 15:59:00 +0000 Subject: Stop autoscroll when Escape key is pressed. Fixes bug #511635. 2008-01-26 Carlos Garcia Campos * shell/ev-view.[ch]: (ev_view_button_release_event), (ev_view_autoscroll_start), (ev_view_autoscroll_stop): * shell/ev-window.c: (ev_window_cmd_view_autoscroll), (ev_window_cmd_escape): Stop autoscroll when Escape key is pressed. Fixes bug #511635. svn path=/trunk/; revision=2860 --- (limited to 'shell') diff --git a/shell/ev-view.c b/shell/ev-view.c index 2863506..fa9fbd8 100644 --- a/shell/ev-view.c +++ b/shell/ev-view.c @@ -3135,12 +3135,7 @@ ev_view_button_release_event (GtkWidget *widget, view->image_dnd_info.in_drag = FALSE; if (view->scroll_info.autoscrolling) { - view->scroll_info.autoscrolling = FALSE; - if (view->scroll_info.timeout_id) { - g_source_remove (view->scroll_info.timeout_id); - view->scroll_info.timeout_id = 0; - } - ev_view_handle_cursor_over_xy (view, event->x, event->y); + ev_view_autoscroll_stop (view); view->pressed_button = -1; return TRUE; @@ -4467,10 +4462,42 @@ ev_view_autoscroll_cb (EvView *view) } void -ev_view_autoscroll (EvView *view) +ev_view_autoscroll_start (EvView *view) { + gint x, y; + + g_return_if_fail (EV_IS_VIEW (view)); + + if (view->scroll_info.autoscrolling) + return; + view->scroll_info.autoscrolling = TRUE; - view->scroll_info.timeout_id = g_timeout_add (20, (GSourceFunc)(ev_view_autoscroll_cb), view); + view->scroll_info.timeout_id = + g_timeout_add (20, (GSourceFunc)ev_view_autoscroll_cb, + view); + + gtk_widget_get_pointer (GTK_WIDGET (view), &x, &y); + ev_view_handle_cursor_over_xy (view, x, y); +} + +void +ev_view_autoscroll_stop (EvView *view) +{ + gint x, y; + + g_return_if_fail (EV_IS_VIEW (view)); + + if (!view->scroll_info.autoscrolling) + return; + + view->scroll_info.autoscrolling = FALSE; + if (view->scroll_info.timeout_id) { + g_source_remove (view->scroll_info.timeout_id); + view->scroll_info.timeout_id = 0; + } + + gtk_widget_get_pointer (GTK_WIDGET (view), &x, &y); + ev_view_handle_cursor_over_xy (view, x, y); } void diff --git a/shell/ev-view.h b/shell/ev-view.h index 784f797..d6dd40e 100644 --- a/shell/ev-view.h +++ b/shell/ev-view.h @@ -144,7 +144,8 @@ gchar* ev_view_page_label_from_dest (EvView *view, EvLinkDest *dest); void ev_view_update_view_size (EvView *view, GtkScrolledWindow *scrolled_window); -void ev_view_autoscroll (EvView *view); +void ev_view_autoscroll_start (EvView *view); +void ev_view_autoscroll_stop (EvView *view); G_END_DECLS diff --git a/shell/ev-window.c b/shell/ev-window.c index 0ec0533..f15e06f 100644 --- a/shell/ev-window.c +++ b/shell/ev-window.c @@ -3302,7 +3302,7 @@ ev_window_cmd_view_reload (GtkAction *action, EvWindow *ev_window) static void ev_window_cmd_view_autoscroll (GtkAction *action, EvWindow *ev_window) { - ev_view_autoscroll (EV_VIEW (ev_window->priv->view)); + ev_view_autoscroll_start (EV_VIEW (ev_window->priv->view)); } static void @@ -3505,6 +3505,8 @@ ev_window_cmd_escape (GtkAction *action, EvWindow *window) { GtkWidget *widget; + ev_view_autoscroll_stop (window->priv->view); + widget = gtk_window_get_focus (GTK_WINDOW (window)); if (widget && gtk_widget_get_ancestor (widget, EGG_TYPE_FIND_BAR)) { update_chrome_flag (window, EV_CHROME_FINDBAR, FALSE); -- cgit v0.9.1