summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDaniel Friesel <derf@finalrewind.org>2010-09-14 23:06:52 +0200
committerDaniel Friesel <derf@finalrewind.org>2010-09-14 23:06:52 +0200
commit09fd4a99df2a0a791677d48a936244630bbfee33 (patch)
tree90531ccbcc463bd0b3b8f5f13d0350b5bfe46763 /src
parentdabc31d51f10436cf66dc2f1aeeabe45c684d327 (diff)
Remove --action-hold-slide, add per-action method instead.
When executing an action starting with a semicolon, feh will not skip to the next slide. The semicolon is not passed on to the executing shell, of course. This is kinda ugly, but at least it makes action handling somewhat more flexible.
Diffstat (limited to 'src')
-rw-r--r--src/keyevents.c36
-rw-r--r--src/options.c13
-rw-r--r--src/options.h2
3 files changed, 26 insertions, 25 deletions
diff --git a/src/keyevents.c b/src/keyevents.c
index 81e43e7..7940973 100644
--- a/src/keyevents.c
+++ b/src/keyevents.c
@@ -29,21 +29,19 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#include "winwidget.h"
#include "options.h"
-void feh_event_invoke_action(winwidget winwid, char *action)
+void feh_event_invoke_action(winwidget winwid, unsigned char action)
{
- D(("action is '%s'\n", action));
- D(("winwid is '%p'\n", winwid));
- if (action) {
+ if (opt.actions[action]) {
if (opt.slideshow) {
- feh_action_run(FEH_FILE(winwid->file->data), action);
- winwidget_update_caption(winwid);
+ feh_action_run(FEH_FILE(winwid->file->data), opt.actions[action]);
+ winwidget_update_caption(winwid);
- if (! opt.action_hold_slide)
- slideshow_change_image(winwid, SLIDE_NEXT);
+ if (! opt.hold_actions[action])
+ slideshow_change_image(winwid, SLIDE_NEXT);
} else if ((winwid->type == WIN_TYPE_SINGLE)
|| (winwid->type == WIN_TYPE_THUMBNAIL_VIEWER)) {
- feh_action_run(FEH_FILE(winwid->file->data), action);
+ feh_action_run(FEH_FILE(winwid->file->data), opt.actions[action]);
winwidget_destroy(winwid);
} else if (winwid->type == WIN_TYPE_THUMBNAIL) {
printf("actions from the main thumb window aren't currentl supported!\n");
@@ -215,43 +213,43 @@ void feh_event_handle_keypress(XEvent * ev)
case XK_KP_Enter:
case XK_0:
case XK_KP_0:
- feh_event_invoke_action(winwid, opt.actions[0]);
+ feh_event_invoke_action(winwid, 0);
break;
case XK_1:
case XK_KP_1:
- feh_event_invoke_action(winwid, opt.actions[1]);
+ feh_event_invoke_action(winwid, 1);
break;
case XK_2:
case XK_KP_2:
- feh_event_invoke_action(winwid, opt.actions[2]);
+ feh_event_invoke_action(winwid, 2);
break;
case XK_3:
case XK_KP_3:
- feh_event_invoke_action(winwid, opt.actions[3]);
+ feh_event_invoke_action(winwid, 3);
break;
case XK_4:
case XK_KP_4:
- feh_event_invoke_action(winwid, opt.actions[4]);
+ feh_event_invoke_action(winwid, 4);
break;
case XK_5:
case XK_KP_5:
- feh_event_invoke_action(winwid, opt.actions[5]);
+ feh_event_invoke_action(winwid, 5);
break;
case XK_6:
case XK_KP_6:
- feh_event_invoke_action(winwid, opt.actions[6]);
+ feh_event_invoke_action(winwid, 6);
break;
case XK_7:
case XK_KP_7:
- feh_event_invoke_action(winwid, opt.actions[7]);
+ feh_event_invoke_action(winwid, 7);
break;
case XK_8:
case XK_KP_8:
- feh_event_invoke_action(winwid, opt.actions[8]);
+ feh_event_invoke_action(winwid, 8);
break;
case XK_9:
case XK_KP_9:
- feh_event_invoke_action(winwid, opt.actions[9]);
+ feh_event_invoke_action(winwid, 9);
break;
case XK_KP_Left:
winwid->im_x += 10;
diff --git a/src/options.c b/src/options.c
index 182f3d8..2206f3e 100644
--- a/src/options.c
+++ b/src/options.c
@@ -71,7 +71,6 @@ void init_parse_options(int argc, char **argv)
opt.next_button = 5;
opt.draw_actions = 0;
- opt.action_hold_slide = 0;
opt.rotate_button = 2;
opt.no_rotate_ctrl_mask = 0;
@@ -422,12 +421,12 @@ static void feh_parse_option_array(int argc, char **argv)
{"index-size" , 1, 0, 231},
{"index-dim" , 1, 0, 232},
{"thumb-redraw" , 1, 0, 'J'},
- {"action-hold-slide", 0, 0, 233},
{"info" , 1, 0, 234},
{0, 0, 0, 0}
};
int optch = 0, cmdx = 0;
+ int i = 0;
/* Now to pass some optionarinos */
while ((optch = getopt_long(argc, argv, stropts, lopts, &cmdx)) != EOF) {
@@ -770,9 +769,6 @@ static void feh_parse_option_array(int argc, char **argv)
case 'J':
opt.thumb_redraw = atoi(optarg);
break;
- case 233:
- opt.action_hold_slide = 1;
- break;
case 234:
opt.info_cmd = estrdup(optarg);
break;
@@ -790,6 +786,13 @@ static void feh_parse_option_array(int argc, char **argv)
}
}
+ for (i = 0; i < 10; i++) {
+ if (opt.actions[i] && !opt.hold_actions[i] && (opt.actions[i][0] == ';')) {
+ opt.hold_actions[i] = 1;
+ opt.actions[i] = &opt.actions[i][1];
+ }
+ }
+
/* So that we can safely be called again */
optind = 1;
return;
diff --git a/src/options.h b/src/options.h
index 5a187f4..e99c14c 100644
--- a/src/options.h
+++ b/src/options.h
@@ -66,9 +66,9 @@ struct __fehoptions {
unsigned char screen_clip;
unsigned char hide_pointer;
unsigned char draw_actions;
- unsigned char action_hold_slide;
unsigned char cache_thumbnails;
unsigned char cycle_once;
+ unsigned char hold_actions[10];
char *output_file;
char *output_dir;