diff options
author | nirav <nirav@teisuu.com> | 2018-09-07 21:56:19 +0530 |
---|---|---|
committer | Dandelion <nirav@teisuu.com> | 2018-09-07 21:56:19 +0530 |
commit | 7722e6d67a8e6e6a1cb73115ee3abe4380e29e2a (patch) | |
tree | c6ec058a30d102de7824b34842fbb7c90bdba2c2 | |
parent | 02f7a54e67260ee7995c6cd9bf40ae784b60203d (diff) | |
download | im-7722e6d67a8e6e6a1cb73115ee3abe4380e29e2a.tar.gz im-7722e6d67a8e6e6a1cb73115ee3abe4380e29e2a.zip |
Added more key bindings, fixed file loading error
-rw-r--r-- | file.c | 8 | ||||
-rw-r--r-- | file.h | 1 | ||||
-rw-r--r-- | input.c | 70 | ||||
-rw-r--r-- | input.h | 2 | ||||
-rw-r--r-- | main.c | 8 | ||||
-rw-r--r-- | window.c | 4 |
6 files changed, 84 insertions, 9 deletions
@@ -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); +} @@ -11,5 +11,6 @@ char *get_next_file(); char *get_prev_file(); char *get_first_file(); char *get_last_file(); +void clean(); #endif @@ -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: @@ -3,7 +3,7 @@ #include <gtk-3.0/gtk/gtk.h> -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); @@ -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[]) @@ -1,4 +1,5 @@ #include "window.h" +#include "file.h" #include "image.h" #include "input.h" #include <gtk-3.0/gtk/gtk.h> @@ -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)))); } |