From 7722e6d67a8e6e6a1cb73115ee3abe4380e29e2a Mon Sep 17 00:00:00 2001 From: nirav Date: Fri, 7 Sep 2018 21:56:19 +0530 Subject: Added more key bindings, fixed file loading error --- file.c | 8 ++++++++ file.h | 1 + input.c | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----- input.h | 2 +- main.c | 8 ++++++-- window.c | 4 +++- 6 files changed, 84 insertions(+), 9 deletions(-) diff --git a/file.c b/file.c index 528de4b..1477f39 100644 --- a/file.c +++ b/file.c @@ -77,3 +77,11 @@ char *get_last_file() curr_file_index = file_list_count - 1; return file_list[curr_file_index]; } + +void clean() +{ + for (int i = 0; i < file_list_count; ++i) { + g_free(file_list[i]); + } + g_free(file_list); +} diff --git a/file.h b/file.h index b052d32..fcd4dfd 100644 --- a/file.h +++ b/file.h @@ -11,5 +11,6 @@ char *get_next_file(); char *get_prev_file(); char *get_first_file(); char *get_last_file(); +void clean(); #endif diff --git a/input.c b/input.c index 1d460d9..1d21ef2 100644 --- a/input.c +++ b/input.c @@ -5,6 +5,7 @@ #include #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: diff --git a/input.h b/input.h index 9d88383..ff50b0c 100644 --- a/input.h +++ b/input.h @@ -3,7 +3,7 @@ #include -void handle_key_press(GdkEventKey key); +void handle_key_press(GdkEvent *event); void handle_button_press(GdkEvent *event); void handle_button_release(); void handle_mouse_move(gdouble x, gdouble y); diff --git a/main.c b/main.c index f458ca5..b5eb616 100644 --- a/main.c +++ b/main.c @@ -27,11 +27,15 @@ static void open(GApplication *app, GFile **files, gint n_files, char *curr_filename = g_file_get_path(files[0]); int i = scan(curr_filename); if (i < 0) { - printf("failed to load file"); + printf("failed to load file\n"); return; } - load_image(curr_filename); + i = load_image(curr_filename); + if (i < 0) { + printf("failed to load file\n"); + quit(); + } } int main(int argc, char *argv[]) diff --git a/window.c b/window.c index 2d095c6..3c5e8db 100644 --- a/window.c +++ b/window.c @@ -1,4 +1,5 @@ #include "window.h" +#include "file.h" #include "image.h" #include "input.h" #include @@ -8,7 +9,7 @@ GtkWidget *scrolled_window; static gboolean key_press(GtkWindow *window, GdkEvent *event, gpointer data) { - handle_key_press(event->key); + handle_key_press(event); return FALSE; } @@ -93,6 +94,7 @@ void get_curr_win_size(gint *width, gint *height) void quit() { + clean(); g_application_quit( G_APPLICATION(gtk_window_get_application(GTK_WINDOW(window)))); } -- cgit v1.2.3