[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.
This commit is contained in:
Adrian Chadd
2022-03-12 21:04:24 -08:00
parent 4162377f10
commit 26cecc8487
4 changed files with 64 additions and 54 deletions

View File

@@ -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->zoomw<c->sizehints.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->zoomw<c->sizehints->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->zoomh<c->sizehints.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->zoomh<c->sizehints->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);
}

View File

@@ -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;

View File

@@ -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)

37
main.c
View File

@@ -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(rw<resizeclient->sizehints.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(rw<resizeclient->sizehints->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(rh<resizeclient->sizehints.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(rh<resizeclient->sizehints->min_height)
rh=resizeclient->sizehints->min_height;
rh+=resizeclient->frameheight;
}
if(rw!=rubberw || rh!=rubberh) {