123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373 |
- /*
- * wmfs2 by Martin Duquesnoy <xorg62@gmail.com> { for(i = 2011; i < 2111; ++i) ©(i); }
- * For license, see COPYING.
- */
- #ifndef WMFS_H
- #define WMFS_H
- /* Standard */
- #include <stdio.h>
- #include <stdlib.h>
- #include <stdbool.h>
- #include <stdarg.h>
- #include <signal.h>
- #include <unistd.h>
- #include <locale.h>
- #include <err.h>
- #include <sys/queue.h>
- /* Xlib */
- #include <X11/Xlib.h>
- #include <X11/Xatom.h>
- /* Local */
- #include "log.h"
- #define CONFIG_DEFAULT_PATH ".config/wmfs/wmfsrc"
- #define ButtonMask (ButtonPressMask | ButtonReleaseMask | ButtonMotionMask)
- #define MouseMask (ButtonMask | PointerMotionMask)
- #define KeyMask (KeyPressMask | KeyReleaseMask)
- typedef unsigned long Flags;
- typedef unsigned int Color;
- typedef const char* Uicb;
- enum barpos
- {
- BarTop = 0,
- BarBottom,
- BarHide,
- BarLast
- };
- enum position
- {
- Right = 0,
- Left,
- Top,
- Bottom,
- Center,
- NoAlign,
- PositionLast
- };
- enum size_hints
- {
- BASEW, BASEH,
- INCW, INCH,
- MAXW, MAXH,
- MINW, MINH,
- MINAX, MINAY,
- MAXAX, MAXAY,
- SHLAST
- };
- /*
- * Structures
- */
- struct geo
- {
- int x, y, w, h;
- };
- struct geo_list
- {
- struct geo geo;
- SLIST_ENTRY(geo_list) next;
- };
- struct colpair
- {
- Color fg, bg;
- };
- struct barwin
- {
- struct geo geo;
- Window win;
- Drawable dr;
- Color fg, bg;
- void *ptr; /* Special cases */
- SLIST_HEAD(mbhead, mousebind) mousebinds;
- SLIST_HEAD(, mousebind) statusmousebinds;
- SLIST_ENTRY(barwin) next; /* global barwin */
- SLIST_ENTRY(barwin) enext; /* element barwin */
- };
- struct status_seq
- {
- struct geo geo;
- enum position align;
- char type;
- char *str;
- Color color;
- SLIST_HEAD(, mousebind) mousebinds;
- SLIST_ENTRY(status_seq) next;
- };
- struct status_ctx
- {
- struct barwin *barwin;
- struct theme *theme;
- char *status;
- SLIST_HEAD(, status_seq) statushead;
- };
- struct element
- {
- struct geo geo;
- struct infobar *infobar;
- struct status_ctx *statusctx;
- int type;
- enum position align;
- void (*func_init)(struct element *e);
- void (*func_update)(struct element *e);
- SLIST_HEAD(, barwin) bars;
- TAILQ_ENTRY(element) next;
- };
- struct infobar
- {
- struct barwin *bar;
- struct geo geo;
- struct screen *screen;
- struct theme *theme;
- struct status_ctx statusctx;
- enum barpos pos;
- char *elemorder;
- char *name;
- char *status;
- TAILQ_HEAD(esub, element) elements;
- SLIST_ENTRY(infobar) next;
- };
- struct screen
- {
- struct geo geo, ugeo;
- struct tag *seltag;
- int id;
- Flags elemupdate;
- TAILQ_HEAD(tsub, tag) tags;
- SLIST_HEAD(, infobar) infobars;
- SLIST_ENTRY(screen) next;
- };
- SLIST_HEAD(chead, client);
- struct tag
- {
- struct screen *screen;
- struct client *sel;
- struct client *prevsel;
- struct tag *prev;
- char *name;
- int id;
- Flags flags;
- SLIST_HEAD(, client) clients;
- TAILQ_HEAD(ssub, layout_set) sets;
- TAILQ_ENTRY(tag) next;
- };
- struct client
- {
- struct tag *tag, *prevtag;
- struct screen *screen;
- struct barwin *titlebar;
- struct geo geo, wgeo, tgeo, ttgeo, rgeo, *tbgeo;
- struct colpair ncol, scol;
- struct theme *theme;
- struct client *tabmaster;
- int sizeh[SHLAST];
- char *title;
- int border, tbarw;
- #define CLIENT_HINT_FLAG 0x01
- #define CLIENT_IGNORE_ENTER 0x02
- #define CLIENT_DID_WINSIZE 0x04
- #define CLIENT_FAC_APPLIED 0x08
- #define CLIENT_IGNORE_LAYOUT 0x10
- #define CLIENT_RULED 0x20
- #define CLIENT_TABBED 0x40
- #define CLIENT_TABMASTER 0x80
- #define CLIENT_DYING 0x100 /* Saddest flag ever */
- #define CLIENT_REMOVEALL 0x200
- #define CLIENT_MAPPED 0x400
- #define CLIENT_FULLSCREEN 0x800
- Flags flags;
- Window win, frame, tmp;
- SLIST_ENTRY(client) next; /* Global list */
- SLIST_ENTRY(client) tnext; /* struct tag list */
- };
- struct layout_set
- {
- int n;
- SLIST_HEAD(, geo_list) geos;
- TAILQ_ENTRY(layout_set) next;
- };
- struct keybind
- {
- unsigned int mod;
- void (*func)(Uicb);
- Uicb cmd;
- KeySym keysym;
- SLIST_ENTRY(keybind) next;
- };
- struct mousebind
- {
- struct geo area;
- unsigned int button;
- bool use_area;
- void (*func)(Uicb);
- Uicb cmd;
- SLIST_ENTRY(mousebind) next;
- SLIST_ENTRY(mousebind) snext;
- SLIST_ENTRY(mousebind) globnext;
- };
- struct theme
- {
- char *name;
- /* Font */
- struct
- {
- int as, de, width, height;
- XFontSet fontset;
- } font;
- /* Bars */
- struct colpair bars;
- int bars_width;
- /* struct elements */
- struct colpair tags_n, tags_s, tags_o; /* normal / selected / occupied */
- struct status_ctx tags_n_sl, tags_s_sl, tags_o_sl; /* status line */
- int tags_border_width;
- Color tags_border_col;
- /* client / frame */
- struct colpair client_n, client_s;
- struct status_ctx client_n_sl, client_s_sl;
- Color frame_bg;
- int client_titlebar_width;
- int client_border_width;
- SLIST_ENTRY(theme) next;
- };
- struct rule
- {
- struct theme *theme;
- char *class;
- char *instance;
- char *role;
- char *name;
- int tag, screen;
- #define RULE_FREE 0x01
- #define RULE_MAX 0x02
- #define RULE_IGNORE_TAG 0x04
- Flags flags;
- SLIST_ENTRY(rule) next;
- };
- struct _systray
- {
- struct geo geo;
- Window win;
- SLIST_ENTRY(_systray) next;
- };
- #define MAX_PATH_LEN 8192
- struct wmfs
- {
- /* X11 stuffs */
- Display *dpy;
- Window root;
- int xscreen, xdepth;
- int xmaxw, xmaxh;
- int nscreen;
- Flags numlockmask;
- #define WMFS_SCAN 0x01
- #define WMFS_RUNNING 0x02
- #define WMFS_RELOAD 0x04
- #define WMFS_SYSTRAY 0x08
- #define WMFS_LOG 0x10
- Flags flags;
- GC gc, rgc;
- Atom *net_atom;
- char **argv;
- char confpath[MAX_PATH_LEN];
- struct barwin *last_clicked_barwin;
- /* FIFO stuffs */
- struct
- {
- char *path;
- int fd;
- } fifo;
- /* Log file */
- FILE *log;
- /* Lists heads */
- struct
- {
- SLIST_HEAD(, screen) screen;
- SLIST_HEAD(, client) client;
- SLIST_HEAD(, keybind) keybind;
- SLIST_HEAD(, barwin) barwin;
- SLIST_HEAD(, theme) theme;
- SLIST_HEAD(, rule) rule;
- SLIST_HEAD(, mousebind) mousebind;
- } h;
- /*
- * Temporary head of mousebind list from config
- * Will be copied in barwin of clickable drawable
- * later in code
- */
- struct
- {
- struct mbhead tag;
- struct mbhead client;
- struct mbhead root;
- } tmp_head;
- /*
- * Because there is only one systray per display,
- * set struct there
- */
- struct
- {
- struct barwin *barwin;
- Window win;
- SLIST_HEAD(, _systray) head;
- } systray;
- /*
- * Selected screen, client
- */
- struct screen *screen;
- struct client *client;
- };
- int wmfs_error_handler(Display *d, XErrorEvent *event);
- int wmfs_error_handler_dummy(Display *d, XErrorEvent *event);
- void wmfs_grab_keys(void);
- void wmfs_numlockmask(void);
- void wmfs_init_font(char *font, struct theme *t);
- void wmfs_quit(void);
- void uicb_reload(Uicb cmd);
- void uicb_quit(Uicb cmd);
- /* Single global variable */
- struct wmfs *W;
- #endif /* WMFS_H */
|