summaryrefslogtreecommitdiffstats
path: root/commands.c
diff options
context:
space:
mode:
authorBert Münnich <ber.t@posteo.de>2014-07-23 21:50:31 +0200
committerBert Münnich <ber.t@posteo.de>2014-07-23 21:50:31 +0200
commit06164c29b759c3e21e79be03b285bdf3da6f5a25 (patch)
tree75b3c1a68da5271e89b84b7905339ff3f3283569 /commands.c
parent5d0679b855bb42aaaf3435a3182ac5ddb4412e1f (diff)
downloadnsxiv-06164c29b759c3e21e79be03b285bdf3da6f5a25.tar.zst
Revised command structure and key and mouse button mappings
Diffstat (limited to 'commands.c')
-rw-r--r--commands.c316
1 files changed, 139 insertions, 177 deletions
diff --git a/commands.c b/commands.c
index ecc3c4c..cfcd1b1 100644
--- a/commands.c
+++ b/commands.c
@@ -1,4 +1,4 @@
-/* Copyright 2011, 2012 Bert Muennich
+/* Copyright 2011, 2012, 2014 Bert Muennich
*
* This file is part of sxiv.
*
@@ -58,7 +58,7 @@ const int ss_delays[] = {
1, 2, 3, 5, 10, 15, 20, 30, 60, 120, 180, 300, 600
};
-cmdreturn_t it_quit(arg_t a)
+bool cg_quit(arg_t a)
{
unsigned int i;
@@ -72,7 +72,7 @@ cmdreturn_t it_quit(arg_t a)
exit(EXIT_SUCCESS);
}
-cmdreturn_t it_switch_mode(arg_t a)
+bool cg_switch_mode(arg_t a)
{
if (mode == MODE_IMAGE) {
if (tns.thumbs == NULL)
@@ -90,10 +90,10 @@ cmdreturn_t it_switch_mode(arg_t a)
load_image(tns.sel);
mode = MODE_IMAGE;
}
- return CMD_DIRTY;
+ return true;
}
-cmdreturn_t it_toggle_fullscreen(arg_t a)
+bool cg_toggle_fullscreen(arg_t a)
{
win_toggle_fullscreen(&win);
/* redraw after next ConfigureNotify event */
@@ -102,10 +102,10 @@ cmdreturn_t it_toggle_fullscreen(arg_t a)
img.checkpan = img.dirty = true;
else
tns.dirty = true;
- return CMD_OK;
+ return false;
}
-cmdreturn_t it_toggle_bar(arg_t a)
+bool cg_toggle_bar(arg_t a)
{
win_toggle_bar(&win);
if (mode == MODE_IMAGE) {
@@ -115,27 +115,16 @@ cmdreturn_t it_toggle_bar(arg_t a)
} else {
tns.dirty = true;
}
- return CMD_DIRTY;
+ return true;
}
-cmdreturn_t it_prefix_external(arg_t a)
+bool cg_prefix_external(arg_t a)
{
extprefix = true;
- return CMD_OK;
+ return false;
}
-cmdreturn_t t_reload_all(arg_t a)
-{
- if (mode == MODE_THUMB) {
- tns_free(&tns);
- tns_init(&tns, filecnt, &win);
- return CMD_DIRTY;
- } else {
- return CMD_INVALID;
- }
-}
-
-cmdreturn_t it_reload_image(arg_t a)
+bool cg_reload_image(arg_t a)
{
if (mode == MODE_IMAGE) {
load_image(fileidx);
@@ -148,120 +137,77 @@ cmdreturn_t it_reload_image(arg_t a)
tns.sel = tns.cnt - 1;
}
}
- return CMD_DIRTY;
+ return true;
}
-cmdreturn_t it_remove_image(arg_t a)
+bool cg_remove_image(arg_t a)
{
if (mode == MODE_IMAGE) {
remove_file(fileidx, true);
load_image(fileidx >= filecnt ? filecnt - 1 : fileidx);
- return CMD_DIRTY;
+ return true;
} else if (tns.sel < tns.cnt) {
remove_file(tns.sel, true);
tns.dirty = true;
if (tns.sel >= tns.cnt)
tns.sel = tns.cnt - 1;
- return CMD_DIRTY;
- } else {
- return CMD_OK;
- }
-}
-
-cmdreturn_t i_navigate(arg_t a)
-{
- long n = (long) a;
-
- if (mode == MODE_IMAGE) {
- if (prefix > 0)
- n *= prefix;
- n += fileidx;
- if (n < 0)
- n = 0;
- if (n >= filecnt)
- n = filecnt - 1;
-
- if (n != fileidx) {
- load_image(n);
- return CMD_DIRTY;
- }
- }
- return CMD_INVALID;
-}
-
-cmdreturn_t i_alternate(arg_t a)
-{
- if (mode == MODE_IMAGE) {
- load_image(alternate);
- return CMD_DIRTY;
+ return true;
} else {
- return CMD_INVALID;
+ return false;
}
}
-cmdreturn_t it_first(arg_t a)
+bool cg_first(arg_t a)
{
if (mode == MODE_IMAGE && fileidx != 0) {
load_image(0);
- return CMD_DIRTY;
+ return true;
} else if (mode == MODE_THUMB && tns.sel != 0) {
tns.sel = 0;
tns.dirty = true;
- return CMD_DIRTY;
+ return true;
} else {
- return CMD_OK;
+ return false;
}
}
-cmdreturn_t it_n_or_last(arg_t a)
+bool cg_n_or_last(arg_t a)
{
int n = prefix != 0 && prefix - 1 < filecnt ? prefix - 1 : filecnt - 1;
if (mode == MODE_IMAGE && fileidx != n) {
load_image(n);
- return CMD_DIRTY;
+ return true;
} else if (mode == MODE_THUMB && tns.sel != n) {
tns.sel = n;
tns.dirty = true;
- return CMD_DIRTY;
+ return true;
} else {
- return CMD_OK;
+ return false;
}
}
-cmdreturn_t i_navigate_frame(arg_t a)
+bool cg_scroll_screen(arg_t a)
{
- if (mode != MODE_IMAGE)
- return CMD_INVALID;
- else
- return !img.multi.animate && img_frame_navigate(&img, (long) a);
-}
-
-cmdreturn_t i_toggle_animation(arg_t a)
-{
- if (mode != MODE_IMAGE)
- return CMD_INVALID;
+ direction_t dir = (direction_t) a;
- if (img.multi.animate) {
- reset_timeout(animate);
- img.multi.animate = false;
- } else if (img_frame_animate(&img, true)) {
- set_timeout(animate, img.multi.frames[img.multi.sel].delay, true);
- }
- return CMD_DIRTY;
+ if (mode == MODE_IMAGE)
+ return img_pan(&img, dir, -1);
+ else
+ return tns_scroll(&tns, dir, true);
}
-cmdreturn_t it_toggle_image_mark(arg_t a)
+bool cg_toggle_image_mark(arg_t a)
{
int sel = mode == MODE_IMAGE ? fileidx : tns.sel;
files[sel].marked = !files[sel].marked;
if (mode == MODE_THUMB)
tns_mark(&tns, sel, files[sel].marked);
- return CMD_DIRTY;
+ return true;
}
-cmdreturn_t it_reverse_marks(arg_t a)
+bool cg_reverse_marks(arg_t a)
{
int i, cnt = mode == MODE_IMAGE ? filecnt : tns.cnt;
@@ -269,10 +215,10 @@ cmdreturn_t it_reverse_marks(arg_t a)
files[i].marked = !files[i].marked;
if (mode == MODE_THUMB)
tns.dirty = true;
- return CMD_DIRTY;
+ return true;
}
-cmdreturn_t it_navigate_marked(arg_t a)
+bool cg_navigate_marked(arg_t a)
{
long n = (long) a;
int d, i, cnt, sel, new;
@@ -297,40 +243,66 @@ cmdreturn_t it_navigate_marked(arg_t a)
tns.sel = new;
tns.dirty = true;
}
- return CMD_DIRTY;
+ return true;
} else {
- return CMD_OK;
+ return false;
}
}
-cmdreturn_t it_scroll_move(arg_t a)
+bool ci_navigate(arg_t a)
{
- direction_t dir = (direction_t) a;
+ long n = (long) a;
- if (mode == MODE_IMAGE)
- return img_pan(&img, dir, prefix);
- else
- return tns_move_selection(&tns, dir, prefix);
+ if (prefix > 0)
+ n *= prefix;
+ n += fileidx;
+ if (n < 0)
+ n = 0;
+ if (n >= filecnt)
+ n = filecnt - 1;
+
+ if (n != fileidx) {
+ load_image(n);
+ return true;
+ } else {
+ return false;
+ }
+}
+
+bool ci_alternate(arg_t a)
+{
+ load_image(alternate);
+ return true;
+}
+
+bool ci_navigate_frame(arg_t a)
+{
+ return !img.multi.animate && img_frame_navigate(&img, (long) a);
+}
+
+bool ci_toggle_animation(arg_t a)
+{
+ if (img.multi.animate) {
+ reset_timeout(animate);
+ img.multi.animate = false;
+ } else if (img_frame_animate(&img, true)) {
+ set_timeout(animate, img.multi.frames[img.multi.sel].delay, true);
+ }
+ return true;
}
-cmdreturn_t it_scroll_screen(arg_t a)
+bool ci_scroll(arg_t a)
{
direction_t dir = (direction_t) a;
- if (mode == MODE_IMAGE)
- return img_pan(&img, dir, -1);
- else
- return tns_scroll(&tns, dir, true);
+ return img_pan(&img, dir, prefix);
}
-cmdreturn_t i_scroll_to_edge(arg_t a)
+bool ci_scroll_to_edge(arg_t a)
{
direction_t dir = (direction_t) a;
- if (mode == MODE_IMAGE)
- return img_pan_edge(&img, dir);
- else
- return CMD_INVALID;
+ return img_pan_edge(&img, dir);
}
/* Xlib helper function for i_drag() */
@@ -344,7 +316,7 @@ Bool is_motionnotify(Display *d, XEvent *e, XPointer a)
ox = x, oy = y; \
break
-cmdreturn_t i_drag(arg_t a)
+bool ci_drag(arg_t a)
{
int dx = 0, dy = 0, i, ox, oy, x, y;
unsigned int ui;
@@ -352,10 +324,8 @@ cmdreturn_t i_drag(arg_t a)
XEvent e;
Window w;
- if (mode != MODE_IMAGE)
- return CMD_INVALID;
if (!XQueryPointer(win.env.dpy, win.xwin, &w, &w, &i, &i, &ox, &oy, &ui))
- return CMD_OK;
+ return false;
win_set_cursor(&win, CURSOR_HAND);
@@ -398,117 +368,109 @@ cmdreturn_t i_drag(arg_t a)
dx = dy = 0;
}
}
-
win_set_cursor(&win, CURSOR_ARROW);
set_timeout(reset_cursor, TO_CURSOR_HIDE, true);
reset_timeout(redraw);
- return CMD_OK;
+ return true;
}
-cmdreturn_t i_zoom(arg_t a)
+bool ci_zoom(arg_t a)
{
long scale = (long) a;
- if (mode != MODE_IMAGE)
- return CMD_INVALID;
-
if (scale > 0)
return img_zoom_in(&img);
else if (scale < 0)
return img_zoom_out(&img);
else
- return CMD_OK;
+ return false;
}
-cmdreturn_t i_set_zoom(arg_t a)
+bool ci_set_zoom(arg_t a)
{
- if (mode == MODE_IMAGE)
- return img_zoom(&img, (prefix ? prefix : (long) a) / 100.0);
- else
- return CMD_INVALID;
+ return img_zoom(&img, (prefix ? prefix : (long) a) / 100.0);
}
-cmdreturn_t i_fit_to_win(arg_t a)
+bool ci_fit_to_win(arg_t a)
{
scalemode_t sm = (scalemode_t) a;
- if (mode == MODE_IMAGE)
- return img_fit_win(&img, sm);
- else
- return CMD_INVALID;
+ return img_fit_win(&img, sm);
}
-cmdreturn_t i_rotate(arg_t a)
+bool ci_rotate(arg_t a)
{
degree_t degree = (degree_t) a;
- if (mode == MODE_IMAGE) {
- img_rotate(&img, degree);
- return CMD_DIRTY;
- } else {
- return CMD_INVALID;
- }
+ img_rotate(&img, degree);
+ return true;
}
-cmdreturn_t i_flip(arg_t a)
+bool ci_flip(arg_t a)
{
flipdir_t dir = (flipdir_t) a;
- if (mode == MODE_IMAGE) {
- img_flip(&img, dir);
- return CMD_DIRTY;
- } else {
- return CMD_INVALID;
- }
+ img_flip(&img, dir);
+ return true;
}
-cmdreturn_t i_slideshow(arg_t a)
+bool ci_change_gamma(arg_t a)
{
- if (mode == MODE_IMAGE) {
- if (prefix > 0) {
- img.ss.on = true;
- img.ss.delay = prefix;
- set_timeout(slideshow, img.ss.delay * 1000, true);
- } else if (img.ss.on) {
- img.ss.on = false;
- reset_timeout(slideshow);
- } else {
- img.ss.on = true;
- }
- return CMD_DIRTY;
- } else {
- return CMD_INVALID;
- }
+ return img_change_gamma(&img, (long) a);
}
-cmdreturn_t i_toggle_antialias(arg_t a)
+bool ci_toggle_antialias(arg_t a)
{
- if (mode == MODE_IMAGE) {
- img_toggle_antialias(&img);
- return CMD_DIRTY;
- } else {
- return CMD_INVALID;
- }
+ img_toggle_antialias(&img);
+ return true;
}
-cmdreturn_t i_toggle_alpha(arg_t a)
+bool ci_toggle_alpha(arg_t a)
{
- if (mode == MODE_IMAGE) {
- img.alpha = !img.alpha;
- img.dirty = true;
- return CMD_DIRTY;
- } else {
- return CMD_INVALID;
- }
+ img.alpha = !img.alpha;
+ img.dirty = true;
+ return true;
}
-cmdreturn_t i_change_gamma(arg_t a)
+bool ci_slideshow(arg_t a)
{
- if (mode == MODE_IMAGE) {
- return img_change_gamma(&img, (long) a);
+ if (prefix > 0) {
+ img.ss.on = true;
+ img.ss.delay = prefix;
+ set_timeout(slideshow, img.ss.delay * 1000, true);
+ } else if (img.ss.on) {
+ img.ss.on = false;
+ reset_timeout(slideshow);
} else {
- return CMD_INVALID;
+ img.ss.on = true;
}
+ return true;
}
+bool ct_move_sel(arg_t a)
+{
+ direction_t dir = (direction_t) a;
+
+ return tns_move_selection(&tns, dir, prefix);
+}
+
+bool ct_reload_all(arg_t a)
+{
+ tns_free(&tns);
+ tns_init(&tns, filecnt, &win);
+ return false;
+}
+
+
+#undef G_CMD
+#define G_CMD(c) { -1, cg_##c },
+#undef I_CMD
+#define I_CMD(c) { MODE_IMAGE, ci_##c },
+#undef T_CMD
+#define T_CMD(c) { MODE_THUMB, ct_##c },
+
+const cmd_t cmds[CMD_COUNT] = {
+#include "commands.lst"
+};
+