aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPřemysl Eric Janouch <p@janouch.name>2021-10-20 09:15:06 +0200
committerPřemysl Eric Janouch <p@janouch.name>2021-10-20 09:15:06 +0200
commit82accaf200ab3a2cbf5a9112628a8f6eac27b1c8 (patch)
tree6efc02aaa0a8f5a1d26a5fcc2ec0a9e7204021f6 /src
parente461189f0e67f237d7bfb8280b58a6881cf914d0 (diff)
downloadtdv-82accaf200ab3a2cbf5a9112628a8f6eac27b1c8.tar.gz
tdv-82accaf200ab3a2cbf5a9112628a8f6eac27b1c8.tar.xz
tdv-82accaf200ab3a2cbf5a9112628a8f6eac27b1c8.zip
sdgui: make Page Up/Down scroll the view
Diffstat (limited to 'src')
-rw-r--r--src/sdgui.c16
-rw-r--r--src/stardict-view.c21
-rw-r--r--src/stardict-view.h2
3 files changed, 37 insertions, 2 deletions
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