From 586ba5950efd8badf8364c6f2a9693e2f1800e32 Mon Sep 17 00:00:00 2001 From: nirav Date: Mon, 3 Sep 2018 22:03:43 +0530 Subject: Added scrollwheel bindings for image switching --- main.c | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 52 insertions(+), 16 deletions(-) diff --git a/main.c b/main.c index d762469..c1a9eaa 100644 --- a/main.c +++ b/main.c @@ -12,9 +12,36 @@ GtkWidget *window; gint win_width, win_height; GError *error = NULL; -static gboolean key_press(GtkWindow *window, GdkEvent *event, gpointer data) +void next() +{ + char *name; + if ((name = get_next_file()) != NULL) + load_image(name, win_width, win_height); +} + +void prev() { char *name; + if ((name = get_prev_file()) != NULL) + load_image(name, win_width, win_height); +} + +void first() +{ + char *name; + if ((name = get_first_file()) != NULL) + load_image(name, win_width, win_height); +} + +void last() +{ + char *name; + if ((name = get_last_file()) != NULL) + load_image(name, win_width, win_height); +} + +static gboolean key_press(GtkWindow *window, GdkEvent *event, gpointer data) +{ switch (event->key.keyval) { case GDK_KEY_q: g_application_quit( @@ -38,24 +65,20 @@ static gboolean key_press(GtkWindow *window, GdkEvent *event, gpointer data) case GDK_KEY_n: case GDK_KEY_j: case GDK_KEY_Right: - if ((name = get_next_file()) != NULL) - load_image(name, win_width, win_height); + next(); return FALSE; case GDK_KEY_p: case GDK_KEY_k: case GDK_KEY_Left: - if ((name = get_prev_file()) != NULL) - load_image(name, win_width, win_height); + prev(); return FALSE; case GDK_KEY_g: case GDK_KEY_Home: - if ((name = get_first_file()) != NULL) - load_image(name, win_width, win_height); + first(); return FALSE; case GDK_KEY_G: case GDK_KEY_End: - if ((name = get_last_file()) != NULL) - load_image(name, win_width, win_height); + last(); return FALSE; default: return TRUE; @@ -66,15 +89,28 @@ gboolean scroll_callback(GtkWindow *window, GdkEvent *event, gpointer data) { GdkModifierType state; gdk_event_get_state(event, &state); - if (state & GDK_CONTROL_MASK && event->scroll.direction == GDK_SCROLL_UP) { - zoom(1); - curr_scale_mod = zoomed; + + switch (event->scroll.direction) { + case GDK_SCROLL_UP: + if (state & GDK_CONTROL_MASK) { + zoom(1); + curr_scale_mod = zoomed; + } else { + next(); + } return FALSE; - } else if (state & GDK_CONTROL_MASK && - event->scroll.direction == GDK_SCROLL_DOWN) { - zoom(-1); - curr_scale_mod = zoomed; + break; + case GDK_SCROLL_DOWN: + if (state & GDK_CONTROL_MASK) { + zoom(1); + curr_scale_mod = zoomed; + } else { + prev(); + } return FALSE; + break; + default: + break; } return TRUE; } -- cgit v1.2.3