aboutsummaryrefslogtreecommitdiff
path: root/input.c
diff options
context:
space:
mode:
Diffstat (limited to 'input.c')
-rw-r--r--input.c70
1 files changed, 65 insertions, 5 deletions
diff --git a/input.c b/input.c
index 1d460d9..1d21ef2 100644
--- a/input.c
+++ b/input.c
@@ -5,6 +5,7 @@
#include <gtk-3.0/gtk/gtk.h>
#define TIMEOUT 20
+#define SCROLLAMMOUNT 30
int grabbed = 0;
gdouble start_x, start_y;
@@ -37,9 +38,12 @@ void last()
load_image(name);
}
-void handle_key_press(GdkEventKey key)
+void handle_key_press(GdkEvent *event)
{
- switch (key.keyval) {
+ GdkModifierType state;
+ gdk_event_get_state(event, &state);
+
+ switch (event->key.keyval) {
case GDK_KEY_q:
quit();
case GDK_KEY_w:
@@ -57,13 +61,69 @@ void handle_key_press(GdkEventKey key)
zoom(0);
break;
case GDK_KEY_n:
- case GDK_KEY_j:
- case GDK_KEY_Right:
next();
break;
case GDK_KEY_p:
- case GDK_KEY_k:
+ prev();
+ break;
+ case GDK_KEY_Up:
+ if (curr_scale_mod == fit || state & GDK_SHIFT_MASK)
+ prev();
+ else
+ scroll_window(0, -SCROLLAMMOUNT);
+ break;
+ case GDK_KEY_Down:
+ if (curr_scale_mod == fit || state & GDK_SHIFT_MASK)
+ next();
+ else
+ scroll_window(0, SCROLLAMMOUNT);
+ break;
+ case GDK_KEY_Right:
+ if (curr_scale_mod == fit || state & GDK_SHIFT_MASK)
+ next();
+ else
+ scroll_window(SCROLLAMMOUNT, 0);
+ break;
case GDK_KEY_Left:
+ if (curr_scale_mod == fit || state & GDK_SHIFT_MASK)
+ prev();
+ else
+ scroll_window(-SCROLLAMMOUNT, 0);
+ break;
+ case GDK_KEY_j:
+ if (curr_scale_mod == fit)
+ next();
+ else
+ scroll_window(0, SCROLLAMMOUNT);
+ break;
+ case GDK_KEY_J:
+ next();
+ break;
+ case GDK_KEY_k:
+ if (curr_scale_mod == fit)
+ prev();
+ else
+ scroll_window(0, -SCROLLAMMOUNT);
+ break;
+ case GDK_KEY_K:
+ prev();
+ break;
+ case GDK_KEY_l:
+ if (curr_scale_mod == fit)
+ next();
+ else
+ scroll_window(SCROLLAMMOUNT, 0);
+ break;
+ case GDK_KEY_L:
+ next();
+ break;
+ case GDK_KEY_h:
+ if (curr_scale_mod == fit)
+ prev();
+ else
+ scroll_window(-SCROLLAMMOUNT, 0);
+ break;
+ case GDK_KEY_H:
prev();
break;
case GDK_KEY_g: