Use structure for screen sizes

This commit is contained in:
Alex Kotov 2021-11-21 03:01:13 +05:00
parent 7bb6abbacd
commit bb17fab590
Signed by: kotovalexarian
GPG Key ID: 553C0EBBEB5D5F08
2 changed files with 23 additions and 16 deletions

View File

@ -222,10 +222,11 @@ static void zoom(const Arg *arg);
* variables * * variables *
*************/ *************/
static struct Sizes screen_sizes = { 0, 0 };
static Unit global_unit = NULL; static Unit global_unit = NULL;
static const char broken[] = "broken"; static const char broken[] = "broken";
static int screen; static int screen;
static int sw, sh; /* X display screen geometry width, height */
static int (*xerrorxlib)(Display *, XErrorEvent *); static int (*xerrorxlib)(Display *, XErrorEvent *);
static unsigned int numlockmask = 0; static unsigned int numlockmask = 0;
static void (*handler[LASTEvent]) (XEvent *) = { static void (*handler[LASTEvent]) (XEvent *) = {
@ -318,11 +319,17 @@ int applysizehints(
*h = MAX(1, *h); *h = MAX(1, *h);
if (interact) { if (interact) {
if (*x > sw) { if (*x > screen_sizes.w) {
*x = sw - client_geometry_total_width(&c->state.geometry); *x =
screen_sizes.w
-
client_geometry_total_width(&c->state.geometry);
} }
if (*y > sh) { if (*y > screen_sizes.h) {
*y = sh - client_geometry_total_height(&c->state.geometry); *y =
screen_sizes.h
-
client_geometry_total_height(&c->state.geometry);
} }
if (*x + *w + 2 * bw < 0) { if (*x + *w + 2 * bw < 0) {
*x = 0; *x = 0;
@ -1017,7 +1024,7 @@ void manage(Window w, XWindowAttributes *wa)
XMoveResizeWindow( XMoveResizeWindow(
dpy, dpy,
c->win, 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.position.y,
c->state.geometry.basic.sizes.w, c->state.geometry.basic.sizes.w,
c->state.geometry.basic.sizes.h c->state.geometry.basic.sizes.h
@ -1661,10 +1668,10 @@ bool setup()
/* init screen */ /* init screen */
screen = DefaultScreen(dpy); screen = DefaultScreen(dpy);
sw = DisplayWidth(dpy, screen); screen_sizes.w = DisplayWidth(dpy, screen);
sh = DisplayHeight(dpy, screen); screen_sizes.h = DisplayHeight(dpy, screen);
root = RootWindow(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))) if (!drw_fontset_create(drw, fonts, LENGTH(fonts)))
die("no fonts could be loaded."); die("no fonts could be loaded.");
updategeom(); updategeom();
@ -1978,17 +1985,17 @@ int updategeom()
if (!mons) if (!mons)
mons = createmon(); mons = createmon();
if ( 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; dirty = 1;
mons->screen_geometry.sizes.w = mons->screen_geometry.sizes.w =
mons->window_area_geometry.sizes.w = mons->window_area_geometry.sizes.w =
sw; screen_sizes.w;
mons->screen_geometry.sizes.h = mons->screen_geometry.sizes.h =
mons->window_area_geometry.sizes.h = mons->window_area_geometry.sizes.h =
sh; screen_sizes.h;
} }
} }
if (dirty) { if (dirty) {

View File

@ -167,9 +167,9 @@ void on_configure_notify(XEvent *e)
/* TODO: updategeom handling sucks, needs to be simplified */ /* TODO: updategeom handling sucks, needs to be simplified */
if (ev->window == root) { if (ev->window == root) {
dirty = (sw != ev->width || sh != ev->height); dirty = (screen_sizes.w != ev->width || screen_sizes.h != ev->height);
sw = ev->width; screen_sizes.w = ev->width;
sh = ev->height; screen_sizes.h = ev->height;
if (updategeom() || dirty) { if (updategeom() || dirty) {
focus(NULL); focus(NULL);
arrange(NULL); arrange(NULL);