summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/events.c28
-rw-r--r--src/filelist.c3
-rw-r--r--src/imlib.c6
-rw-r--r--src/options.c5
-rw-r--r--src/wallpaper.c38
5 files changed, 61 insertions, 19 deletions
diff --git a/src/events.c b/src/events.c
index fadae9b..e6cf0ac 100644
--- a/src/events.c
+++ b/src/events.c
@@ -378,8 +378,12 @@ static void feh_event_handle_ButtonRelease(XEvent * ev)
x /= winwid->zoom;
y /= winwid->zoom;
thumbfile = feh_thumbnail_get_file_from_coords(x, y);
- if (thumbfile)
- feh_thumbnail_show_fullsize(thumbfile);
+ if (thumbfile) {
+ if (opt.actions[0])
+ feh_action_run(thumbfile, opt.actions[0]);
+ else
+ feh_thumbnail_show_fullsize(thumbfile);
+ }
}
} else {
opt.mode = MODE_NORMAL;
@@ -578,36 +582,38 @@ static void feh_event_handle_MotionNotify(XEvent * ev)
winwidget_sanitise_offsets(winwid);
- D(("im_x %d, im_w %d, off %d, mx %d\n", winwid->im_x,
- winwid->im_w, winwid->click_offset_x, ev->xmotion.x));
+ D(("im_x %d, im_w %d, off %d, mx %d, my %d\n", winwid->im_x,
+ winwid->im_w, winwid->click_offset_x, ev->xmotion.x,
+ ev->xmotion.y));
/* XWarpPointer generates a MotionNotify event which we will
* parse. Since that event would undo the effect of the pointer
* warp, we need to change the click_offset to compensate this.
*/
- if ((winwid->w - ev->xmotion.x <= 1)
- && (winwid->click_offset_x >= winwid->w - 4))
+ if ((winwid->w - ev->xmotion.x <= 1) && (winwid->im_x < 0))
{
XWarpPointer(disp, None, winwid->win, 0, 0, 0, 0, 3,
ev->xmotion.y);
winwid->click_offset_x -= winwid->w - 4;
}
- else if ((ev->xmotion.x <= 1) && (winwid->click_offset_x
- <= (winwid->im_w * winwid->zoom) - winwid->w - 3))
+ // TODO needlessly warps for certain zoom levels
+ else if ((ev->xmotion.x <= 1) && (winwid->im_x >
+ (winwid->w - winwid->im_w * winwid->zoom)))
{
XWarpPointer(disp, None, winwid->win, 0, 0, 0, 0,
winwid->w - 4, ev->xmotion.y);
winwid->click_offset_x += winwid->w - 4;
}
else if ((winwid->h - ev->xmotion.y <= 1)
- && (winwid->click_offset_y >= winwid->h - 4))
+ && (winwid->im_y < 0))
{
XWarpPointer(disp, None, winwid->win, 0, 0, 0, 0,
ev->xmotion.x, 3);
winwid->click_offset_y -= winwid->h - 4;
}
- else if ((ev->xmotion.y <= 1) && (winwid->click_offset_y
- <= (winwid->im_h * winwid->zoom) - winwid->h - 3))
+ // TODO needlessly warps for certain zoomlevels
+ else if ((ev->xmotion.y <= 1) && (winwid->im_y >
+ (winwid->h - winwid->im_h * winwid->zoom)))
{
XWarpPointer(disp, None, winwid->win, 0, 0, 0, 0,
ev->xmotion.x, winwid->h - 4);
diff --git a/src/filelist.c b/src/filelist.c
index bbde98c..8d19e41 100644
--- a/src/filelist.c
+++ b/src/filelist.c
@@ -213,7 +213,8 @@ void add_file_to_filelist_recursively(char *origpath, unsigned char level)
if ((!strncmp(path, "http://", 7))
|| (!strncmp(path, "https://", 8))
- || (!strncmp(path, "ftp://", 6))) {
+ || (!strncmp(path, "ftp://", 6))
+ || (!strncmp(path, "file://", 7))) {
/* Its a url */
D(("Adding url %s to filelist\n", path));
filelist = gib_list_add_front(filelist, feh_file_new(path));
diff --git a/src/imlib.c b/src/imlib.c
index 2047c63..36de346 100644
--- a/src/imlib.c
+++ b/src/imlib.c
@@ -243,8 +243,10 @@ int feh_load_image(Imlib_Image * im, feh_file * file)
return 0;
/* Handle URLs */
- if ((!strncmp(file->filename, "http://", 7)) || (!strncmp(file->filename, "https://", 8))
- || (!strncmp(file->filename, "ftp://", 6))) {
+ if ((!strncmp(file->filename, "http://", 7))
+ || (!strncmp(file->filename, "https://", 8))
+ || (!strncmp(file->filename, "ftp://", 6))
+ || (!strncmp(file->filename, "file://", 7))) {
image_source = SRC_HTTP;
if ((tmpname = feh_http_load_image(file->filename)) == NULL)
diff --git a/src/options.c b/src/options.c
index 627c7da..c6166d9 100644
--- a/src/options.c
+++ b/src/options.c
@@ -717,7 +717,10 @@ static void feh_parse_option_array(int argc, char **argv, int finalrun)
break;
case 234:
opt.info_cmd = estrdup(optarg);
- opt.draw_info = 1;
+ if (opt.info_cmd[0] == ';')
+ opt.info_cmd++;
+ else
+ opt.draw_info = 1;
break;
case 235:
opt.force_aliasing = 1;
diff --git a/src/wallpaper.c b/src/wallpaper.c
index 30c3925..886beb6 100644
--- a/src/wallpaper.c
+++ b/src/wallpaper.c
@@ -104,8 +104,21 @@ static void feh_wm_set_bg_centered(Pixmap pmap, Imlib_Image im, int use_filelist
if (use_filelist)
feh_wm_load_next(&im);
- offset_x = (w - gib_imlib_image_get_width(im)) >> 1;
- offset_y = (h - gib_imlib_image_get_height(im)) >> 1;
+ if(opt.geom_flags & XValue)
+ if(opt.geom_flags & XNegative)
+ offset_x = (w - gib_imlib_image_get_width(im)) + opt.geom_x;
+ else
+ offset_x = opt.geom_x;
+ else
+ offset_x = (w - gib_imlib_image_get_width(im)) >> 1;
+
+ if(opt.geom_flags & YValue)
+ if(opt.geom_flags & YNegative)
+ offset_y = (h - gib_imlib_image_get_height(im)) + opt.geom_y;
+ else
+ offset_y = opt.geom_y;
+ else
+ offset_y = (h - gib_imlib_image_get_height(im)) >> 1;
gib_imlib_render_image_part_on_drawable_at_size(pmap, im,
((offset_x < 0) ? -offset_x : 0),
@@ -161,6 +174,7 @@ static void feh_wm_set_bg_maxed(Pixmap pmap, Imlib_Image im, int use_filelist,
{
int img_w, img_h, border_x;
int render_w, render_h, render_x, render_y;
+ int margin_x, margin_y;
if (use_filelist)
feh_wm_load_next(&im);
@@ -173,8 +187,24 @@ static void feh_wm_set_bg_maxed(Pixmap pmap, Imlib_Image im, int use_filelist,
render_w = ( border_x ? ((img_w * h) / img_h) : w);
render_h = ( !border_x ? ((img_h * w) / img_w) : h);
- render_x = x + ( border_x ? ((w - render_w) >> 1) : 0);
- render_y = y + ( !border_x ? ((h - render_h) >> 1) : 0);
+ if(opt.geom_flags & XValue)
+ if(opt.geom_flags & XNegative)
+ margin_x = (w - render_w) + opt.geom_x;
+ else
+ margin_x = opt.geom_x;
+ else
+ margin_x = (w - render_w) >> 1;
+
+ if(opt.geom_flags & YValue)
+ if(opt.geom_flags & YNegative)
+ margin_y = (h - render_h) + opt.geom_y;
+ else
+ margin_y = opt.geom_y;
+ else
+ margin_y = (h - render_h) >> 1;
+
+ render_x = x + ( border_x ? margin_x : 0);
+ render_y = y + ( !border_x ? margin_y : 0);
gib_imlib_render_image_on_drawable_at_size(pmap, im,
render_x, render_y,