sdgui: make Page Up/Down scroll the view

This commit is contained in:
Přemysl Eric Janouch 2021-10-20 09:15:06 +02:00
parent e461189f0e
commit 82accaf200
Signed by: p
GPG Key ID: A0420B94F92B9493
3 changed files with 37 additions and 2 deletions

View File

@ -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",

View File

@ -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);
}

View File

@ -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