commit 9bd43db63a9bf890cb6ed170796c0dc7002aae8e
parent b8139e44db0fcd6f1858e1eec00daeec93838de5
Author: Enno Boland (tox) <tox@s01.de>
Date: Tue, 8 Sep 2009 07:34:15 +0200
reparenting works.
Diffstat:
1 file changed, 17 insertions(+), 2 deletions(-)
diff --git a/tabbed.c b/tabbed.c
@@ -83,6 +83,7 @@ static void run(void);
static void setup(void);
static int textnw(const char *text, unsigned int len);
static void updatenumlockmask(void);
+static int xerror(Display *dpy, XErrorEvent *ee);
/* variables */
static int screen;
@@ -261,8 +262,9 @@ spawntab(const Arg *arg) {
}
void
-reparent(Window win) {
- puts("reparent window");
+reparent(Window w) {
+ XSync(dpy, False);
+ XReparentWindow(dpy, w, win, 0, 0);
}
void
@@ -361,6 +363,7 @@ setup(void) {
ButtonPressMask|ExposureMask|KeyPressMask|
LeaveWindowMask);
XMapRaised(dpy, win);
+ XSetErrorHandler(xerror);
}
int
@@ -394,6 +397,18 @@ updatenumlockmask(void) {
XFreeModifiermap(modmap);
}
+/* There's no way to check accesses to destroyed windows, thus those cases are
+ * ignored (especially on UnmapNotify's). Other types of errors call Xlibs
+ * default error handler, which may call exit. */
+int
+xerror(Display *dpy, XErrorEvent *ee) {
+ if(ee->error_code == BadWindow)
+ return 0;
+ die("dwm: fatal error: request code=%d, error code=%d\n",
+ ee->request_code, ee->error_code);
+ return 1;
+}
+
int
main(int argc, char *argv[]) {
if(argc == 2 && !strcmp("-v", argv[1]))