Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/shell
diff options
context:
space:
mode:
authorStanislav Slusny <slusnys@gmail.com>2006-02-20 23:49:38 (GMT)
committer Nickolay V. Shmyrev <nshmyrev@src.gnome.org>2006-02-20 23:49:38 (GMT)
commit92603d06e3606238f25df947fed3666c5814440d (patch)
tree31e29bea7bb5656a0a965af1d1ff41f2693578fc /shell
parentaa44705ba0aace3c8ad210232a71310c598e4b67 (diff)
Fix for the bug 319133 - Find entry should allow text scroll.
2006-02-21 Stanislav Slusny <slusnys@gmail.com> * 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.
Diffstat (limited to 'shell')
-rw-r--r--shell/eggfindbar.c18
-rw-r--r--shell/eggfindbar.h1
-rw-r--r--shell/ev-view-accessible.c3
-rw-r--r--shell/ev-view-private.h2
-rw-r--r--shell/ev-view.c122
-rw-r--r--shell/ev-view.h14
-rw-r--r--shell/ev-window.c14
7 files changed, 104 insertions, 70 deletions
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,