garbeam@0: /* garbeam@0: * (C)opyright MMVI Anselm R. Garbe garbeam@0: * See LICENSE file for license details. garbeam@0: */ garbeam@0: garbeam@3: #include "config.h" garbeam@2: #include "draw.h" garbeam@2: #include "util.h" garbeam@2: garbeam@0: #include garbeam@0: garbeam@13: #define WM_PROTOCOL_DELWIN 1 garbeam@13: garbeam@18: typedef struct Client Client; garbeam@18: typedef struct Key Key; garbeam@18: typedef enum Align Align; garbeam@18: garbeam@18: enum Align { garbeam@18: NORTH = 0x01, garbeam@18: EAST = 0x02, garbeam@18: SOUTH = 0x04, garbeam@18: WEST = 0x08, garbeam@18: NEAST = NORTH | EAST, garbeam@18: NWEST = NORTH | WEST, garbeam@18: SEAST = SOUTH | EAST, garbeam@18: SWEST = SOUTH | WEST, garbeam@18: CENTER = NEAST | SWEST garbeam@18: }; garbeam@18: garbeam@5: /* atoms */ garbeam@13: enum { WMProtocols, WMDelete, WMLast }; garbeam@0: enum { NetSupported, NetWMName, NetLast }; garbeam@0: garbeam@5: /* cursor */ garbeam@0: enum { CurNormal, CurResize, CurMove, CurInput, CurLast }; garbeam@0: garbeam@5: /* rects */ garbeam@0: enum { RFloat, RGrid, RLast }; garbeam@0: garbeam@0: struct Client { garbeam@0: char name[256]; garbeam@7: char tag[256]; garbeam@5: unsigned int border; garbeam@13: int proto; garbeam@5: Bool fixedsize; garbeam@0: Window win; garbeam@0: Window trans; garbeam@0: Window title; garbeam@0: XSizeHints size; garbeam@0: XRectangle r[RLast]; garbeam@0: Client *next; garbeam@5: Client *snext; garbeam@0: }; garbeam@0: garbeam@8: struct Key { garbeam@8: unsigned long mod; garbeam@8: KeySym keysym; garbeam@14: void (*func)(void *aux); garbeam@14: void *aux; garbeam@8: }; garbeam@8: garbeam@0: extern Display *dpy; garbeam@5: extern Window root, barwin; garbeam@13: extern Atom wm_atom[WMLast], net_atom[NetLast]; garbeam@0: extern Cursor cursor[CurLast]; garbeam@5: extern XRectangle rect, barrect; garbeam@13: extern Bool running, sel_screen, grid; garbeam@5: extern void (*handler[LASTEvent]) (XEvent *); garbeam@0: garbeam@13: extern int screen; garbeam@16: extern char statustext[1024], tag[256]; garbeam@3: garbeam@3: extern Brush brush; garbeam@13: extern Client *clients, *stack; garbeam@3: garbeam@5: /* bar.c */ garbeam@5: extern void draw_bar(); garbeam@5: garbeam@8: /* cmd.c */ garbeam@14: extern void run(void *aux); garbeam@14: extern void quit(void *aux); garbeam@14: extern void kill(void *aux); garbeam@8: garbeam@5: /* client.c */ garbeam@10: extern void manage(Window w, XWindowAttributes *wa); garbeam@13: extern void unmanage(Client *c); garbeam@13: extern Client *getclient(Window w); garbeam@13: extern void focus(Client *c); garbeam@13: extern void update_name(Client *c); garbeam@16: extern void draw_client(Client *c); garbeam@18: extern void resize(Client *c); garbeam@13: garbeam@13: /* event.c */ garbeam@18: extern unsigned int discard_events(long even_mask); garbeam@5: garbeam@8: /* key.c */ garbeam@8: extern void update_keys(); garbeam@9: extern void keypress(XEvent *e); garbeam@8: garbeam@18: /* mouse.c */ garbeam@18: extern void mresize(Client *c); garbeam@18: extern void mmove(Client *c); garbeam@18: garbeam@0: /* wm.c */ garbeam@10: extern int error_handler(Display *dpy, XErrorEvent *error); garbeam@13: extern void send_message(Window w, Atom a, long value); garbeam@13: extern int win_proto(Window w);