X-Git-Url: https://git.danieliu.xyz/?a=blobdiff_plain;f=wm.c;h=b156cba8badf43e26e354d8519d735292ee8ee54;hb=33996500763b04119a6867dfa4040a4236c21a41;hp=038e6b9b9971bf2b564708a010459d39e064f3a1;hpb=366d81e313e6dd4e9e6c61ed8dfca4b4b40ccde6;p=dwm.git diff --git a/wm.c b/wm.c index 038e6b9..b156cba 100644 --- a/wm.c +++ b/wm.c @@ -20,19 +20,18 @@ Atom wm_atom[WMLast], net_atom[NetLast]; Cursor cursor[CurLast]; XRectangle rect, barrect; Bool running = True; -Client *client = NULL; +Bool sel_screen; char *bartext, tag[256]; -int screen, sel_screen; +int screen; -/* draw structs */ Brush brush = {0}; - -enum { WM_PROTOCOL_DELWIN = 1 }; +Client *clients = NULL; +Client *stack = NULL; static Bool other_wm_running; -static int (*x_error_handler) (Display *, XErrorEvent *); static char version[] = "gridwm - " VERSION ", (C)opyright MMVI Anselm R. Garbe\n"; +static int (*x_error_handler) (Display *, XErrorEvent *); static void usage() @@ -56,7 +55,7 @@ scan_wins() if(wa.override_redirect || XGetTransientForHint(dpy, wins[i], &d1)) continue; if(wa.map_state == IsViewable) - manage(create_client(wins[i], &wa)); + manage(wins[i], &wa); } } if(wins) @@ -74,11 +73,12 @@ win_property(Window w, Atom a, Atom t, long l, unsigned char **prop) status = XGetWindowProperty(dpy, w, a, 0L, l, False, t, &real, &format, &res, &extra, prop); - if(status != Success || *prop == NULL) { + if(status != Success || *prop == 0) { return 0; } - if(res == 0) + if(res == 0) { free((void *) *prop); + } return res; } @@ -103,13 +103,28 @@ win_proto(Window w) return protos; } +void +send_message(Window w, Atom a, long value) +{ + XEvent e; + + e.type = ClientMessage; + e.xclient.window = w; + e.xclient.message_type = a; + e.xclient.format = 32; + e.xclient.data.l[0] = value; + e.xclient.data.l[1] = CurrentTime; + XSendEvent(dpy, w, False, NoEventMask, &e); + XFlush(dpy); +} + /* * There's no way to check accesses to destroyed windows, thus * those cases are ignored (especially on UnmapNotify's). * Other types of errors call Xlib's default error handler, which * calls exit(). */ -static int +int error_handler(Display *dpy, XErrorEvent *error) { if(error->error_code == BadWindow @@ -201,7 +216,6 @@ main(int argc, char *argv[]) x_error_handler = XSetErrorHandler(error_handler); /* init atoms */ - wm_atom[WMState] = XInternAtom(dpy, "WM_STATE", False); wm_atom[WMProtocols] = XInternAtom(dpy, "WM_PROTOCOLS", False); wm_atom[WMDelete] = XInternAtom(dpy, "WM_DELETE_WINDOW", False); net_atom[NetSupported] = XInternAtom(dpy, "_NET_SUPPORTED", False); @@ -242,7 +256,8 @@ main(int argc, char *argv[]) XMapRaised(dpy, barwin); draw_bar(); - wa.event_mask = SubstructureRedirectMask | EnterWindowMask | LeaveWindowMask; + wa.event_mask = SubstructureRedirectMask | EnterWindowMask \ + | LeaveWindowMask; wa.cursor = cursor[CurNormal]; XChangeWindowAttributes(dpy, root, CWEventMask | CWCursor, &wa);