Compare commits

...

3 Commits

3 changed files with 40 additions and 15 deletions

View File

@ -195,15 +195,9 @@ on_key_press (G_GNUC_UNUSED GtkWidget *widget, GdkEvent *event,
// Can't use gtk_widget_add_accelerator() to change-current-page(-1/+1)
// because that signal has arguments, which cannot be passed.
if (event->key.keyval == GDK_KEY_Page_Up)
{
gtk_notebook_prev_page (GTK_NOTEBOOK (g.notebook));
return TRUE;
}
return gtk_notebook_prev_page (GTK_NOTEBOOK (g.notebook)), TRUE;
if (event->key.keyval == GDK_KEY_Page_Down)
{
gtk_notebook_next_page (GTK_NOTEBOOK (g.notebook));
return TRUE;
}
return gtk_notebook_next_page (GTK_NOTEBOOK (g.notebook)), TRUE;
}
if (mods == GDK_MOD1_MASK)
{
@ -216,6 +210,14 @@ 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)
return stardict_view_scroll (view, GTK_SCROLL_PAGES, -0.5), TRUE;
if (event->key.keyval == GDK_KEY_Page_Down)
return stardict_view_scroll (view, GTK_SCROLL_PAGES, +0.5), TRUE;
}
return FALSE;
}
@ -341,8 +343,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

@ -395,8 +395,9 @@ stardict_view_realize (GtkWidget *widget)
// Input-only would presumably also work (as in GtkPathBar, e.g.),
// but it merely seems to involve more work.
.wclass = GDK_INPUT_OUTPUT,
.visual = gtk_widget_get_visual (widget),
// GDK_SMOOTH_SCROLL_MASK is useless, will stop sending UP/DOWN
.event_mask = gtk_widget_get_events (widget) | GDK_SCROLL_MASK,
};
@ -481,15 +482,16 @@ stardict_view_scroll_event (GtkWidget *widget, GdkEventScroll *event)
switch (event->direction)
{
case GDK_SCROLL_UP:
self->top_offset -= 3 * natural_row_size (widget);
adjust_for_offset (self);
stardict_view_scroll (self, GTK_SCROLL_STEPS, -3);
return TRUE;
case GDK_SCROLL_DOWN:
self->top_offset += 3 * natural_row_size (widget);
stardict_view_scroll (self, GTK_SCROLL_STEPS, +3);
return TRUE;
case GDK_SCROLL_SMOOTH:
self->top_offset += event->delta_y;
adjust_for_offset (self);
return TRUE;
default:
// GDK_SCROLL_SMOOTH doesn't fit the intended way of usage
return FALSE;
}
}
@ -555,3 +557,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