tadded an creatnotify event handler - dwm - [fork] customized build of dwm, the… | |
git clone git://src.adamsgaard.dk/dwm | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 83aa110c6fabbf5f5a14b698a6ca22072cb80629 | |
parent 5a1a2edf0e584e660e16d2e01094851e0f9161e2 | |
Author: Anselm R. Garbe <[email protected]> | |
Date: Mon, 4 Jun 2007 11:50:48 +0200 | |
added an creatnotify event handler | |
Diffstat: | |
M client.c | 62 +++++++++++++++++++----------… | |
M dwm.h | 4 +++- | |
M event.c | 14 ++++++++++++++ | |
M layout.c | 16 ---------------- | |
4 files changed, 56 insertions(+), 40 deletions(-) | |
--- | |
diff --git a/client.c b/client.c | |
t@@ -97,6 +97,14 @@ attach(Client *c) { | |
} | |
void | |
+ban(Client *c) { | |
+ if (c->isbanned) | |
+ return; | |
+ XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y); | |
+ c->isbanned = True; | |
+} | |
+ | |
+void | |
configure(Client *c) { | |
XConfigureEvent ce; | |
t@@ -299,6 +307,37 @@ togglefloating(const char *arg) { | |
} | |
void | |
+unban(Client *c) { | |
+ if (!c->isbanned) | |
+ return; | |
+ XMoveWindow(dpy, c->win, c->x, c->y); | |
+ c->isbanned = False; | |
+} | |
+ | |
+void | |
+unmanage(Client *c) { | |
+ XWindowChanges wc; | |
+ | |
+ wc.border_width = c->oldborder; | |
+ /* The server grab construct avoids race conditions. */ | |
+ XGrabServer(dpy); | |
+ XSetErrorHandler(xerrordummy); | |
+ XConfigureWindow(dpy, c->win, CWBorderWidth, &wc); /* restore border */ | |
+ detach(c); | |
+ detachstack(c); | |
+ if(sel == c) | |
+ focus(NULL); | |
+ XUngrabButton(dpy, AnyButton, AnyModifier, c->win); | |
+ setclientstate(c, WithdrawnState); | |
+ free(c->tags); | |
+ free(c); | |
+ XSync(dpy, False); | |
+ XSetErrorHandler(xerror); | |
+ XUngrabServer(dpy); | |
+ lt->arrange(); | |
+} | |
+ | |
+void | |
updatesizehints(Client *c) { | |
long msize; | |
XSizeHints size; | |
t@@ -376,26 +415,3 @@ updatetitle(Client *c) { | |
c->name[sizeof c->name - 1] = '\0'; | |
XFree(name.value); | |
} | |
- | |
-void | |
-unmanage(Client *c) { | |
- XWindowChanges wc; | |
- | |
- wc.border_width = c->oldborder; | |
- /* The server grab construct avoids race conditions. */ | |
- XGrabServer(dpy); | |
- XSetErrorHandler(xerrordummy); | |
- XConfigureWindow(dpy, c->win, CWBorderWidth, &wc); /* restore border */ | |
- detach(c); | |
- detachstack(c); | |
- if(sel == c) | |
- focus(NULL); | |
- XUngrabButton(dpy, AnyButton, AnyModifier, c->win); | |
- setclientstate(c, WithdrawnState); | |
- free(c->tags); | |
- free(c); | |
- XSync(dpy, False); | |
- XSetErrorHandler(xerror); | |
- XUngrabServer(dpy); | |
- lt->arrange(); | |
-} | |
diff --git a/dwm.h b/dwm.h | |
t@@ -96,6 +96,7 @@ extern Window root, barwin; | |
/* client.c */ | |
void attach(Client *c); /* attaches c to global client … | |
+void ban(Client *c); /* bans c */ | |
void configure(Client *c); /* send synthetic configure event */ | |
void detach(Client *c); /* detaches c from global clien… | |
void focus(Client *c); /* focus c if visible && !NULL, … | |
t@@ -104,9 +105,10 @@ void manage(Window w, XWindowAttributes *wa); /* m… | |
void resize(Client *c, int x, int y, | |
int w, int h, Bool sizehints); /* resize with given coo… | |
void togglefloating(const char *arg); /* toggles sel between floating/t… | |
+void unban(Client *c); /* unbans c */ | |
+void unmanage(Client *c); /* destroy c */ | |
void updatesizehints(Client *c); /* update the size hint variables of c… | |
void updatetitle(Client *c); /* update the name of c */ | |
-void unmanage(Client *c); /* destroy c */ | |
/* draw.c */ | |
void drawstatus(void); /* draw the bar */ | |
diff --git a/event.c b/event.c | |
t@@ -225,6 +225,19 @@ configurenotify(XEvent *e) { | |
} | |
static void | |
+createnotify(XEvent *e) { | |
+ static XWindowAttributes wa; | |
+ XCreateWindowEvent *ev = &e->xcreatewindow; | |
+ | |
+ if(!XGetWindowAttributes(dpy, ev->window, &wa)) | |
+ return; | |
+ if(wa.override_redirect) | |
+ return; | |
+ if(!getclient(ev->window) && (wa.map_state == IsViewable)) | |
+ manage(ev->window, &wa); | |
+} | |
+ | |
+static void | |
destroynotify(XEvent *e) { | |
Client *c; | |
XDestroyWindowEvent *ev = &e->xdestroywindow; | |
t@@ -350,6 +363,7 @@ void (*handler[LASTEvent]) (XEvent *) = { | |
[ButtonPress] = buttonpress, | |
[ConfigureRequest] = configurerequest, | |
[ConfigureNotify] = configurenotify, | |
+ [CreateNotify] = createnotify, | |
[DestroyNotify] = destroynotify, | |
[EnterNotify] = enternotify, | |
[LeaveNotify] = leavenotify, | |
diff --git a/layout.c b/layout.c | |
t@@ -12,22 +12,6 @@ static unsigned int masterw = MASTERWIDTH; | |
static unsigned int nmaster = NMASTER; | |
static void | |
-ban(Client *c) { | |
- if (c->isbanned) | |
- return; | |
- XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y); | |
- c->isbanned = True; | |
-} | |
- | |
-static void | |
-unban(Client *c) { | |
- if (!c->isbanned) | |
- return; | |
- XMoveWindow(dpy, c->win, c->x, c->y); | |
- c->isbanned = False; | |
-} | |
- | |
-static void | |
tile(void) { | |
unsigned int i, n, nx, ny, nw, nh, mw, mh, tw, th; | |
Client *c; |