aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--main.c27
-rw-r--r--screen.c6
2 files changed, 29 insertions, 4 deletions
diff --git a/main.c b/main.c
index b56e333..79b301d 100644
--- a/main.c
+++ b/main.c
@@ -111,6 +111,24 @@ initfont(const char *fontstr) {
dc.font.height = dc.font.ascent + dc.font.descent;
}
+static long
+getstate(Window w) {
+ int format, status;
+ long result = -1;
+ unsigned char *p = NULL;
+ unsigned long n, extra;
+ Atom real;
+
+ status = XGetWindowProperty(dpy, w, wmatom[WMState], 0L, 2L, False, wmatom[WMState],
+ &real, &format, &n, &extra, (unsigned char **)&p);
+ if(status != Success)
+ return -1;
+ if(n != 0)
+ result = *p;
+ XFree(p);
+ return result;
+}
+
static void
scan(void) {
unsigned int i, num;
@@ -123,7 +141,14 @@ scan(void) {
if(!XGetWindowAttributes(dpy, wins[i], &wa)
|| wa.override_redirect || XGetTransientForHint(dpy, wins[i], &d1))
continue;
- if(wa.map_state == IsViewable)
+ if(wa.map_state == IsViewable || getstate(wins[i]) == IconicState)
+ manage(wins[i], &wa);
+ }
+ for(i = 0; i < num; i++) { /* now the transients */
+ if(!XGetWindowAttributes(dpy, wins[i], &wa))
+ continue;
+ if(XGetTransientForHint(dpy, wins[i], &d1)
+ && (wa.map_state == IsViewable || getstate(wins[i]) == IconicState))
manage(wins[i], &wa);
}
}
diff --git a/screen.c b/screen.c
index 022633b..a8b093c 100644
--- a/screen.c
+++ b/screen.c
@@ -60,7 +60,7 @@ setdwmprops(void) {
for(i = 0; i < ntags && i < sizeof prop - 1; i++)
prop[i] = seltags[i] ? '1' : '0';
if(i < sizeof prop - 1)
- prop[i++] = (char)ltidx;
+ prop[i++] = (char)ltidx + '0';
prop[i] = '\0';
XChangeProperty(dpy, root, dwmprops, XA_STRING, 8,
PropModeReplace, (unsigned char *)prop, i);
@@ -223,8 +223,8 @@ getdwmprops(void) {
for(i = 0; i < ntags && i < sizeof prop - 1 && prop[i] != '\0'; i++)
seltags[i] = prop[i] == '1';
if(i < sizeof prop - 1 && prop[i] != '\0') {
- if(prop[i] < nlayouts)
- ltidx = prop[i];
+ if((unsigned int)(prop[i] - '0') < nlayouts)
+ ltidx = prop[i] - '0';
}
}
}