aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--main.c68
1 files 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;
}