summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Friesel <derf@finalrewind.org>2017-10-03 20:39:47 +0200
committerDaniel Friesel <derf@finalrewind.org>2017-10-03 20:39:47 +0200
commit528616b3df854b3bfad30c2364bf2aaf000e3a6d (patch)
treefc81ee96c6c0e5fa861746e50d98e2c698c55c9c
parentde36c62308fb982f9794db87a856fa6aae042ce6 (diff)
Always save user-provided commandline in ~/.fehbg
This fixes --force-aliasing (and possibly other options) missing from the file.
-rw-r--r--src/wallpaper.c48
1 files changed, 7 insertions, 41 deletions
diff --git a/src/wallpaper.c b/src/wallpaper.c
index f40c613..e7f0b74 100644
--- a/src/wallpaper.c
+++ b/src/wallpaper.c
@@ -296,40 +296,11 @@ void feh_wm_set_bg(char *fil, Imlib_Image im, int centered, int scaled,
Pixmap pmap_d1, pmap_d2;
gib_list *l;
- /* string for sticking in ~/.fehbg */
- char *fehbg = NULL;
- char fehbg_args[512];
- fehbg_args[0] = '\0';
- char *argptr = fehbg_args;
char *home;
char filbuf[4096];
char *bgfill = NULL;
bgfill = opt.image_bg == IMAGE_BG_WHITE ? "--image-bg white" : "--image-bg black" ;
-#ifdef HAVE_LIBXINERAMA
- if (opt.xinerama) {
- if (opt.xinerama_index >= 0) {
- snprintf(argptr, sizeof(fehbg_args),
- "--xinerama-index %d", opt.xinerama_index);
- }
- }
- else
- snprintf(argptr, sizeof(fehbg_args), "--no-xinerama");
- argptr += strlen(argptr);
-#endif /* HAVE_LIBXINERAMA */
- if ((opt.geom_flags & XValue) && (sizeof(fehbg_args) - strlen(fehbg_args) > 60)) {
- snprintf(argptr, sizeof(fehbg_args) - strlen(fehbg_args), " --geometry %c%d",
- opt.geom_flags & XNegative ? '-' : '+',
- opt.geom_flags & XNegative ? abs(opt.geom_x) : opt.geom_x);
- argptr += strlen(argptr);
- if (opt.geom_flags & YValue) {
- snprintf(argptr, sizeof(fehbg_args) - strlen(fehbg_args), "%c%d",
- opt.geom_flags & YNegative ? '-' : '+',
- opt.geom_flags & YNegative ? abs(opt.geom_y) : opt.geom_y);
- argptr += strlen(argptr);
- }
- }
-
/* local display to set closedownmode on */
Display *disp2;
Window root2;
@@ -403,7 +374,6 @@ void feh_wm_set_bg(char *fil, Imlib_Image im, int centered, int scaled,
#endif /* HAVE_LIBXINERAMA */
feh_wm_set_bg_scaled(pmap_d1, im, use_filelist,
0, 0, scr->width, scr->height);
- fehbg = estrjoin(" ", "feh", fehbg_args, "--bg-scale", filbuf, NULL);
} else if (centered) {
D(("centering\n"));
@@ -433,8 +403,6 @@ void feh_wm_set_bg(char *fil, Imlib_Image im, int centered, int scaled,
XFreeGC(disp, gc);
- fehbg = estrjoin(" ", "feh", fehbg_args, bgfill, "--bg-center", filbuf, NULL);
-
} else if (filled == 1) {
pmap_d1 = XCreatePixmap(disp, root, scr->width, scr->height, depth);
@@ -464,8 +432,6 @@ void feh_wm_set_bg(char *fil, Imlib_Image im, int centered, int scaled,
feh_wm_set_bg_filled(pmap_d1, im, use_filelist
, 0, 0, scr->width, scr->height);
- fehbg = estrjoin(" ", "feh", fehbg_args, "--bg-fill", filbuf, NULL);
-
} else if (filled == 2) {
pmap_d1 = XCreatePixmap(disp, root, scr->width, scr->height, depth);
@@ -493,8 +459,6 @@ void feh_wm_set_bg(char *fil, Imlib_Image im, int centered, int scaled,
XFreeGC(disp, gc);
- fehbg = estrjoin(" ", "feh", fehbg_args, bgfill, "--bg-max", filbuf, NULL);
-
} else {
if (use_filelist)
feh_wm_load_next(&im);
@@ -502,10 +466,9 @@ void feh_wm_set_bg(char *fil, Imlib_Image im, int centered, int scaled,
h = gib_imlib_image_get_height(im);
pmap_d1 = XCreatePixmap(disp, root, w, h, depth);
gib_imlib_render_image_on_drawable(pmap_d1, im, 0, 0, 1, 0, 0);
- fehbg = estrjoin(" ", "feh --bg-tile", filbuf, NULL);
}
- if (fehbg && !opt.no_fehbg) {
+ if (!opt.no_fehbg) {
home = getenv("HOME");
if (home) {
FILE *fp;
@@ -515,7 +478,12 @@ void feh_wm_set_bg(char *fil, Imlib_Image im, int centered, int scaled,
if ((fp = fopen(path, "w")) == NULL) {
weprintf("Can't write to %s", path);
} else {
- fprintf(fp, "#!/bin/sh\n%s\n", fehbg);
+ fputs("#!/bin/sh\n", fp);
+ for (int i = 0; i < cmdargc; i++) {
+ fputs(shell_escape(cmdargv[i]), fp);
+ fputc(' ', fp);
+ }
+ fputc('\n', fp);
fclose(fp);
stat(path, &s);
if (chmod(path, s.st_mode | S_IXUSR | S_IXGRP) != 0) {
@@ -526,8 +494,6 @@ void feh_wm_set_bg(char *fil, Imlib_Image im, int centered, int scaled,
}
}
- free(fehbg);
-
/* create new display, copy pixmap to new display */
disp2 = XOpenDisplay(NULL);
if (!disp2)