tabbed

Simple tabbing application for X11.
git clone git://r-36.net/tabbed
Log | Files | Refs | README | LICENSE

commit 5e6ca4f2fcea8a7549138d27da651a5e885f4215
parent aa1c1698e2ab4ff1d58ae4233cef68d4fdca18e0
Author: Enno Boland (tox) <tox@s01.de>
Date:   Tue, 22 Sep 2009 20:17:20 +0200

working on reparenting.
Diffstat:
tabbed.c | 34++++++++++++++++++++--------------
1 file changed, 20 insertions(+), 14 deletions(-)

diff --git a/tabbed.c b/tabbed.c @@ -80,6 +80,7 @@ static void buttonpress(XEvent *e); static void cleanup(void); static void clientmessage(XEvent *e); static void configurenotify(XEvent *e); +static void createnotify(XEvent *e); static void destroynotify(XEvent *e); static void die(const char *errstr, ...); static void drawbar(); @@ -99,6 +100,7 @@ static void spawn(const Arg *arg); static void manage(Window win); static void maprequest(XEvent *e); static void propertynotify(XEvent *e); +static void reparentnotify(XEvent *e); static void resize(Client *c, int w, int h); static void rotate(const Arg *arg); static void run(void); @@ -122,6 +124,8 @@ static void (*handler[LASTEvent]) (XEvent *) = { [KeyPress] = keypress, [Expose] = expose, [ClientMessage] = clientmessage, + [CreateNotify] = createnotify, + [ReparentNotify] = reparentnotify, }; static Display *dpy; static DC dc; @@ -159,7 +163,6 @@ cleanup(void) { XFreeFontSet(dpy, dc.font.set); else XFreeFont(dpy, dc.font.xfont); - puts("aaa"); XFreePixmap(dpy, dc.drawable); XFreeGC(dpy, dc.gc); XDestroyWindow(dpy, win); @@ -171,9 +174,7 @@ clientmessage(XEvent *e) { XClientMessageEvent *ev = &e->xclient; if(ev->message_type == xembedatom) { - puts("message!"); - printf("%ld %ld", ev->data.l[0], ev->data.l[1]); - puts(""); + printf("%ld %ld %ld %ld %ld\n", ev->data.l[0], ev->data.l[1], ev->data.l[2], ev->data.l[3], ev->data.l[4]); } } void @@ -193,6 +194,14 @@ configurenotify(XEvent *e) { } void +createnotify(XEvent *e) { + XCreateWindowEvent *ev = &e->xcreatewindow; + + if(!getclient(ev->window)) + manage(ev->window); +} + +void destroynotify(XEvent *e) { Client *c; XDestroyWindowEvent *ev = &e->xdestroywindow; @@ -514,7 +523,7 @@ manage(Window w) { Client *c; XEvent e; - XSelectInput(dpy, w, StructureNotifyMask | PropertyChangeMask); + XSelectInput(dpy, w, StructureNotifyMask|PropertyChangeMask); XWithdrawWindow(dpy, w, 0); XReparentWindow(dpy, w, win, 0, bh); XSync(dpy, False); @@ -551,13 +560,8 @@ manage(Window w) { } void maprequest(XEvent *e) { - static XWindowAttributes wa; XMapRequestEvent *ev = &e->xmaprequest; - if(!XGetWindowAttributes(dpy, ev->window, &wa)) - return; - if(wa.override_redirect) - return; if(!getclient(ev->window)) manage(ev->window); } @@ -573,6 +577,9 @@ propertynotify(XEvent *e) { } } +void reparentnotify(XEvent *e) { +} + void resize(Client *c, int w, int h) { XConfigureEvent ce; @@ -654,7 +661,7 @@ setup(void) { XSetFont(dpy, dc.gc, dc.font.xfont->fid); win = XCreateSimpleWindow(dpy, root, wx, wy, ww, wh, 0, dc.norm[ColFG], dc.norm[ColBG]); - XSelectInput(dpy, win, StructureNotifyMask|PointerMotionMask| + XSelectInput(dpy, win, PointerMotionMask|SubstructureNotifyMask| ButtonPressMask|ExposureMask|KeyPressMask| LeaveWindowMask|SubstructureRedirectMask); XMapRaised(dpy, win); @@ -735,7 +742,6 @@ int xerror(Display *dpy, XErrorEvent *ee) { if(ee->error_code == BadWindow) { badwindow = True; - puts("badwindow"); return 0; } fprintf(stderr, "tabbed: fatal error: request code=%d, error code=%d\n", @@ -749,8 +755,8 @@ main(int argc, char *argv[]) { int detach = 0; if(argc == 2 && !strcmp("-v", argv[1])) - die("tabbed-"VERSION", © 2006-2008 surf engineers, see LICENSE for details\n"); - else if(argc == 2 && strcmp("-d", argv[1])) + die("tabbed-"VERSION", © 2006-2008 tabbed engineers, see LICENSE for details\n"); + else if(argc == 2 && strcmp("-d", argv[1]) == 0) detach = 1; else if(argc != 1) die("usage: tabbed [-d] [-v]\n");