From 26cecc84872ceb286de42df96b56a5c56b42019b Mon Sep 17 00:00:00 2001 From: Adrian Chadd Date: Sat, 12 Mar 2022 21:04:24 -0800 Subject: [PATCH] [amiwm] Use XAllocSizeHints() for the sizehints in struct Client Although it likely doesn't matter /that/ much, the x11 xlib manual does say to use it rather than expecting the struct to stay the same size. Yeah yeah it's 2022 and we really do build things from source, ICCCM is likely not going to change that much nowdays, etc, etc. --- client.c | 76 ++++++++++++++++++++++++++++++-------------------------- client.h | 3 ++- frame.c | 2 +- main.c | 37 ++++++++++++++------------- 4 files changed, 64 insertions(+), 54 deletions(-) diff --git a/client.c b/client.c index f840aa3..c23c8f5 100644 --- a/client.c +++ b/client.c @@ -129,22 +129,25 @@ void checksizehints(Client *c) { long supplied; - XGetWMNormalHints(dpy, c->window, &c->sizehints, &supplied); - if(!(c->sizehints.flags&PMinSize)) - c->sizehints.min_width=c->sizehints.min_height=0; - if(!(c->sizehints.flags&PMaxSize)) - c->sizehints.max_width=c->sizehints.max_height=1<<30; - if(!(c->sizehints.flags&PResizeInc)) - c->sizehints.width_inc=c->sizehints.height_inc=1; - if(c->sizehints.flags&PBaseSize) { - c->sizehints.min_width=c->sizehints.base_width; - c->sizehints.min_height=c->sizehints.base_height; + XGetWMNormalHints(dpy, c->window, c->sizehints, &supplied); + + + if(!(c->sizehints->flags&PMinSize)) + c->sizehints->min_width=c->sizehints->min_height=0; + if(!(c->sizehints->flags&PMaxSize)) { + c->sizehints->max_width=c->sizehints->max_height=1<<30; } - if(c->sizehints.min_width<1) c->sizehints.min_width=1; - if(c->sizehints.min_height<1) c->sizehints.min_height=1; - c->sizehints.base_width=c->sizehints.min_width; - c->sizehints.base_height=c->sizehints.min_height; - if(c->sizehints.flags&PWinGravity) c->gravity=c->sizehints.win_gravity; + if(!(c->sizehints->flags&PResizeInc)) + c->sizehints->width_inc=c->sizehints->height_inc=1; + if(c->sizehints->flags&PBaseSize) { + c->sizehints->min_width=c->sizehints->base_width; + c->sizehints->min_height=c->sizehints->base_height; + } + if(c->sizehints->min_width<1) c->sizehints->min_width=1; + if(c->sizehints->min_height<1) c->sizehints->min_height=1; + c->sizehints->base_width=c->sizehints->min_width; + c->sizehints->base_height=c->sizehints->min_height; + if(c->sizehints->flags&PWinGravity) c->gravity=c->sizehints->win_gravity; } void setclientstate(Client *c, int state) @@ -183,6 +186,7 @@ Client *createclient(Window w) XGetWindowAttributes(dpy, w, &attr); c = (Client *)calloc(1, sizeof(Client)); + c->sizehints = XAllocSizeHints(); c->scr = scr; c->window = w; c->parent = scr->root; @@ -215,37 +219,37 @@ Client *createclient(Window w) checksizehints(c); c->zoomx=0; c->zoomy=scr->bh; - if ((c->sizehints.width_inc && - c->sizehints.min_width+c->sizehints.width_inc<=c->sizehints.max_width)|| - (c->sizehints.height_inc && - c->sizehints.min_height+c->sizehints.height_inc<=c->sizehints.max_height)) + if ((c->sizehints->width_inc && + c->sizehints->min_width+c->sizehints->width_inc<=c->sizehints->max_width)|| + (c->sizehints->height_inc && + c->sizehints->min_height+c->sizehints->height_inc<=c->sizehints->max_height)) b = prefs.sizeborder; - if(c->sizehints.width_inc) { - c->zoomw=scr->width-c->sizehints.base_width; + if(c->sizehints->width_inc) { + c->zoomw=scr->width-c->sizehints->base_width; if (b & Psizeright) c->zoomw-=22; else c->zoomw-=8; - c->zoomw-=c->zoomw%c->sizehints.width_inc; - c->zoomw+=c->sizehints.base_width; - if(c->zoomw>c->sizehints.max_width) - c->zoomw=c->sizehints.max_width; - if(c->zoomwsizehints.min_width) - c->zoomw=c->sizehints.min_width; + c->zoomw-=c->zoomw%c->sizehints->width_inc; + c->zoomw+=c->sizehints->base_width; + if(c->zoomw>c->sizehints->max_width) + c->zoomw=c->sizehints->max_width; + if(c->zoomwsizehints->min_width) + c->zoomw=c->sizehints->min_width; } else c->zoomw=attr.width; - if(c->sizehints.height_inc) { - c->zoomh=scr->height-c->sizehints.base_height-scr->bh-c->zoomy; + if(c->sizehints->height_inc) { + c->zoomh=scr->height-c->sizehints->base_height-scr->bh-c->zoomy; if (b & Psizebottom) c->zoomh -= 10; else c->zoomh -= 2; - c->zoomh-=c->zoomh%c->sizehints.height_inc; - c->zoomh+=c->sizehints.base_height; - if(c->zoomh>c->sizehints.max_height) - c->zoomh=c->sizehints.max_height; - if(c->zoomhsizehints.min_height) - c->zoomh=c->sizehints.min_height; + c->zoomh-=c->zoomh%c->sizehints->height_inc; + c->zoomh+=c->sizehints->base_height; + if(c->zoomh>c->sizehints->max_height) + c->zoomh=c->sizehints->max_height; + if(c->zoomhsizehints->min_height) + c->zoomh=c->sizehints->min_height; } else c->zoomh=attr.height; XSaveContext(dpy, w, client_context, (XPointer)c); @@ -301,6 +305,8 @@ void rmclient(Client *c) rmicon(c->icon); if(c->window) XDeleteContext(dpy, c->window, client_context); + if (c->sizehints) + XFree(c->sizehints); free(c); } diff --git a/client.h b/client.h index 0754eec..2c9560b 100644 --- a/client.h +++ b/client.h @@ -25,7 +25,8 @@ typedef struct _Client { #else XTextProperty title; #endif - XSizeHints sizehints; + /* This needs to be a pointer! */ + XSizeHints *sizehints; struct _Style *style; } Client; diff --git a/frame.c b/frame.c index ddbdd4e..9b9c003 100644 --- a/frame.c +++ b/frame.c @@ -249,7 +249,7 @@ void reparent(Client *c) for(kg=keygrabs; kg; kg=kg->next) XGrabKey(dpy, kg->keycode, kg->modifiers, c->window, False, GrabModeAsync, GrabModeAsync); - cb=(resizable(&c->sizehints)? prefs.sizeborder:0); + cb=(resizable(c->sizehints)? prefs.sizeborder:0); c->close=creategadget(c, c->parent, 0, 0, 19, scr->bh); c->drag=creategadget(c, c->parent, 19, 0, 1, 1); if(c->wflags&WF_NOICONIFY) diff --git a/main.c b/main.c index c467527..dc84fc7 100644 --- a/main.c +++ b/main.c @@ -1003,9 +1003,12 @@ int main(int argc, char *argv[]) } break; case CreateNotify: + if(!XFindContext(dpy, event.xcreatewindow.window, client_context, - (XPointer *)&c)) + (XPointer *)&c)) { break; + } + if(!event.xcreatewindow.override_redirect) { if(!(scr=getscreenbyroot(event.xcreatewindow.parent))) scr=front; @@ -1429,26 +1432,26 @@ int main(int argc, char *argv[]) } else if(resizeclient) { int rw=rubberw, rh=rubberh; scr=resizeclient->scr; - if(resizeclient->sizehints.width_inc) { - rw=motionx-rubberx0-resizeclient->sizehints.base_width- + if(resizeclient->sizehints->width_inc) { + rw=motionx-rubberx0-resizeclient->sizehints->base_width- resizeclient->framewidth; - rw-=rw%resizeclient->sizehints.width_inc; - rw+=resizeclient->sizehints.base_width; - if(rw>resizeclient->sizehints.max_width) - rw=resizeclient->sizehints.max_width; - if(rwsizehints.min_width) - rw=resizeclient->sizehints.min_width; + rw-=rw%resizeclient->sizehints->width_inc; + rw+=resizeclient->sizehints->base_width; + if(rw>resizeclient->sizehints->max_width) + rw=resizeclient->sizehints->max_width; + if(rwsizehints->min_width) + rw=resizeclient->sizehints->min_width; rw+=resizeclient->framewidth; } - if(resizeclient->sizehints.height_inc) { - rh=motiony-rubbery0-resizeclient->sizehints.base_height- + if(resizeclient->sizehints->height_inc) { + rh=motiony-rubbery0-resizeclient->sizehints->base_height- resizeclient->frameheight; - rh-=rh%resizeclient->sizehints.height_inc; - rh+=resizeclient->sizehints.base_height; - if(rh>resizeclient->sizehints.max_height) - rh=resizeclient->sizehints.max_height; - if(rhsizehints.min_height) - rh=resizeclient->sizehints.min_height; + rh-=rh%resizeclient->sizehints->height_inc; + rh+=resizeclient->sizehints->base_height; + if(rh>resizeclient->sizehints->max_height) + rh=resizeclient->sizehints->max_height; + if(rhsizehints->min_height) + rh=resizeclient->sizehints->min_height; rh+=resizeclient->frameheight; } if(rw!=rubberw || rh!=rubberh) {