wmfs/wmfs2/src/wmfs.h
2011-08-31 20:59:17 +02:00

237 lines
4.1 KiB
C

/*
* 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 */
#define ButtonMask (ButtonPressMask | ButtonReleaseMask | ButtonMotionMask)
#define MouseMask (ButtonMask | PointerMotionMask)
#define KeyMask (KeyPressMask | KeyReleaseMask)
typedef unsigned int Flags;
typedef unsigned int Color;
typedef const char* Uicb;
/*
* Structures
*/
typedef struct Geo Geo;
typedef struct Element Element;
typedef struct Infobar Infobar;
typedef struct Barwin Barwin;
typedef struct Scr33n Scr33n;
typedef struct Tag Tag;
typedef struct Client Client;
typedef struct Keybind Keybind;
typedef struct Mousebind Mousebind;
typedef struct Theme Theme;
struct Geo
{
int x, y, w, h;
};
/* Barwin */
struct Barwin
{
Window win;
Drawable dr;
Color fg, bg;
Geo geo;
Flags flags;
void *ptr; /* Special cases */
SLIST_HEAD(, Mousebind) mousebinds;
SLIST_ENTRY(Barwin) next; /* global barwin */
SLIST_ENTRY(Barwin) enext; /* element barwin */
};
/* Infobar's element */
struct Element
{
SLIST_HEAD(, Barwin) bars;
Geo geo;
Infobar *infobar;
int type;
void (*func_init)(Element *e);
void (*func_update)(Element *e);
TAILQ_ENTRY(Element) next;
};
/* Infobar */
struct Infobar
{
Barwin *bar;
Geo geo;
Scr33n *screen;
Theme *theme;
char *elemorder;
TAILQ_HEAD(esub, Element) elements;
SLIST_ENTRY(Infobar) next;
};
/* Screen */
struct Scr33n
{
Geo geo;
Tag *seltag;
int id;
Flags elemupdate;
TAILQ_HEAD(tsub, Tag) tags;
SLIST_HEAD(, Infobar) infobars;
SLIST_ENTRY(Scr33n) next;
};
/* Tag */
struct Tag
{
char *name;
Scr33n *screen;
Flags flags;
Client *sel;
TAILQ_ENTRY(Tag) next;
};
/* Client */
struct Client
{
Tag *tag;
Scr33n *screen;
Geo geo;
Flags flags;
char *title;
Window win;
SLIST_ENTRY(Client) next;
};
/* Config */
struct Keybind
{
unsigned int mod;
KeySym keysym;
void (*func)(Uicb);
Uicb cmd;
SLIST_ENTRY(Keybind) next;
};
struct Mousebind
{
unsigned int button;
Geo area;
bool use_area;
void (*func)(Uicb);
Uicb cmd;
SLIST_ENTRY(Mousebind) next;
};
struct Colpair
{
Color fg, bg;
};
struct Theme
{
char *name;
/* Bars */
struct Colpair bars;
int bars_width;
/* Elements */
struct Colpair tags_n; /* normal */
struct Colpair tags_s; /* selected */
int tags_border_width;
Color tags_border_col;
SLIST_ENTRY(Theme) next;
};
struct Config
{
/* Misc section */
struct
{
char *font;
bool focus_follow_mouse;
bool focus_follow_movement;
bool focus_pointer_click;
} misc;
};
/* Global struct */
struct Wmfs
{
/* X11 stuffs */
Display *dpy;
Window root;
int xscreen, xdepth;
Flags numlockmask;
GC gc;
Atom *net_atom;
bool running;
struct
{
int as, de, width, height;
XFontSet fontset;
} font;
/* Lists heads */
struct
{
SLIST_HEAD(, Scr33n) screen;
SLIST_HEAD(, Client) client;
SLIST_HEAD(, Keybind) keybind;
SLIST_HEAD(, Barwin) barwin;
SLIST_HEAD(, Theme) theme;
} h;
/* Config options */
struct Config conf;
/*
* Selected screen, from what you go everywhere; selected tag,
* and then selected client.
*/
Scr33n *screen;
/* FIFO */
struct
{
FILE *fp;
char *path;
} fifo;
};
int wmfs_error_handler(Display *d, XErrorEvent *event);
int wmfs_error_handler_dummy(Display *d, XErrorEvent *event);
void wmfs_grab_keys(void);
void wmfs_quit(void);
void uicb_reload(Uicb cmd);
void uicb_quit(Uicb cmd);
/* Single global variable */
struct Wmfs *W;
#endif /* WMFS_H */