aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornirav <nirav@teisuu.com>2018-09-07 21:56:19 +0530
committerDandelion <nirav@teisuu.com>2018-09-07 21:56:19 +0530
commit7722e6d67a8e6e6a1cb73115ee3abe4380e29e2a (patch)
treec6ec058a30d102de7824b34842fbb7c90bdba2c2
parent02f7a54e67260ee7995c6cd9bf40ae784b60203d (diff)
downloadim-7722e6d67a8e6e6a1cb73115ee3abe4380e29e2a.tar.gz
im-7722e6d67a8e6e6a1cb73115ee3abe4380e29e2a.zip
Added more key bindings, fixed file loading error
-rw-r--r--file.c8
-rw-r--r--file.h1
-rw-r--r--input.c70
-rw-r--r--input.h2
-rw-r--r--main.c8
-rw-r--r--window.c4
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 <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:
diff --git a/input.h b/input.h
index 9d88383..ff50b0c 100644
--- a/input.h
+++ b/input.h
@@ -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);
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 <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))));
}