added an creatnotify event handler
This commit is contained in:
parent
5a1a2edf0e
commit
83aa110c6f
4 changed files with 56 additions and 40 deletions
62
client.c
62
client.c
|
@ -96,6 +96,14 @@ attach(Client *c) {
|
||||||
clients = c;
|
clients = c;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ban(Client *c) {
|
||||||
|
if (c->isbanned)
|
||||||
|
return;
|
||||||
|
XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y);
|
||||||
|
c->isbanned = True;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
configure(Client *c) {
|
configure(Client *c) {
|
||||||
XConfigureEvent ce;
|
XConfigureEvent ce;
|
||||||
|
@ -298,6 +306,37 @@ togglefloating(const char *arg) {
|
||||||
lt->arrange();
|
lt->arrange();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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
|
void
|
||||||
updatesizehints(Client *c) {
|
updatesizehints(Client *c) {
|
||||||
long msize;
|
long msize;
|
||||||
|
@ -376,26 +415,3 @@ updatetitle(Client *c) {
|
||||||
c->name[sizeof c->name - 1] = '\0';
|
c->name[sizeof c->name - 1] = '\0';
|
||||||
XFree(name.value);
|
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();
|
|
||||||
}
|
|
||||||
|
|
4
dwm.h
4
dwm.h
|
@ -96,6 +96,7 @@ extern Window root, barwin;
|
||||||
|
|
||||||
/* client.c */
|
/* client.c */
|
||||||
void attach(Client *c); /* attaches c to global client list */
|
void attach(Client *c); /* attaches c to global client list */
|
||||||
|
void ban(Client *c); /* bans c */
|
||||||
void configure(Client *c); /* send synthetic configure event */
|
void configure(Client *c); /* send synthetic configure event */
|
||||||
void detach(Client *c); /* detaches c from global client list */
|
void detach(Client *c); /* detaches c from global client list */
|
||||||
void focus(Client *c); /* focus c if visible && !NULL, or focus top visible */
|
void focus(Client *c); /* focus c if visible && !NULL, or focus top visible */
|
||||||
|
@ -104,9 +105,10 @@ void manage(Window w, XWindowAttributes *wa); /* manage new client */
|
||||||
void resize(Client *c, int x, int y,
|
void resize(Client *c, int x, int y,
|
||||||
int w, int h, Bool sizehints); /* resize with given coordinates c*/
|
int w, int h, Bool sizehints); /* resize with given coordinates c*/
|
||||||
void togglefloating(const char *arg); /* toggles sel between floating/tiled state */
|
void togglefloating(const char *arg); /* toggles sel between floating/tiled state */
|
||||||
|
void unban(Client *c); /* unbans c */
|
||||||
|
void unmanage(Client *c); /* destroy c */
|
||||||
void updatesizehints(Client *c); /* update the size hint variables of c */
|
void updatesizehints(Client *c); /* update the size hint variables of c */
|
||||||
void updatetitle(Client *c); /* update the name of c */
|
void updatetitle(Client *c); /* update the name of c */
|
||||||
void unmanage(Client *c); /* destroy c */
|
|
||||||
|
|
||||||
/* draw.c */
|
/* draw.c */
|
||||||
void drawstatus(void); /* draw the bar */
|
void drawstatus(void); /* draw the bar */
|
||||||
|
|
14
event.c
14
event.c
|
@ -224,6 +224,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
|
static void
|
||||||
destroynotify(XEvent *e) {
|
destroynotify(XEvent *e) {
|
||||||
Client *c;
|
Client *c;
|
||||||
|
@ -350,6 +363,7 @@ void (*handler[LASTEvent]) (XEvent *) = {
|
||||||
[ButtonPress] = buttonpress,
|
[ButtonPress] = buttonpress,
|
||||||
[ConfigureRequest] = configurerequest,
|
[ConfigureRequest] = configurerequest,
|
||||||
[ConfigureNotify] = configurenotify,
|
[ConfigureNotify] = configurenotify,
|
||||||
|
[CreateNotify] = createnotify,
|
||||||
[DestroyNotify] = destroynotify,
|
[DestroyNotify] = destroynotify,
|
||||||
[EnterNotify] = enternotify,
|
[EnterNotify] = enternotify,
|
||||||
[LeaveNotify] = leavenotify,
|
[LeaveNotify] = leavenotify,
|
||||||
|
|
16
layout.c
16
layout.c
|
@ -11,22 +11,6 @@ static unsigned int nlayouts = 0;
|
||||||
static unsigned int masterw = MASTERWIDTH;
|
static unsigned int masterw = MASTERWIDTH;
|
||||||
static unsigned int nmaster = NMASTER;
|
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
|
static void
|
||||||
tile(void) {
|
tile(void) {
|
||||||
unsigned int i, n, nx, ny, nw, nh, mw, mh, tw, th;
|
unsigned int i, n, nx, ny, nw, nh, mw, mh, tw, th;
|
||||||
|
|
Loading…
Reference in a new issue