From bb17fab590544df9b04f55306770ad7bebdd88d4 Mon Sep 17 00:00:00 2001 From: Alex Kotov Date: Sun, 21 Nov 2021 03:01:13 +0500 Subject: [PATCH] Use structure for screen sizes --- src/dwm.c | 33 ++++++++++++++++++++------------- src/dwm/handlers.c | 6 +++--- 2 files changed, 23 insertions(+), 16 deletions(-) diff --git a/src/dwm.c b/src/dwm.c index fdaeb2c..b7487d0 100644 --- a/src/dwm.c +++ b/src/dwm.c @@ -222,10 +222,11 @@ static void zoom(const Arg *arg); * variables * *************/ +static struct Sizes screen_sizes = { 0, 0 }; static Unit global_unit = NULL; + static const char broken[] = "broken"; static int screen; -static int sw, sh; /* X display screen geometry width, height */ static int (*xerrorxlib)(Display *, XErrorEvent *); static unsigned int numlockmask = 0; static void (*handler[LASTEvent]) (XEvent *) = { @@ -318,11 +319,17 @@ int applysizehints( *h = MAX(1, *h); if (interact) { - if (*x > sw) { - *x = sw - client_geometry_total_width(&c->state.geometry); + if (*x > screen_sizes.w) { + *x = + screen_sizes.w + - + client_geometry_total_width(&c->state.geometry); } - if (*y > sh) { - *y = sh - client_geometry_total_height(&c->state.geometry); + if (*y > screen_sizes.h) { + *y = + screen_sizes.h + - + client_geometry_total_height(&c->state.geometry); } if (*x + *w + 2 * bw < 0) { *x = 0; @@ -1017,7 +1024,7 @@ void manage(Window w, XWindowAttributes *wa) XMoveResizeWindow( dpy, c->win, - c->state.geometry.basic.position.x + 2 * sw, + c->state.geometry.basic.position.x + 2 * screen_sizes.w, c->state.geometry.basic.position.y, c->state.geometry.basic.sizes.w, c->state.geometry.basic.sizes.h @@ -1661,10 +1668,10 @@ bool setup() /* init screen */ screen = DefaultScreen(dpy); - sw = DisplayWidth(dpy, screen); - sh = DisplayHeight(dpy, screen); + screen_sizes.w = DisplayWidth(dpy, screen); + screen_sizes.h = DisplayHeight(dpy, screen); root = RootWindow(dpy, screen); - drw = drw_create(dpy, screen, root, sw, sh); + drw = drw_create(dpy, screen, root, screen_sizes.w, screen_sizes.h); if (!drw_fontset_create(drw, fonts, LENGTH(fonts))) die("no fonts could be loaded."); updategeom(); @@ -1978,17 +1985,17 @@ int updategeom() if (!mons) mons = createmon(); if ( - mons->screen_geometry.sizes.w != sw + mons->screen_geometry.sizes.w != screen_sizes.w || - mons->screen_geometry.sizes.h != sh + mons->screen_geometry.sizes.h != screen_sizes.h ) { dirty = 1; mons->screen_geometry.sizes.w = mons->window_area_geometry.sizes.w = - sw; + screen_sizes.w; mons->screen_geometry.sizes.h = mons->window_area_geometry.sizes.h = - sh; + screen_sizes.h; } } if (dirty) { diff --git a/src/dwm/handlers.c b/src/dwm/handlers.c index dbb8548..768c4f8 100644 --- a/src/dwm/handlers.c +++ b/src/dwm/handlers.c @@ -167,9 +167,9 @@ void on_configure_notify(XEvent *e) /* TODO: updategeom handling sucks, needs to be simplified */ if (ev->window == root) { - dirty = (sw != ev->width || sh != ev->height); - sw = ev->width; - sh = ev->height; + dirty = (screen_sizes.w != ev->width || screen_sizes.h != ev->height); + screen_sizes.w = ev->width; + screen_sizes.h = ev->height; if (updategeom() || dirty) { focus(NULL); arrange(NULL);