From 92603d06e3606238f25df947fed3666c5814440d Mon Sep 17 00:00:00 2001 From: Stanislav Slusny Date: Mon, 20 Feb 2006 23:49:38 +0000 Subject: Fix for the bug 319133 - Find entry should allow text scroll. 2006-02-21 Stanislav Slusny * shell/eggfindbar.c: (egg_find_bar_class_init): * shell/eggfindbar.h: * shell/ev-view-accessible.c: (ev_view_accessible_idle_do_action): * shell/ev-view-private.h: * shell/ev-view.c: (add_scroll_binding_keypad), (ev_view_scroll), (ev_view_class_init), (ev_sizing_mode_get_type), (ev_scroll_type_get_type): * shell/ev-view.h: * shell/ev-window.c: (ev_window_cmd_scroll_forward), (ev_window_cmd_scroll_backward), (find_bar_scroll), (ev_window_init): Fix for the bug 319133 - Find entry should allow text scroll. --- (limited to 'shell') diff --git a/shell/eggfindbar.c b/shell/eggfindbar.c index 3a42ef6..eb1f9a4 100644 --- a/shell/eggfindbar.c +++ b/shell/eggfindbar.c @@ -80,6 +80,7 @@ enum NEXT, PREVIOUS, CLOSE, + SCROLL, LAST_SIGNAL }; @@ -134,6 +135,15 @@ egg_find_bar_class_init (EggFindBarClass *klass) NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); + find_bar_signals[SCROLL] = + g_signal_new ("scroll", + G_OBJECT_CLASS_TYPE (object_class), + G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION, + G_STRUCT_OFFSET (EggFindBarClass, scroll), + NULL, NULL, + g_cclosure_marshal_VOID__ENUM, + G_TYPE_NONE, 1, + GTK_TYPE_SCROLL_TYPE); /** * EggFindBar:search_string: @@ -185,6 +195,14 @@ egg_find_bar_class_init (EggFindBarClass *klass) gtk_binding_entry_add_signal (binding_set, GDK_Escape, 0, "close", 0); + + gtk_binding_entry_add_signal (binding_set, GDK_Up, 0, + "scroll", 1, + GTK_TYPE_SCROLL_TYPE, GTK_SCROLL_STEP_BACKWARD); + + gtk_binding_entry_add_signal (binding_set, GDK_Down, 0, + "scroll", 1, + GTK_TYPE_SCROLL_TYPE, GTK_SCROLL_STEP_FORWARD); } static void diff --git a/shell/eggfindbar.h b/shell/eggfindbar.h index 49e2b9d..402a08e 100644 --- a/shell/eggfindbar.h +++ b/shell/eggfindbar.h @@ -49,6 +49,7 @@ struct _EggFindBarClass void (* next) (EggFindBar *find_bar); void (* previous) (EggFindBar *find_bar); void (* close) (EggFindBar *find_bar); + void (* scroll) (EggFindBar *find_bar, GtkScrollType* scroll); /* Padding for future expansion */ void (*_gtk_reserved1) (void); diff --git a/shell/ev-view-accessible.c b/shell/ev-view-accessible.c index e53ba35..3d64bfc 100644 --- a/shell/ev-view-accessible.c +++ b/shell/ev-view-accessible.c @@ -371,7 +371,8 @@ ev_view_accessible_idle_do_action (gpointer data) EvViewAccessiblePriv* priv = ev_view_accessible_get_priv (ATK_OBJECT (data)); ev_view_scroll (EV_VIEW (GTK_ACCESSIBLE (data)->widget), - priv->idle_scroll); + priv->idle_scroll, + FALSE); priv->action_idle_handler = 0; return FALSE; } diff --git a/shell/ev-view-private.h b/shell/ev-view-private.h index 8ea6660..b5831e4 100644 --- a/shell/ev-view-private.h +++ b/shell/ev-view-private.h @@ -124,7 +124,7 @@ struct _EvViewClass { GtkAdjustment *hadjustment, GtkAdjustment *vadjustment); void (*binding_activated) (EvView *view, - GtkScrollType scroll, + EvScrollType scroll, gboolean horizontal); void (*zoom_invalid) (EvView *view); void (*external_link) (EvView *view, diff --git a/shell/ev-view.c b/shell/ev-view.c index 11e6479..2e4752b 100644 --- a/shell/ev-view.c +++ b/shell/ev-view.c @@ -114,10 +114,7 @@ static void ev_view_set_scroll_adjustments (EvView static void add_scroll_binding_keypad (GtkBindingSet *binding_set, guint keyval, GdkModifierType modifiers, - GtkScrollType scroll, - gboolean horizontal); -static void ev_view_binding_activated (EvView *view, - GtkScrollType scroll, + EvScrollType scroll, gboolean horizontal); static void ensure_rectangle_is_visible (EvView *view, GdkRectangle *rect); @@ -547,32 +544,47 @@ static void add_scroll_binding_keypad (GtkBindingSet *binding_set, guint keyval, GdkModifierType modifiers, - GtkScrollType scroll, + EvScrollType scroll, gboolean horizontal) { guint keypad_keyval = keyval - GDK_Left + GDK_KP_Left; gtk_binding_entry_add_signal (binding_set, keyval, modifiers, "binding_activated", 2, - GTK_TYPE_SCROLL_TYPE, scroll, + EV_TYPE_SCROLL_TYPE, scroll, G_TYPE_BOOLEAN, horizontal); gtk_binding_entry_add_signal (binding_set, keypad_keyval, modifiers, "binding_activated", 2, - GTK_TYPE_SCROLL_TYPE, scroll, + EV_TYPE_SCROLL_TYPE, scroll, G_TYPE_BOOLEAN, horizontal); } void ev_view_scroll (EvView *view, - EvScrollType scroll) + EvScrollType scroll, + gboolean horizontal) { GtkAdjustment *adjustment; double value, increment; gboolean first_page = FALSE; gboolean last_page = FALSE; + if (view->presentation) { + switch (scroll) { + case EV_SCROLL_STEP_BACKWARD: + ev_view_previous_page (view); + break; + case EV_SCROLL_STEP_FORWARD: + ev_view_next_page (view); + break; + default: + break; + } + return; + } + /* Assign values for increment and vertical adjustment */ - adjustment = view->vadjustment; + adjustment = horizontal ? view->hadjustment : view->vadjustment; increment = adjustment->page_size * 0.75; value = adjustment->value; @@ -609,64 +621,27 @@ ev_view_scroll (EvView *view, value = MIN (value + increment, adjustment->upper - adjustment->page_size); } break; - default: - break; - } - - gtk_adjustment_set_value (adjustment, value); -} - -static void -ev_view_binding_activated (EvView *view, - GtkScrollType scroll, - gboolean horizontal) -{ - GtkAdjustment *adjustment; - double value; - - if (view->presentation) { - switch (scroll) { - case GTK_SCROLL_STEP_BACKWARD: - ev_view_previous_page (view); - break; - case GTK_SCROLL_STEP_FORWARD: - ev_view_next_page (view); - break; - default: - break; - } - return; - } - - if (horizontal) { - adjustment = view->hadjustment; - } else { - adjustment = view->vadjustment; - } - - value = adjustment->value; - - switch (scroll) { - case GTK_SCROLL_STEP_BACKWARD: + case EV_SCROLL_STEP_BACKWARD: value -= adjustment->step_increment; break; - case GTK_SCROLL_STEP_FORWARD: + case EV_SCROLL_STEP_FORWARD: value += adjustment->step_increment; break; - case GTK_SCROLL_STEP_DOWN: - value -= adjustment->step_increment/10; + case EV_SCROLL_STEP_DOWN: + value -= adjustment->step_increment / 10; break; - case GTK_SCROLL_STEP_UP: - value += adjustment->step_increment/10; + case EV_SCROLL_STEP_UP: + value += adjustment->step_increment / 10; break; - default: + default: break; } value = CLAMP (value, adjustment->lower, - adjustment->upper - adjustment->page_size); + adjustment->upper - adjustment->page_size); gtk_adjustment_set_value (adjustment, value); + } #define MARGIN 5 @@ -2432,7 +2407,7 @@ ev_view_class_init (EvViewClass *class) gtk_object_class->destroy = ev_view_destroy; class->set_scroll_adjustments = ev_view_set_scroll_adjustments; - class->binding_activated = ev_view_binding_activated; + class->binding_activated = ev_view_scroll; widget_class->set_scroll_adjustments_signal = g_signal_new ("set-scroll-adjustments", @@ -2562,14 +2537,14 @@ ev_view_class_init (EvViewClass *class) binding_set = gtk_binding_set_by_class (class); - add_scroll_binding_keypad (binding_set, GDK_Left, 0, GTK_SCROLL_STEP_BACKWARD, TRUE); - add_scroll_binding_keypad (binding_set, GDK_Right, 0, GTK_SCROLL_STEP_FORWARD, TRUE); - add_scroll_binding_keypad (binding_set, GDK_Left, GDK_MOD1_MASK, GTK_SCROLL_STEP_DOWN, TRUE); - add_scroll_binding_keypad (binding_set, GDK_Right, GDK_MOD1_MASK, GTK_SCROLL_STEP_UP, TRUE); - add_scroll_binding_keypad (binding_set, GDK_Up, 0, GTK_SCROLL_STEP_BACKWARD, FALSE); - add_scroll_binding_keypad (binding_set, GDK_Down, 0, GTK_SCROLL_STEP_FORWARD, FALSE); - add_scroll_binding_keypad (binding_set, GDK_Up, GDK_MOD1_MASK, GTK_SCROLL_STEP_DOWN, FALSE); - add_scroll_binding_keypad (binding_set, GDK_Down, GDK_MOD1_MASK, GTK_SCROLL_STEP_UP, FALSE); + add_scroll_binding_keypad (binding_set, GDK_Left, 0, EV_SCROLL_STEP_BACKWARD, TRUE); + add_scroll_binding_keypad (binding_set, GDK_Right, 0, EV_SCROLL_STEP_FORWARD, TRUE); + add_scroll_binding_keypad (binding_set, GDK_Left, GDK_MOD1_MASK, EV_SCROLL_STEP_DOWN, TRUE); + add_scroll_binding_keypad (binding_set, GDK_Right, GDK_MOD1_MASK, EV_SCROLL_STEP_UP, TRUE); + add_scroll_binding_keypad (binding_set, GDK_Up, 0, EV_SCROLL_STEP_BACKWARD, FALSE); + add_scroll_binding_keypad (binding_set, GDK_Down, 0, EV_SCROLL_STEP_FORWARD, FALSE); + add_scroll_binding_keypad (binding_set, GDK_Up, GDK_MOD1_MASK, EV_SCROLL_STEP_DOWN, FALSE); + add_scroll_binding_keypad (binding_set, GDK_Down, GDK_MOD1_MASK, EV_SCROLL_STEP_UP, FALSE); } static void @@ -4021,3 +3996,22 @@ ev_sizing_mode_get_type (void) } return etype; } + +GType +ev_scroll_type_get_type (void) +{ + static GType etype = 0; + if (etype == 0) { + static const GEnumValue values[] = { + { EV_SCROLL_PAGE_FORWARD, "EV_SCROLL_PAGE_FORWARD", "scroll-page-forward" }, + { EV_SCROLL_PAGE_BACKWARD, "EV_SCROLL_PAGE_BACKWARD", "scroll-page-backward" }, + { EV_SCROLL_STEP_FORWARD, "EV_SCROLL_STEP_FORWARD", "scroll-step-forward" }, + { EV_SCROLL_STEP_FORWARD, "EV_SCROLL_STEP_FORWARD", "scroll-step-forward" }, + { EV_SCROLL_STEP_UP, "EV_SCROLL_STEP_UP", "scroll-step-up" }, + { EV_SCROLL_STEP_DOWN, "EV_SCROLL_STEP_DOWN", "scroll-step-down" }, + { 0, NULL, NULL } + }; + etype = g_enum_register_static ("EvScrollType", values); + } + return etype; +} diff --git a/shell/ev-view.h b/shell/ev-view.h index 0c0a862..90f5031 100644 --- a/shell/ev-view.h +++ b/shell/ev-view.h @@ -35,6 +35,9 @@ G_BEGIN_DECLS #define EV_TYPE_SIZING_MODE (ev_sizing_mode_get_type()) #define EV_SIZING_MODE_CLASS (g_type_class_peek (EV_TYPE_SIZING_MODE)) +#define EV_TYPE_SCROLL_TYPE (ev_scroll_type_get_type()) +#define EV_SCROLL_TYPE_CLASS (g_type_class_peek (EV_TYPE_SCROLL_TYPE)) + typedef struct _EvView EvView; typedef struct _EvViewClass EvViewClass; @@ -52,11 +55,17 @@ typedef enum { typedef enum { EV_SCROLL_PAGE_FORWARD, - EV_SCROLL_PAGE_BACKWARD + EV_SCROLL_PAGE_BACKWARD, + EV_SCROLL_STEP_BACKWARD, + EV_SCROLL_STEP_FORWARD, + EV_SCROLL_STEP_DOWN, + EV_SCROLL_STEP_UP, } EvScrollType; GType ev_view_get_type (void) G_GNUC_CONST; GType ev_sizing_mode_get_type (void) G_GNUC_CONST; +GType ev_scroll_type_get_type (void) G_GNUC_CONST; + GtkWidget* ev_view_new (void); void ev_view_set_document (EvView *view, EvDocument *document); @@ -124,7 +133,8 @@ void ev_view_show_cursor (EvView *view); /* Navigation */ void ev_view_scroll (EvView *view, - EvScrollType scroll); + EvScrollType scroll, + gboolean horizontal); void ev_view_goto_link (EvView *view, EvLink *link); gboolean ev_view_next_page (EvView *view); diff --git a/shell/ev-window.c b/shell/ev-window.c index 0a8f6f2..61e7b1f 100644 --- a/shell/ev-window.c +++ b/shell/ev-window.c @@ -482,13 +482,13 @@ ev_window_cmd_focus_page_selector (GtkAction *act, EvWindow *window) static void ev_window_cmd_scroll_forward (GtkAction *action, EvWindow *window) { - ev_view_scroll (EV_VIEW (window->priv->view), EV_SCROLL_PAGE_FORWARD); + ev_view_scroll (EV_VIEW (window->priv->view), EV_SCROLL_PAGE_FORWARD, FALSE); } static void ev_window_cmd_scroll_backward (GtkAction *action, EvWindow *window) { - ev_view_scroll (EV_VIEW (window->priv->view), EV_SCROLL_PAGE_BACKWARD); + ev_view_scroll (EV_VIEW (window->priv->view), EV_SCROLL_PAGE_BACKWARD, FALSE); } static void @@ -2645,6 +2645,12 @@ find_bar_search_changed_cb (EggFindBar *find_bar, } static void +find_bar_scroll(EggFindBar *find_bar, GtkScrollType scroll, EvWindow* ev_window) +{ + ev_view_scroll(EV_VIEW(ev_window->priv->view), scroll, FALSE); +} + +static void zoom_control_changed_cb (EphyZoomAction *action, float zoom, EvWindow *ev_window) @@ -3521,6 +3527,10 @@ ev_window_init (EvWindow *ev_window) "notify::visible", G_CALLBACK (find_bar_search_changed_cb), ev_window); + g_signal_connect (ev_window->priv->find_bar, + "scroll", + G_CALLBACK (find_bar_scroll), + ev_window); /* Popups */ ev_window->priv->popup = gtk_ui_manager_get_widget (ev_window->priv->ui_manager, -- cgit v0.9.1