diff --git a/src/sdgui.c b/src/sdgui.c index 3c16acc..d126d20 100644 --- a/src/sdgui.c +++ b/src/sdgui.c @@ -216,6 +216,20 @@ on_key_press (G_GNUC_UNUSED GtkWidget *widget, GdkEvent *event, return TRUE; } } + if (mods == 0) + { + StardictView *view = STARDICT_VIEW (g.view); + if (event->key.keyval == GDK_KEY_Page_Up) + { + stardict_view_scroll (view, GTK_SCROLL_PAGES, -0.5); + return TRUE; + } + if (event->key.keyval == GDK_KEY_Page_Down) + { + stardict_view_scroll (view, GTK_SCROLL_PAGES, +0.5); + return TRUE; + } + } return FALSE; } @@ -341,8 +355,6 @@ main (int argc, char *argv[]) // TODO: make the entry have a background colour, rather than transparency gtk_entry_set_has_frame (GTK_ENTRY (g.entry), FALSE); - // TODO: supposedly attach to "key-press-event" here and react to - // PageUp/PageDown and up/down arrow keys... either here or in the Entry g.window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_default_size (GTK_WINDOW (g.window), 300, 600); g_signal_connect (g.window, "destroy", diff --git a/src/stardict-view.c b/src/stardict-view.c index 5371475..8eefa1a 100644 --- a/src/stardict-view.c +++ b/src/stardict-view.c @@ -555,3 +555,24 @@ stardict_view_set_matched (StardictView *self, const gchar *matched) self->matched = g_strdup (matched); reload (self); } + +void +stardict_view_scroll (StardictView *self, GtkScrollStep step, gdouble amount) +{ + g_return_if_fail (STARDICT_IS_VIEW (self)); + + GtkWidget *widget = GTK_WIDGET (self); + switch (step) + { + case GTK_SCROLL_STEPS: + self->top_offset += amount * natural_row_size (widget); + break; + case GTK_SCROLL_PAGES: + self->top_offset += amount * gtk_widget_get_allocated_height (widget); + break; + default: + break; + } + + adjust_for_offset (self); +} diff --git a/src/stardict-view.h b/src/stardict-view.h index 206238b..d5d679d 100644 --- a/src/stardict-view.h +++ b/src/stardict-view.h @@ -30,5 +30,7 @@ GtkWidget *stardict_view_new (void); void stardict_view_set_position (StardictView *view, StardictDict *dict, guint position); void stardict_view_set_matched (StardictView *view, const gchar *matched); +void stardict_view_scroll (StardictView *view, + GtkScrollStep step, gdouble amount); #endif // ! STARDICT_VIEW_H