From f2ceac2f8ab04f91672a9cb168dfdf69dab02b3c Mon Sep 17 00:00:00 2001 From: Bert Date: Tue, 1 Feb 2011 16:40:37 +0100 Subject: [PATCH] New option: -F, fixed/floating window --- options.c | 8 ++++++-- options.h | 1 + window.c | 19 +++++++++++++------ 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/options.c b/options.c index a3f4143..38bc59e 100644 --- a/options.c +++ b/options.c @@ -29,7 +29,7 @@ options_t _options; const options_t *options = (const options_t*) &_options; void print_usage() { - printf("usage: sxiv [-dfhpqsvZ] [-g GEOMETRY] [-z ZOOM] FILES...\n"); + printf("usage: sxiv [-dFfhpqsvZ] [-g GEOMETRY] [-z ZOOM] FILES...\n"); } void print_version() { @@ -45,12 +45,13 @@ void parse_options(int argc, char **argv) { _options.zoom = 1.0; _options.aa = 1; + _options.fixed = 0; _options.fullscreen = 0; _options.geometry = NULL; _options.quiet = 0; - while ((opt = getopt(argc, argv, "dfg:hpqsvZz:")) != -1) { + while ((opt = getopt(argc, argv, "dFfg:hpqsvZz:")) != -1) { switch (opt) { case '?': print_usage(); @@ -58,6 +59,9 @@ void parse_options(int argc, char **argv) { case 'd': _options.scalemode = SCALE_DOWN; break; + case 'F': + _options.fixed = 1; + break; case 'f': _options.fullscreen = 1; break; diff --git a/options.h b/options.h index 7de4f0f..19a0c6b 100644 --- a/options.h +++ b/options.h @@ -29,6 +29,7 @@ typedef struct options_s { float zoom; unsigned char aa; + unsigned char fixed; unsigned char fullscreen; char *geometry; diff --git a/window.c b/window.c index 3904fe8..a7a1121 100644 --- a/window.c +++ b/window.c @@ -33,7 +33,8 @@ static GC bgc; void win_open(win_t *win) { win_env_t *e; - XClassHint *classhint; + XClassHint classhint; + XSizeHints sizehints; XColor bgcol; int gmask; @@ -99,11 +100,17 @@ void win_open(win_t *win) { win_set_title(win, "sxiv"); - if ((classhint = XAllocClassHint())) { - classhint->res_name = "sxiv"; - classhint->res_class = "sxiv"; - XSetClassHint(e->dpy, win->xwin, classhint); - XFree(classhint); + classhint.res_name = "sxiv"; + classhint.res_class = "sxiv"; + XSetClassHint(e->dpy, win->xwin, &classhint); + + if (options->fixed) { + sizehints.flags = PMinSize | PMaxSize; + sizehints.min_width = win->w; + sizehints.max_width = win->w; + sizehints.min_height = win->h; + sizehints.max_height = win->h; + XSetWMNormalHints(e->dpy, win->xwin, &sizehints); } XMapWindow(e->dpy, win->xwin);