|
|
|
@ -7,7 +7,7 @@
|
|
|
|
|
|
|
|
|
|
/* static */
|
|
|
|
|
|
|
|
|
|
static char config[128];
|
|
|
|
|
static char prop[128];
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
attachstack(Client *c) {
|
|
|
|
@ -182,23 +182,23 @@ killclient(const char *arg) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Bool
|
|
|
|
|
loadconfig(Client *c) {
|
|
|
|
|
loadprops(Client *c) {
|
|
|
|
|
unsigned int i;
|
|
|
|
|
Bool result = False;
|
|
|
|
|
XTextProperty name;
|
|
|
|
|
|
|
|
|
|
/* check if window has set a property */
|
|
|
|
|
name.nitems = 0;
|
|
|
|
|
XGetTextProperty(dpy, c->win, &name, dwmconfig);
|
|
|
|
|
XGetTextProperty(dpy, c->win, &name, dwmprops);
|
|
|
|
|
if(name.nitems && name.encoding == XA_STRING) {
|
|
|
|
|
strncpy(config, (char *)name.value, sizeof config - 1);
|
|
|
|
|
config[sizeof config - 1] = '\0';
|
|
|
|
|
strncpy(prop, (char *)name.value, sizeof prop - 1);
|
|
|
|
|
prop[sizeof prop - 1] = '\0';
|
|
|
|
|
XFree(name.value);
|
|
|
|
|
for(i = 0; i < ntags && i < sizeof config - 1 && config[i] != '\0'; i++)
|
|
|
|
|
if((c->tags[i] = config[i] == '1'))
|
|
|
|
|
for(i = 0; i < ntags && i < sizeof prop - 1 && prop[i] != '\0'; i++)
|
|
|
|
|
if((c->tags[i] = prop[i] == '1'))
|
|
|
|
|
result = True;
|
|
|
|
|
if(i < sizeof config - 1 && config[i] != '\0')
|
|
|
|
|
c->isfloating = config[i] == '1';
|
|
|
|
|
if(i < sizeof prop - 1 && prop[i] != '\0')
|
|
|
|
|
c->isfloating = prop[i] == '1';
|
|
|
|
|
}
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
@ -249,11 +249,11 @@ manage(Window w, XWindowAttributes *wa) {
|
|
|
|
|
if(t)
|
|
|
|
|
for(i = 0; i < ntags; i++)
|
|
|
|
|
c->tags[i] = t->tags[i];
|
|
|
|
|
if(!loadconfig(c))
|
|
|
|
|
if(!loadprops(c))
|
|
|
|
|
applyrules(c);
|
|
|
|
|
if(!c->isfloating)
|
|
|
|
|
c->isfloating = (rettrans == Success) || c->isfixed;
|
|
|
|
|
saveconfig(c);
|
|
|
|
|
saveprops(c);
|
|
|
|
|
attach(c);
|
|
|
|
|
attachstack(c);
|
|
|
|
|
XMoveResizeWindow(dpy, c->win, c->x, c->y, c->w, c->h); /* some windows require this */
|
|
|
|
@ -325,16 +325,16 @@ resize(Client *c, int x, int y, int w, int h, Bool sizehints) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
saveconfig(Client *c) {
|
|
|
|
|
saveprops(Client *c) {
|
|
|
|
|
unsigned int i;
|
|
|
|
|
|
|
|
|
|
for(i = 0; i < ntags && i < sizeof config - 1; i++)
|
|
|
|
|
config[i] = c->tags[i] ? '1' : '0';
|
|
|
|
|
if(i < sizeof config - 1)
|
|
|
|
|
config[i++] = c->isfloating ? '1' : '0';
|
|
|
|
|
config[i] = '\0';
|
|
|
|
|
XChangeProperty(dpy, c->win, dwmconfig, XA_STRING, 8,
|
|
|
|
|
PropModeReplace, (unsigned char *)config, i);
|
|
|
|
|
for(i = 0; i < ntags && i < sizeof prop - 1; i++)
|
|
|
|
|
prop[i] = c->tags[i] ? '1' : '0';
|
|
|
|
|
if(i < sizeof prop - 1)
|
|
|
|
|
prop[i++] = c->isfloating ? '1' : '0';
|
|
|
|
|
prop[i] = '\0';
|
|
|
|
|
XChangeProperty(dpy, c->win, dwmprops, XA_STRING, 8,
|
|
|
|
|
PropModeReplace, (unsigned char *)prop, i);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|