mirror of
https://github.com/amiwm/amiwm.git
synced 2026-04-14 11:04:18 +00:00
[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:
76
client.c
76
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->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);
|
||||
}
|
||||
|
||||
|
||||
3
client.h
3
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;
|
||||
|
||||
|
||||
2
frame.c
2
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)
|
||||
|
||||
37
main.c
37
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(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) {
|
||||
|
||||
Reference in New Issue
Block a user