diff options
-rw-r--r-- | fastiv-view.c | 33 | ||||
-rw-r--r-- | fastiv.c | 4 |
2 files changed, 33 insertions, 4 deletions
diff --git a/fastiv-view.c b/fastiv-view.c index 3b845e4..bd00f82 100644 --- a/fastiv-view.c +++ b/fastiv-view.c @@ -551,19 +551,44 @@ static gboolean fastiv_view_key_press_event(GtkWidget *widget, GdkEventKey *event) { FastivView *self = FASTIV_VIEW(widget); - if (event->state & ~GDK_SHIFT_MASK & gtk_accelerator_get_default_mod_mask()) - return FALSE; if (!self->image) return FALSE; + // It should not matter that GDK_KEY_plus involves holding Shift. + guint state = event->state & gtk_accelerator_get_default_mod_mask() & + ~GDK_SHIFT_MASK; + + // The standard, intuitive bindings. + if (state == GDK_CONTROL_MASK) { + switch (event->keyval) { + case GDK_KEY_0: + return set_scale(self, 1.0); + case GDK_KEY_plus: + return set_scale(self, self->scale * SCALE_STEP); + case GDK_KEY_minus: + return set_scale(self, self->scale / SCALE_STEP); + } + } + if (state != 0) + return FALSE; + switch (event->keyval) { case GDK_KEY_1: - return set_scale(self, 1.0); + case GDK_KEY_2: + case GDK_KEY_3: + case GDK_KEY_4: + case GDK_KEY_5: + case GDK_KEY_6: + case GDK_KEY_7: + case GDK_KEY_8: + case GDK_KEY_9: + return set_scale(self, event->keyval - GDK_KEY_0); case GDK_KEY_plus: return set_scale(self, self->scale * SCALE_STEP); case GDK_KEY_minus: return set_scale(self, self->scale / SCALE_STEP); - case GDK_KEY_F: + + case GDK_KEY_x: // Inspired by gThumb. return set_scale_to_fit(self, !self->scale_to_fit); case GDK_KEY_i: @@ -423,6 +423,10 @@ on_key_press(G_GNUC_UNUSED GtkWidget *widget, GdkEventKey *event, case GDK_KEY_n: spawn_path(g.directory); return TRUE; + case GDK_KEY_q: + case GDK_KEY_w: + gtk_widget_destroy(g.window); + return TRUE; } break; case 0: |