aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--calmwm.h578
1 files changed, 269 insertions, 309 deletions
diff --git a/calmwm.h b/calmwm.h
index 0f9b18b..96cf9dc 100644
--- a/calmwm.h
+++ b/calmwm.h
@@ -15,7 +15,7 @@
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*
- * $Id: calmwm.h,v 1.122 2011/03/22 10:57:31 okan Exp $
+ * $Id: calmwm.h,v 1.123 2011/05/05 16:40:37 okan Exp $
*/
#ifndef _CALMWM_H_
@@ -31,13 +31,15 @@
#include <X11/extensions/Xrandr.h>
#include <X11/keysym.h>
-#define CALMWM_MAXNAMELEN 256
-
#undef MIN
#undef MAX
#define MIN(x, y) ((x) < (y) ? (x) : (y))
#define MAX(x, y) ((x) > (y) ? (x) : (y))
+#ifndef nitems
+#define nitems(_a) (sizeof((_a)) / sizeof((_a)[0]))
+#endif
+
#define CONFFILE ".cwmrc"
#define WMNAME "CWM"
@@ -51,9 +53,34 @@
PointerMotionMask)
#define SearchMask (KeyPressMask|ExposureMask)
-#ifndef nitems
-#define nitems(_a) (sizeof((_a)) / sizeof((_a)[0]))
-#endif
+/* kb movement */
+#define CWM_MOVE 0x0001
+#define CWM_RESIZE 0x0002
+#define CWM_PTRMOVE 0x0004
+#define CWM_BIGMOVE 0x0008
+#define CWM_UP 0x0010
+#define CWM_DOWN 0x0020
+#define CWM_LEFT 0x0040
+#define CWM_RIGHT 0x0080
+
+/* exec */
+#define CWM_EXEC_PROGRAM 0x0001
+#define CWM_EXEC_WM 0x0002
+
+/* client cycle */
+#define CWM_CYCLE 0x0001
+#define CWM_RCYCLE 0x0002
+
+/* group cycle */
+#define CWM_CYCLEGROUP 0x0001
+#define CWM_RCYCLEGROUP 0x0002
+
+#define KBTOGROUP(X) ((X) - 1)
+
+union arg {
+ char *c;
+ int i;
+};
enum cwmcolor {
CWM_COLOR_BORDOR_ACTIVE,
@@ -69,6 +96,7 @@ struct color {
unsigned long pixel;
char *name;
};
+
struct gap {
int top;
int bottom;
@@ -76,175 +104,124 @@ struct gap {
int right;
};
-struct client_ctx;
-
-TAILQ_HEAD(cycle_entry_q, client_ctx);
-TAILQ_HEAD(group_ctx_q, group_ctx);
-TAILQ_HEAD(client_ctx_q, client_ctx);
-
-#define CALMWM_NGROUPS 9
-struct group_ctx {
- TAILQ_ENTRY(group_ctx) entry;
- struct client_ctx_q clients;
- int shortcut;
- int hidden;
- int nhidden;
- int highstack;
-};
-
-struct screen_ctx {
- TAILQ_ENTRY(screen_ctx) entry;
-
- u_int which;
- Window rootwin;
- Window menuwin;
-
- struct color color[CWM_COLOR_MAX];
- GC gc;
-
- int altpersist;
-
- int xmax;
- int ymax;
-
- struct gap gap;
- struct cycle_entry_q mruq;
-
- XftDraw *xftdraw;
- XftColor xftcolor;
- XftFont *font;
- u_int fontheight;
-
- int xinerama_no;
- XineramaScreenInfo *xinerama;
- struct group_ctx *group_active;
- struct group_ctx groups[CALMWM_NGROUPS];
- int group_hideall;
- struct group_ctx_q groupq;
- char **group_names;
- int group_nonames;
-};
-
-TAILQ_HEAD(screen_ctx_q, screen_ctx);
-
-#define CLIENT_PROTO_DELETE 0x01
-#define CLIENT_PROTO_TAKEFOCUS 0x02
-
-#define CLIENT_MAXNAMEQLEN 5
-
-#define CLIENT_HIDDEN 0x01
-#define CLIENT_IGNORE 0x02
-#define CLIENT_DOMAXIMIZE 0x04
-#define CLIENT_MAXIMIZED 0x08
-#define CLIENT_DOVMAXIMIZE 0x10
-#define CLIENT_VMAXIMIZED 0x20
-#define CLIENT_DOHMAXIMIZE 0x40
-#define CLIENT_HMAXIMIZED 0x80
-
-#define CLIENT_HIGHLIGHT_GROUP 1
-#define CLIENT_HIGHLIGHT_UNGROUP 2
-
struct winname {
TAILQ_ENTRY(winname) entry;
char *name;
};
-
TAILQ_HEAD(winname_q, winname);
struct client_ctx {
TAILQ_ENTRY(client_ctx) entry;
- TAILQ_ENTRY(client_ctx) searchentry;
TAILQ_ENTRY(client_ctx) group_entry;
TAILQ_ENTRY(client_ctx) mru_entry;
-
struct screen_ctx *sc;
Window win;
XSizeHints *size;
-
Colormap cmap;
-
- u_int bwidth;
+ u_int bwidth; /* border width */
struct {
- int x, y, width, height, basew, baseh,
- minw, minh, maxw, maxh, incw, inch;
- float mina, maxa;
+ int x; /* x position */
+ int y; /* y position */
+ int width; /* width */
+ int height;/* height */
+ int basew; /* desired width */
+ int baseh; /* desired height */
+ int minw; /* minimum width */
+ int minh; /* minimum height */
+ int maxw; /* maximum width */
+ int maxh; /* maximum height */
+ int incw; /* width increment progression */
+ int inch; /* height increment progression */
+ float mina; /* minimum aspect ratio */
+ float maxa; /* maximum aspect ratio */
} geom, savegeom;
-
struct {
- int x,y;
+ int x; /* x position */
+ int y; /* y position */
} ptr;
-
+#define CLIENT_PROTO_DELETE 0x0001
+#define CLIENT_PROTO_TAKEFOCUS 0x0002
int xproto;
-
+#define CLIENT_HIDDEN 0x0001
+#define CLIENT_IGNORE 0x0002
+#define CLIENT_DOMAXIMIZE 0x0004
+#define CLIENT_MAXIMIZED 0x0008
+#define CLIENT_DOVMAXIMIZE 0x0010
+#define CLIENT_VMAXIMIZED 0x0020
+#define CLIENT_DOHMAXIMIZE 0x0040
+#define CLIENT_HMAXIMIZED 0x0080
int flags;
int state;
- char *name;
- struct winname_q nameq;
- size_t nameqlen;
-
- char *label;
int active;
+ int stackingorder;
+#define CLIENT_HIGHLIGHT_GROUP 0x0001
+#define CLIENT_HIGHLIGHT_UNGROUP 0x0002
int highlight;
-
+ struct winname_q nameq;
+#define CLIENT_MAXNAMEQLEN 5
+ int nameqlen;
+ char *name;
+ char *label;
char *matchname;
struct group_ctx *group;
-
- int stackingorder;
-
char *app_class;
char *app_name;
};
+TAILQ_HEAD(client_ctx_q, client_ctx);
+TAILQ_HEAD(cycle_entry_q, client_ctx);
-extern const char *shortcut_to_name[];
+struct winmatch {
+ TAILQ_ENTRY(winmatch) entry;
+#define WIN_MAXTITLELEN 256
+ char title[WIN_MAXTITLELEN];
+};
+TAILQ_HEAD(winmatch_q, winmatch);
+
+struct group_ctx {
+ TAILQ_ENTRY(group_ctx) entry;
+ struct client_ctx_q clients;
+ int shortcut;
+ int hidden;
+ int nhidden;
+ int highstack;
+};
+TAILQ_HEAD(group_ctx_q, group_ctx);
-/* Autogroups */
struct autogroupwin {
TAILQ_ENTRY(autogroupwin) entry;
char *class;
char *name;
int num;
};
-
TAILQ_HEAD(autogroupwin_q, autogroupwin);
-#define CWM_MOVE 0x01
-#define CWM_RESIZE 0x02
-#define CWM_PTRMOVE 0x04
-#define CWM_BIGMOVE 0x08
-#define CWM_UP 0x10
-#define CWM_DOWN 0x20
-#define CWM_LEFT 0x40
-#define CWM_RIGHT 0x80
-
-/*
- * Match a window.
- */
-#define CONF_MAX_WINTITLE 256
-struct winmatch {
- TAILQ_ENTRY(winmatch) entry;
- char title[CONF_MAX_WINTITLE];
-};
-
-TAILQ_HEAD(winmatch_q, winmatch);
-
-/* for cwm_exec */
-#define CWM_EXEC_PROGRAM 0x1
-#define CWM_EXEC_WM 0x2
-/* for alt-tab */
-#define CWM_CYCLE 0x0
-#define CWM_RCYCLE 0x1
-/* for group cycle */
-#define CWM_CYCLEGROUP 0x0
-#define CWM_RCYCLEGROUP 0x1
-
-#define KBFLAG_NEEDCLIENT 0x01
-
-#define KBTOGROUP(X) ((X) - 1)
-
-union arg {
- char *c;
- int i;
+struct screen_ctx {
+ TAILQ_ENTRY(screen_ctx) entry;
+ u_int which;
+ Window rootwin;
+ Window menuwin;
+ struct color color[CWM_COLOR_MAX];
+ GC gc;
+ int altpersist;
+ int xmax;
+ int ymax;
+ struct gap gap;
+ struct cycle_entry_q mruq;
+ XftColor xftcolor;
+ XftDraw *xftdraw;
+ XftFont *font;
+ u_int fontheight;
+ int xinerama_no;
+ XineramaScreenInfo *xinerama;
+#define CALMWM_NGROUPS 9
+ struct group_ctx groups[CALMWM_NGROUPS];
+ struct group_ctx_q groupq;
+ int group_hideall;
+ int group_nonames;
+ struct group_ctx *group_active;
+ char **group_names;
};
+TAILQ_HEAD(screen_ctx_q, screen_ctx);
struct keybinding {
TAILQ_ENTRY(keybinding) entry;
@@ -253,33 +230,43 @@ struct keybinding {
int modmask;
int keysym;
int keycode;
+#define KBFLAG_NEEDCLIENT 0x0001
int flags;
};
-
-struct cmd {
- TAILQ_ENTRY(cmd) entry;
- int flags;
- char image[MAXPATHLEN];
- char label[256];
- /* (argv) */
-};
+TAILQ_HEAD(keybinding_q, keybinding);
struct mousebinding {
+ TAILQ_ENTRY(mousebinding) entry;
+ void (*callback)(struct client_ctx *, void *);
int modmask;
int button;
+#define MOUSEBIND_CTX_ROOT 0x0001
+#define MOUSEBIND_CTX_WIN 0x0002
int context;
- void (*callback)(struct client_ctx *, void *);
- TAILQ_ENTRY(mousebinding) entry;
};
+TAILQ_HEAD(mousebinding_q, mousebinding);
-#define MOUSEBIND_CTX_ROOT 1
-#define MOUSEBIND_CTX_WIN 2
-
-TAILQ_HEAD(keybinding_q, keybinding);
+struct cmd {
+ TAILQ_ENTRY(cmd) entry;
+ int flags;
+ char image[MAXPATHLEN];
+#define CMD_MAXLABELLEN 256
+ char label[CMD_MAXLABELLEN];
+};
TAILQ_HEAD(cmd_q, cmd);
-TAILQ_HEAD(mousebinding_q, mousebinding);
-/* Global configuration */
+struct menu {
+ TAILQ_ENTRY(menu) entry;
+ TAILQ_ENTRY(menu) resultentry;
+#define MENU_MAXENTRY 50
+ char text[MENU_MAXENTRY + 1];
+ char print[MENU_MAXENTRY + 1];
+ void *ctx;
+ short dummy;
+ short abort;
+};
+TAILQ_HEAD(menu_q, menu);
+
struct conf {
struct keybinding_q keybindingq;
struct autogroupwin_q autogroupq;
@@ -287,15 +274,13 @@ struct conf {
char conf_path[MAXPATHLEN];
struct cmd_q cmdq;
struct mousebinding_q mousebindingq;
-
-#define CONF_STICKY_GROUPS 0x0001
+#define CONF_STICKY_GROUPS 0x0001
int flags;
-#define CONF_BWIDTH 1
+#define CONF_BWIDTH 1
int bwidth;
-#define CONF_MAMOUNT 1
+#define CONF_MAMOUNT 1
int mamount;
struct gap gap;
-
#define CONF_COLOR_ACTIVEBORDER "#CCCCCC"
#define CONF_COLOR_INACTIVEBORDER "#666666"
#define CONF_COLOR_GROUPBORDER "blue"
@@ -303,213 +288,190 @@ struct conf {
#define CONF_COLOR_MENUFG "black"
#define CONF_COLOR_MENUBG "white"
struct color color[CWM_COLOR_MAX];
-
char termpath[MAXPATHLEN];
char lockpath[MAXPATHLEN];
-
-#define DEFAULTFONTNAME "sans-serif:pixelsize=14:bold"
+#define DEFAULTFONTNAME "sans-serif:pixelsize=14:bold"
char *DefaultFontName;
};
-/* Menu stuff */
-
-#define MENU_MAXENTRY 50
-
-struct menu {
- TAILQ_ENTRY(menu) entry;
- TAILQ_ENTRY(menu) resultentry;
-
- char text[MENU_MAXENTRY + 1];
- char print[MENU_MAXENTRY + 1];
- void *ctx;
- short dummy;
- short abort;
-};
-
-TAILQ_HEAD(menu_q, menu);
-
/* MWM hints */
-
struct mwm_hints {
u_long flags;
u_long functions;
u_long decorations;
};
-
-#define MWM_NUMHINTS 3
-
+#define MWM_NUMHINTS 3
#define PROP_MWM_HINTS_ELEMENTS 3
-#define MWM_HINTS_DECORATIONS (1 << 1)
-#define MWM_DECOR_ALL (1 << 0)
-#define MWM_DECOR_BORDER (1 << 1)
+#define MWM_HINTS_DECORATIONS (1<<1)
+#define MWM_DECOR_ALL (1<<0)
+#define MWM_DECOR_BORDER (1<<1)
__dead void usage(void);
-struct client_ctx *client_find(Window);
-struct client_ctx *client_new(Window, struct screen_ctx *, int);
+void client_applysizehints(struct client_ctx *);
+struct client_ctx *client_current(void);
+struct client_ctx *client_cycle(struct screen_ctx *, int);
int client_delete(struct client_ctx *);
-void client_setactive(struct client_ctx *, int);
-void client_resize(struct client_ctx *);
+void client_draw_border(struct client_ctx *);
+struct client_ctx *client_find(Window);
+void client_getsizehints(struct client_ctx *);
+void client_hide(struct client_ctx *);
+void client_horizmaximize(struct client_ctx *);
+void client_leave(struct client_ctx *);
void client_lower(struct client_ctx *);
-void client_raise(struct client_ctx *);
+void client_map(struct client_ctx *);
+void client_maximize(struct client_ctx *);
void client_move(struct client_ctx *);
-void client_leave(struct client_ctx *);
+void client_mtf(struct client_ctx *);
+struct client_ctx *client_new(Window, struct screen_ctx *, int);
+void client_ptrsave(struct client_ctx *);
+void client_ptrwarp(struct client_ctx *);
+void client_raise(struct client_ctx *);
+void client_resize(struct client_ctx *);
void client_send_delete(struct client_ctx *);
-struct client_ctx *client_current(void);
-void client_hide(struct client_ctx *);
-void client_unhide(struct client_ctx *);
+void client_setactive(struct client_ctx *, int);
void client_setname(struct client_ctx *);
-void client_warp(struct client_ctx *);
-void client_ptrwarp(struct client_ctx *);
-void client_ptrsave(struct client_ctx *);
-void client_draw_border(struct client_ctx *);
-void client_maximize(struct client_ctx *);
+void client_unhide(struct client_ctx *);
void client_vertmaximize(struct client_ctx *);
-void client_horizmaximize(struct client_ctx *);
-void client_map(struct client_ctx *);
-void client_mtf(struct client_ctx *);
-struct client_ctx *client_cycle(struct screen_ctx *, int);
-void client_getsizehints(struct client_ctx *);
-void client_applysizehints(struct client_ctx *);
-
-struct menu *menu_filter(struct screen_ctx *, struct menu_q *,
- char *, char *, int,
- void (*)(struct menu_q *, struct menu_q *, char *),
- void (*)(struct menu *, int));
-void menu_init(struct screen_ctx *);
-
-void xev_loop(void);
-
-void xu_getatoms(void);
-int xu_ptr_grab(Window, int, Cursor);
-void xu_btn_grab(Window, int, u_int);
-int xu_ptr_regrab(int, Cursor);
-void xu_btn_ungrab(Window, int, u_int);
-void xu_ptr_ungrab(void);
-void xu_ptr_setpos(Window, int, int);
-void xu_ptr_getpos(Window, int *, int *);
-void xu_key_grab(Window, int, int);
-void xu_key_ungrab(Window, int, int);
-void xu_configure(struct client_ctx *);
-void xu_sendmsg(Window, Atom, long);
-int xu_getprop(Window, Atom, Atom, long, u_char **);
-int xu_getstrprop(Window, Atom, char **);
-void xu_setstate(struct client_ctx *, int);
-int xu_getstate(struct client_ctx *, int *);
-unsigned long xu_getcolor(struct screen_ctx *, char *);
-void xu_freecolor(struct screen_ctx *, unsigned long);
-void xu_setwmname(struct screen_ctx *);
+void client_warp(struct client_ctx *);
-int u_spawn(char *);
-void u_exec(char *);
+void group_alltoggle(struct screen_ctx *);
+void group_autogroup(struct client_ctx *);
+void group_client_delete(struct client_ctx *);
+void group_cycle(struct screen_ctx *, int);
+void group_hidetoggle(struct screen_ctx *, int);
+void group_init(struct screen_ctx *);
+void group_make_autogroup(struct conf *, char *, int);
+void group_menu(XButtonEvent *);
+void group_movetogroup(struct client_ctx *, int);
+void group_only(struct screen_ctx *, int);
+void group_sticky(struct client_ctx *);
+void group_sticky_toggle_enter(struct client_ctx *);
+void group_sticky_toggle_exit(struct client_ctx *);
+void group_update_names(struct screen_ctx *);
-void xfree(void *);
-void *xmalloc(size_t);
-void *xcalloc(size_t, size_t);
-char *xstrdup(const char *);
+void search_match_client(struct menu_q *, struct menu_q *,
+ char *);
+void search_match_exec(struct menu_q *, struct menu_q *,
+ char *);
+void search_match_text(struct menu_q *, struct menu_q *,
+ char *);
+void search_print_client(struct menu *, int);
+XineramaScreenInfo *screen_find_xinerama(struct screen_ctx *, int, int);
struct screen_ctx *screen_fromroot(Window);
-void screen_updatestackingorder(struct screen_ctx *);
-void screen_update_geometry(struct screen_ctx *, int, int);
void screen_init_xinerama(struct screen_ctx *);
-XineramaScreenInfo *screen_find_xinerama(struct screen_ctx *, int, int);
-
-void conf_setup(struct conf *, const char *);
-void conf_client(struct client_ctx *);
-void conf_grab(struct conf *, struct keybinding *);
-void conf_ungrab(struct conf *, struct keybinding *);
-void conf_bindname(struct conf *, char *, char *);
-void conf_mousebind(struct conf *, char *, char *);
-void conf_grab_mouse(struct client_ctx *);
-void conf_reload(struct conf *);
-void conf_gap(struct conf *, struct screen_ctx *);
-void conf_font(struct conf *, struct screen_ctx *);
-void conf_color(struct conf *, struct screen_ctx *);
-void conf_init(struct conf *);
-void conf_clear(struct conf *);
-void conf_cmd_add(struct conf *, char *, char *, int);
-
-int parse_config(const char *, struct conf *);
+void screen_update_geometry(struct screen_ctx *, int, int);
+void screen_updatestackingorder(struct screen_ctx *);
-void kbfunc_client_lower(struct client_ctx *, union arg *);
-void kbfunc_client_raise(struct client_ctx *, union arg *);
-void kbfunc_client_search(struct client_ctx *, union arg *);
-void kbfunc_client_hide(struct client_ctx *, union arg *);
void kbfunc_client_cycle(struct client_ctx *, union arg *);
-void kbfunc_client_rcycle(struct client_ctx *, union arg *);
-void kbfunc_cmdexec(struct client_ctx *, union arg *);
-void kbfunc_client_label(struct client_ctx *, union arg *);
+void kbfunc_client_cyclegroup(struct client_ctx *,
+ union arg *);
void kbfunc_client_delete(struct client_ctx *, union arg *);
void kbfunc_client_group(struct client_ctx *, union arg *);
void kbfunc_client_grouponly(struct client_ctx *,
union arg *);
-void kbfunc_client_cyclegroup(struct client_ctx *,
+void kbfunc_client_grouptoggle(struct client_ctx *,
union arg *);
-void kbfunc_client_nogroup(struct client_ctx *,
+void kbfunc_client_hide(struct client_ctx *, union arg *);
+void kbfunc_client_hmaximize(struct client_ctx *,
union arg *);
-void kbfunc_client_grouptoggle(struct client_ctx *,
+void kbfunc_client_label(struct client_ctx *, union arg *);
+void kbfunc_client_lower(struct client_ctx *, union arg *);
+void kbfunc_client_maximize(struct client_ctx *,
union arg *);
void kbfunc_client_movetogroup(struct client_ctx *,
union arg *);
-void kbfunc_client_maximize(struct client_ctx *,
+void kbfunc_client_nogroup(struct client_ctx *,
union arg *);
+void kbfunc_client_raise(struct client_ctx *, union arg *);
+void kbfunc_client_rcycle(struct client_ctx *, union arg *);
+void kbfunc_client_search(struct client_ctx *, union arg *);
void kbfunc_client_vmaximize(struct client_ctx *,
union arg *);
-void kbfunc_client_hmaximize(struct client_ctx *,
- union arg *);
-void kbfunc_reload(struct client_ctx *, union arg *);
-void kbfunc_quit_wm(struct client_ctx *, union arg *);
-void kbfunc_moveresize(struct client_ctx *, union arg *);
-void kbfunc_menu_search(struct client_ctx *, union arg *);
+void kbfunc_cmdexec(struct client_ctx *, union arg *);
void kbfunc_exec(struct client_ctx *, union arg *);
+void kbfunc_lock(struct client_ctx *, union arg *);
+void kbfunc_menu_search(struct client_ctx *, union arg *);
+void kbfunc_moveresize(struct client_ctx *, union arg *);
+void kbfunc_quit_wm(struct client_ctx *, union arg *);
+void kbfunc_reload(struct client_ctx *, union arg *);
void kbfunc_ssh(struct client_ctx *, union arg *);
void kbfunc_term(struct client_ctx *, union arg *);
-void kbfunc_lock(struct client_ctx *, union arg *);
-void mousefunc_window_resize(struct client_ctx *, void *);
-void mousefunc_window_move(struct client_ctx *, void *);
+void mousefunc_menu_cmd(struct client_ctx *, void *);
+void mousefunc_menu_group(struct client_ctx *, void *);
+void mousefunc_menu_unhide(struct client_ctx *, void *);
void mousefunc_window_grouptoggle(struct client_ctx *,
void *);
-void mousefunc_window_lower(struct client_ctx *, void *);
void mousefunc_window_hide(struct client_ctx *, void *);
-void mousefunc_menu_group(struct client_ctx *, void *);
-void mousefunc_menu_unhide(struct client_ctx *, void *);
-void mousefunc_menu_cmd(struct client_ctx *, void *);
+void mousefunc_window_lower(struct client_ctx *, void *);
+void mousefunc_window_move(struct client_ctx *, void *);
+void mousefunc_window_resize(struct client_ctx *, void *);
-void search_match_client(struct menu_q *, struct menu_q *,
- char *);
-void search_print_client(struct menu *, int);
-void search_match_text(struct menu_q *, struct menu_q *,
- char *);
-void search_match_exec(struct menu_q *, struct menu_q *,
- char *);
+struct menu *menu_filter(struct screen_ctx *, struct menu_q *,
+ char *, char *, int,
+ void (*)(struct menu_q *, struct menu_q *, char *),
+ void (*)(struct menu *, int));
+void menu_init(struct screen_ctx *);
-void group_init(struct screen_ctx *);
-void group_make_autogroup(struct conf *, char *, int);
-void group_update_names(struct screen_ctx *);
-void group_hidetoggle(struct screen_ctx *, int);
-void group_only(struct screen_ctx *, int);
-void group_cycle(struct screen_ctx *, int);
-void group_sticky(struct client_ctx *);
-void group_client_delete(struct client_ctx *);
-void group_menu(XButtonEvent *);
-void group_alltoggle(struct screen_ctx *);
-void group_sticky_toggle_enter(struct client_ctx *);
-void group_sticky_toggle_exit(struct client_ctx *);
-void group_autogroup(struct client_ctx *);
-void group_movetogroup(struct client_ctx *, int);
+int parse_config(const char *, struct conf *);
+
+void conf_bindname(struct conf *, char *, char *);
+void conf_clear(struct conf *);
+void conf_client(struct client_ctx *);
+void conf_cmd_add(struct conf *, char *, char *, int);
+void conf_color(struct conf *, struct screen_ctx *);
+void conf_font(struct conf *, struct screen_ctx *);
+void conf_gap(struct conf *, struct screen_ctx *);
+void conf_grab(struct conf *, struct keybinding *);
+void conf_grab_mouse(struct client_ctx *);
+void conf_init(struct conf *);
+void conf_mousebind(struct conf *, char *, char *);
+void conf_reload(struct conf *);
+void conf_setup(struct conf *, const char *);
+void conf_ungrab(struct conf *, struct keybinding *);
int font_ascent(struct screen_ctx *);
int font_descent(struct screen_ctx *);
+void font_draw(struct screen_ctx *, const char *, int,
+ Drawable, int, int);
u_int font_height(struct screen_ctx *);
void font_init(struct screen_ctx *);
int font_width(struct screen_ctx *, const char *, int);
-void font_draw(struct screen_ctx *, const char *, int,
- Drawable, int, int);
XftFont *font_make(struct screen_ctx *, const char *);
-/* Externs */
+void xev_loop(void);
+void xu_btn_grab(Window, int, u_int);
+void xu_btn_ungrab(Window, int, u_int);
+void xu_configure(struct client_ctx *);
+void xu_freecolor(struct screen_ctx *, unsigned long);
+void xu_getatoms(void);
+unsigned long xu_getcolor(struct screen_ctx *, char *);
+int xu_getprop(Window, Atom, Atom, long, u_char **);
+int xu_getstate(struct client_ctx *, int *);
+int xu_getstrprop(Window, Atom, char **);
+void xu_key_grab(Window, int, int);
+void xu_key_ungrab(Window, int, int);
+void xu_ptr_getpos(Window, int *, int *);
+int xu_ptr_grab(Window, int, Cursor);
+int xu_ptr_regrab(int, Cursor);
+void xu_ptr_setpos(Window, int, int);
+void xu_ptr_ungrab(void);
+void xu_sendmsg(Window, Atom, long);
+void xu_setstate(struct client_ctx *, int);
+void xu_setwmname(struct screen_ctx *);
+
+void u_exec(char *);
+int u_spawn(char *);
+
+void *xcalloc(size_t, size_t);
+void xfree(void *);
+void *xmalloc(size_t);
+char *xstrdup(const char *);
+
+/* Externs */
extern Display *X_Dpy;
extern Cursor Cursor_move;
@@ -519,12 +481,10 @@ extern Cursor Cursor_default;
extern Cursor Cursor_question;
extern struct screen_ctx_q Screenq;
-extern struct screen_ctx *curscreen;
-
extern struct client_ctx_q Clientq;
+extern struct conf Conf;
extern int HasXinerama, HasRandr, Randr_ev;
-extern struct conf Conf;
#define WM_STATE cwm_atoms[0]
#define WM_DELETE_WINDOW cwm_atoms[1]