2007-04-27 21:58:48 +04:00
|
|
|
/*
|
|
|
|
* calmwm - the calm window manager
|
|
|
|
*
|
|
|
|
* Copyright (c) 2004 Marius Aamodt Eriksen <marius@monkey.org>
|
2008-01-11 19:06:44 +03:00
|
|
|
*
|
|
|
|
* Permission to use, copy, modify, and distribute this software for any
|
|
|
|
* purpose with or without fee is hereby granted, provided that the above
|
|
|
|
* copyright notice and this permission notice appear in all copies.
|
|
|
|
*
|
|
|
|
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
|
|
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
|
|
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
|
|
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
|
|
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
|
|
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
|
|
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
2007-04-27 21:58:48 +04:00
|
|
|
*
|
2011-05-11 17:53:51 +04:00
|
|
|
* $OpenBSD$
|
2007-04-27 21:58:48 +04:00
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef _CALMWM_H_
|
|
|
|
#define _CALMWM_H_
|
|
|
|
|
2012-05-16 05:04:36 +04:00
|
|
|
#include <X11/XKBlib.h>
|
2009-12-15 06:24:36 +03:00
|
|
|
#include <X11/Xatom.h>
|
|
|
|
#include <X11/Xft/Xft.h>
|
|
|
|
#include <X11/Xlib.h>
|
|
|
|
#include <X11/Xproto.h>
|
|
|
|
#include <X11/Xutil.h>
|
|
|
|
#include <X11/cursorfont.h>
|
|
|
|
#include <X11/extensions/Xinerama.h>
|
|
|
|
#include <X11/extensions/Xrandr.h>
|
|
|
|
#include <X11/keysym.h>
|
|
|
|
|
2007-04-27 21:58:48 +04:00
|
|
|
#undef MIN
|
|
|
|
#undef MAX
|
|
|
|
#define MIN(x, y) ((x) < (y) ? (x) : (y))
|
|
|
|
#define MAX(x, y) ((x) > (y) ? (x) : (y))
|
|
|
|
|
2011-05-05 20:40:37 +04:00
|
|
|
#ifndef nitems
|
|
|
|
#define nitems(_a) (sizeof((_a)) / sizeof((_a)[0]))
|
|
|
|
#endif
|
|
|
|
|
2008-03-23 18:09:21 +03:00
|
|
|
#define CONFFILE ".cwmrc"
|
2009-12-08 00:20:52 +03:00
|
|
|
#define WMNAME "CWM"
|
2008-03-23 18:09:21 +03:00
|
|
|
|
2011-07-23 17:09:11 +04:00
|
|
|
#define BUTTONMASK (ButtonPressMask|ButtonReleaseMask)
|
|
|
|
#define MOUSEMASK (BUTTONMASK|PointerMotionMask)
|
2012-12-18 22:35:36 +04:00
|
|
|
#define MENUMASK (MOUSEMASK|ButtonMotionMask|ExposureMask)
|
|
|
|
#define MENUGRABMASK (MOUSEMASK|ButtonMotionMask|StructureNotifyMask)
|
2011-07-23 17:09:11 +04:00
|
|
|
#define KEYMASK (KeyPressMask|ExposureMask)
|
2012-12-18 21:37:39 +04:00
|
|
|
#define IGNOREMODMASK (LockMask|Mod2Mask)
|
2007-04-27 21:58:48 +04:00
|
|
|
|
2011-05-05 20:40:37 +04:00
|
|
|
/* 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
|
|
|
|
|
2011-06-24 09:30:42 +04:00
|
|
|
/* cycle */
|
2011-09-03 13:20:58 +04:00
|
|
|
#define CWM_CYCLE 0x0001
|
|
|
|
#define CWM_RCYCLE 0x0002
|
|
|
|
#define CWM_INGROUP 0x0004
|
2011-05-05 20:40:37 +04:00
|
|
|
|
2012-11-07 18:39:44 +04:00
|
|
|
/* menu */
|
2012-11-07 18:40:51 +04:00
|
|
|
#define CWM_MENU_DUMMY 0x0001
|
|
|
|
#define CWM_MENU_FILE 0x0002
|
2012-11-07 18:39:44 +04:00
|
|
|
|
2013-01-01 18:33:52 +04:00
|
|
|
#define ARG_CHAR 0x0001
|
|
|
|
#define ARG_INT 0x0002
|
2013-01-08 19:16:04 +04:00
|
|
|
|
|
|
|
#define CWM_TILE_HORIZ 0x0001
|
|
|
|
#define CWM_TILE_VERT 0x0002
|
|
|
|
|
2011-05-05 20:40:37 +04:00
|
|
|
union arg {
|
|
|
|
char *c;
|
|
|
|
int i;
|
|
|
|
};
|
2011-03-22 13:57:31 +03:00
|
|
|
|
2012-12-17 06:28:45 +04:00
|
|
|
enum menucolor {
|
|
|
|
CWM_COLOR_MENU_FG,
|
|
|
|
CWM_COLOR_MENU_BG,
|
|
|
|
CWM_COLOR_MENU_FONT,
|
|
|
|
CWM_COLOR_MENU_FONT_SEL,
|
|
|
|
CWM_COLOR_MENU_MAX
|
|
|
|
};
|
|
|
|
|
2013-01-04 20:27:58 +04:00
|
|
|
enum bordercolor {
|
2011-07-14 15:39:53 +04:00
|
|
|
CWM_COLOR_BORDER_ACTIVE,
|
2009-05-18 03:40:57 +04:00
|
|
|
CWM_COLOR_BORDER_INACTIVE,
|
|
|
|
CWM_COLOR_BORDER_GROUP,
|
|
|
|
CWM_COLOR_BORDER_UNGROUP,
|
2013-01-04 20:27:58 +04:00
|
|
|
CWM_COLOR_BORDER_MAX
|
2009-05-18 03:40:57 +04:00
|
|
|
};
|
|
|
|
|
2012-07-13 18:18:04 +04:00
|
|
|
struct geom {
|
|
|
|
int x;
|
|
|
|
int y;
|
|
|
|
int w;
|
|
|
|
int h;
|
|
|
|
};
|
|
|
|
|
2010-01-27 06:04:50 +03:00
|
|
|
struct gap {
|
|
|
|
int top;
|
|
|
|
int bottom;
|
|
|
|
int left;
|
|
|
|
int right;
|
|
|
|
};
|
2009-05-18 03:40:57 +04:00
|
|
|
|
2007-04-27 21:58:48 +04:00
|
|
|
struct winname {
|
2008-07-11 18:21:28 +04:00
|
|
|
TAILQ_ENTRY(winname) entry;
|
|
|
|
char *name;
|
2007-04-27 21:58:48 +04:00
|
|
|
};
|
|
|
|
TAILQ_HEAD(winname_q, winname);
|
|
|
|
|
|
|
|
struct client_ctx {
|
|
|
|
TAILQ_ENTRY(client_ctx) entry;
|
|
|
|
TAILQ_ENTRY(client_ctx) group_entry;
|
|
|
|
TAILQ_ENTRY(client_ctx) mru_entry;
|
|
|
|
struct screen_ctx *sc;
|
|
|
|
Window win;
|
|
|
|
XSizeHints *size;
|
2012-12-17 22:35:26 +04:00
|
|
|
Colormap colormap;
|
2011-05-05 20:40:37 +04:00
|
|
|
u_int bwidth; /* border width */
|
2012-07-13 21:01:04 +04:00
|
|
|
struct geom geom, savegeom;
|
2011-09-03 13:42:33 +04:00
|
|
|
struct {
|
2011-05-05 20:40:37 +04:00
|
|
|
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 */
|
2011-09-03 13:42:33 +04:00
|
|
|
} hint;
|
2007-04-27 21:58:48 +04:00
|
|
|
struct {
|
2011-05-05 20:40:37 +04:00
|
|
|
int x; /* x position */
|
|
|
|
int y; /* y position */
|
2007-04-27 21:58:48 +04:00
|
|
|
} ptr;
|
2011-05-05 20:40:37 +04:00
|
|
|
#define CLIENT_PROTO_DELETE 0x0001
|
|
|
|
#define CLIENT_PROTO_TAKEFOCUS 0x0002
|
2007-04-27 21:58:48 +04:00
|
|
|
int xproto;
|
2011-05-05 20:40:37 +04:00
|
|
|
#define CLIENT_HIDDEN 0x0001
|
|
|
|
#define CLIENT_IGNORE 0x0002
|
2011-09-04 20:59:31 +04:00
|
|
|
#define CLIENT_VMAXIMIZED 0x0004
|
|
|
|
#define CLIENT_HMAXIMIZED 0x0008
|
|
|
|
#define CLIENT_FREEZE 0x0010
|
2012-12-17 21:48:57 +04:00
|
|
|
#define CLIENT_GROUP 0x0020
|
|
|
|
#define CLIENT_UNGROUP 0x0040
|
2011-09-04 20:59:31 +04:00
|
|
|
|
2012-12-17 21:48:57 +04:00
|
|
|
#define CLIENT_HIGHLIGHT (CLIENT_GROUP | CLIENT_UNGROUP)
|
2011-09-04 20:59:31 +04:00
|
|
|
#define CLIENT_MAXFLAGS (CLIENT_VMAXIMIZED | CLIENT_HMAXIMIZED)
|
|
|
|
#define CLIENT_MAXIMIZED (CLIENT_VMAXIMIZED | CLIENT_HMAXIMIZED)
|
2007-04-27 21:58:48 +04:00
|
|
|
int flags;
|
|
|
|
int state;
|
|
|
|
int active;
|
2011-05-05 20:40:37 +04:00
|
|
|
int stackingorder;
|
|
|
|
struct winname_q nameq;
|
|
|
|
#define CLIENT_MAXNAMEQLEN 5
|
|
|
|
int nameqlen;
|
|
|
|
char *name;
|
|
|
|
char *label;
|
2007-04-27 21:58:48 +04:00
|
|
|
char *matchname;
|
2008-04-16 00:24:41 +04:00
|
|
|
struct group_ctx *group;
|
|
|
|
char *app_class;
|
|
|
|
char *app_name;
|
2007-04-27 21:58:48 +04:00
|
|
|
};
|
2011-05-05 20:40:37 +04:00
|
|
|
TAILQ_HEAD(client_ctx_q, client_ctx);
|
|
|
|
TAILQ_HEAD(cycle_entry_q, client_ctx);
|
2007-04-27 21:58:48 +04:00
|
|
|
|
2011-05-05 20:40:37 +04:00
|
|
|
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);
|
2008-03-23 18:09:21 +03:00
|
|
|
|
2007-04-27 21:58:48 +04:00
|
|
|
struct autogroupwin {
|
2009-12-11 20:51:42 +03:00
|
|
|
TAILQ_ENTRY(autogroupwin) entry;
|
|
|
|
char *class;
|
|
|
|
char *name;
|
|
|
|
int num;
|
2007-04-27 21:58:48 +04:00
|
|
|
};
|
|
|
|
TAILQ_HEAD(autogroupwin_q, autogroupwin);
|
|
|
|
|
2011-05-05 20:40:37 +04:00
|
|
|
struct screen_ctx {
|
|
|
|
TAILQ_ENTRY(screen_ctx) entry;
|
|
|
|
u_int which;
|
2012-12-17 22:34:06 +04:00
|
|
|
Visual *visual;
|
|
|
|
Colormap colormap;
|
2011-05-05 20:40:37 +04:00
|
|
|
Window rootwin;
|
|
|
|
Window menuwin;
|
2013-01-04 20:27:58 +04:00
|
|
|
unsigned long color[CWM_COLOR_BORDER_MAX];
|
2012-05-13 19:17:13 +04:00
|
|
|
int cycling;
|
2012-07-13 18:18:04 +04:00
|
|
|
struct geom view; /* viewable area */
|
|
|
|
struct geom work; /* workable area, gap-applied */
|
2011-05-05 20:40:37 +04:00
|
|
|
struct gap gap;
|
|
|
|
struct cycle_entry_q mruq;
|
2012-12-17 06:28:45 +04:00
|
|
|
XftColor xftcolor[CWM_COLOR_MENU_MAX];
|
2011-05-05 20:40:37 +04:00
|
|
|
XftDraw *xftdraw;
|
2012-12-17 18:20:52 +04:00
|
|
|
XftFont *xftfont;
|
2011-05-05 20:40:37 +04:00
|
|
|
int xinerama_no;
|
|
|
|
XineramaScreenInfo *xinerama;
|
2013-01-01 18:19:56 +04:00
|
|
|
#define CALMWM_NGROUPS 10
|
2011-05-05 20:40:37 +04:00
|
|
|
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;
|
2009-01-23 21:58:40 +03:00
|
|
|
};
|
2011-05-05 20:40:37 +04:00
|
|
|
TAILQ_HEAD(screen_ctx_q, screen_ctx);
|
2009-01-23 21:58:40 +03:00
|
|
|
|
2007-04-27 21:58:48 +04:00
|
|
|
struct keybinding {
|
2009-01-23 21:58:40 +03:00
|
|
|
TAILQ_ENTRY(keybinding) entry;
|
|
|
|
void (*callback)(struct client_ctx *, union arg *);
|
|
|
|
union arg argument;
|
2008-04-16 00:24:41 +04:00
|
|
|
int modmask;
|
|
|
|
int keysym;
|
|
|
|
int keycode;
|
2011-05-05 20:40:37 +04:00
|
|
|
#define KBFLAG_NEEDCLIENT 0x0001
|
2008-04-16 00:24:41 +04:00
|
|
|
int flags;
|
2013-01-01 18:33:52 +04:00
|
|
|
int argtype;
|
2007-04-27 21:58:48 +04:00
|
|
|
};
|
2011-05-05 20:40:37 +04:00
|
|
|
TAILQ_HEAD(keybinding_q, keybinding);
|
2007-04-27 21:58:48 +04:00
|
|
|
|
2008-06-15 01:48:54 +04:00
|
|
|
struct mousebinding {
|
2011-05-05 20:40:37 +04:00
|
|
|
TAILQ_ENTRY(mousebinding) entry;
|
|
|
|
void (*callback)(struct client_ctx *, void *);
|
2008-06-15 01:48:54 +04:00
|
|
|
int modmask;
|
|
|
|
int button;
|
2011-05-05 20:40:37 +04:00
|
|
|
#define MOUSEBIND_CTX_ROOT 0x0001
|
|
|
|
#define MOUSEBIND_CTX_WIN 0x0002
|
2008-06-15 01:48:54 +04:00
|
|
|
int context;
|
|
|
|
};
|
2011-05-05 20:40:37 +04:00
|
|
|
TAILQ_HEAD(mousebinding_q, mousebinding);
|
2008-06-15 01:48:54 +04:00
|
|
|
|
2011-05-05 20:40:37 +04:00
|
|
|
struct cmd {
|
|
|
|
TAILQ_ENTRY(cmd) entry;
|
|
|
|
char image[MAXPATHLEN];
|
|
|
|
#define CMD_MAXLABELLEN 256
|
|
|
|
char label[CMD_MAXLABELLEN];
|
|
|
|
};
|
2007-04-27 21:58:48 +04:00
|
|
|
TAILQ_HEAD(cmd_q, cmd);
|
|
|
|
|
2011-05-05 20:40:37 +04:00
|
|
|
struct menu {
|
|
|
|
TAILQ_ENTRY(menu) entry;
|
|
|
|
TAILQ_ENTRY(menu) resultentry;
|
2012-11-07 18:39:44 +04:00
|
|
|
#define MENU_MAXENTRY 200
|
2011-05-05 20:40:37 +04:00
|
|
|
char text[MENU_MAXENTRY + 1];
|
|
|
|
char print[MENU_MAXENTRY + 1];
|
|
|
|
void *ctx;
|
|
|
|
short dummy;
|
|
|
|
short abort;
|
|
|
|
};
|
|
|
|
TAILQ_HEAD(menu_q, menu);
|
|
|
|
|
2007-04-27 21:58:48 +04:00
|
|
|
struct conf {
|
2008-03-23 18:09:21 +03:00
|
|
|
struct keybinding_q keybindingq;
|
|
|
|
struct autogroupwin_q autogroupq;
|
|
|
|
struct winmatch_q ignoreq;
|
|
|
|
struct cmd_q cmdq;
|
2008-06-15 01:48:54 +04:00
|
|
|
struct mousebinding_q mousebindingq;
|
2011-05-05 20:40:37 +04:00
|
|
|
#define CONF_STICKY_GROUPS 0x0001
|
2008-03-23 18:09:21 +03:00
|
|
|
int flags;
|
2011-05-05 20:40:37 +04:00
|
|
|
#define CONF_BWIDTH 1
|
2009-01-21 18:04:38 +03:00
|
|
|
int bwidth;
|
2011-05-05 20:40:37 +04:00
|
|
|
#define CONF_MAMOUNT 1
|
2009-02-08 00:07:00 +03:00
|
|
|
int mamount;
|
2011-06-24 10:06:24 +04:00
|
|
|
#define CONF_SNAPDIST 0
|
|
|
|
int snapdist;
|
2010-01-27 06:04:50 +03:00
|
|
|
struct gap gap;
|
2013-01-04 20:27:58 +04:00
|
|
|
char *color[CWM_COLOR_BORDER_MAX];
|
2012-12-17 06:28:45 +04:00
|
|
|
char *menucolor[CWM_COLOR_MENU_MAX];
|
2008-03-23 18:09:21 +03:00
|
|
|
char termpath[MAXPATHLEN];
|
|
|
|
char lockpath[MAXPATHLEN];
|
2012-12-18 03:54:57 +04:00
|
|
|
char known_hosts[MAXPATHLEN];
|
2011-09-03 13:17:16 +04:00
|
|
|
#define CONF_FONT "sans-serif:pixelsize=14:bold"
|
|
|
|
char *font;
|
2007-04-27 21:58:48 +04:00
|
|
|
};
|
|
|
|
|
|
|
|
/* MWM hints */
|
|
|
|
struct mwm_hints {
|
2008-04-16 00:24:41 +04:00
|
|
|
u_long flags;
|
|
|
|
u_long functions;
|
|
|
|
u_long decorations;
|
2007-04-27 21:58:48 +04:00
|
|
|
};
|
2011-05-05 20:40:37 +04:00
|
|
|
#define MWM_NUMHINTS 3
|
2008-04-16 00:24:41 +04:00
|
|
|
#define PROP_MWM_HINTS_ELEMENTS 3
|
2011-05-05 20:40:37 +04:00
|
|
|
#define MWM_HINTS_DECORATIONS (1<<1)
|
|
|
|
#define MWM_DECOR_ALL (1<<0)
|
|
|
|
#define MWM_DECOR_BORDER (1<<1)
|
2008-04-16 00:24:41 +04:00
|
|
|
|
|
|
|
__dead void usage(void);
|
|
|
|
|
2011-05-05 20:40:37 +04:00
|
|
|
void client_applysizehints(struct client_ctx *);
|
|
|
|
struct client_ctx *client_current(void);
|
2011-06-24 09:40:09 +04:00
|
|
|
void client_cycle(struct screen_ctx *, int);
|
2012-12-17 06:53:29 +04:00
|
|
|
void client_cycle_leave(struct screen_ctx *,
|
|
|
|
struct client_ctx *);
|
2011-06-24 09:40:09 +04:00
|
|
|
void client_delete(struct client_ctx *);
|
2011-05-05 20:40:37 +04:00
|
|
|
void client_draw_border(struct client_ctx *);
|
|
|
|
struct client_ctx *client_find(Window);
|
2011-05-07 21:15:37 +04:00
|
|
|
void client_freeze(struct client_ctx *);
|
2011-05-05 20:40:37 +04:00
|
|
|
void client_getsizehints(struct client_ctx *);
|
|
|
|
void client_hide(struct client_ctx *);
|
2013-01-04 20:30:03 +04:00
|
|
|
void client_hmaximize(struct client_ctx *);
|
2013-01-08 19:16:04 +04:00
|
|
|
void client_htile(struct client_ctx *);
|
2011-05-05 20:40:37 +04:00
|
|
|
void client_leave(struct client_ctx *);
|
2008-04-16 00:24:41 +04:00
|
|
|
void client_lower(struct client_ctx *);
|
2011-05-05 20:40:37 +04:00
|
|
|
void client_map(struct client_ctx *);
|
|
|
|
void client_maximize(struct client_ctx *);
|
2008-04-16 00:24:41 +04:00
|
|
|
void client_move(struct client_ctx *);
|
2011-05-05 20:40:37 +04:00
|
|
|
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 *);
|
2012-09-09 23:47:47 +04:00
|
|
|
void client_resize(struct client_ctx *, int);
|
2008-04-16 00:24:41 +04:00
|
|
|
void client_send_delete(struct client_ctx *);
|
2011-05-05 20:40:37 +04:00
|
|
|
void client_setactive(struct client_ctx *, int);
|
2008-04-16 00:24:41 +04:00
|
|
|
void client_setname(struct client_ctx *);
|
2011-06-24 10:06:24 +04:00
|
|
|
int client_snapcalc(int, int, int, int, int);
|
2011-09-13 12:41:57 +04:00
|
|
|
void client_transient(struct client_ctx *);
|
2011-05-05 20:40:37 +04:00
|
|
|
void client_unhide(struct client_ctx *);
|
2013-01-04 20:30:03 +04:00
|
|
|
void client_vmaximize(struct client_ctx *);
|
2013-01-08 19:16:04 +04:00
|
|
|
void client_vtile(struct client_ctx *);
|
2011-05-05 20:40:37 +04:00
|
|
|
void client_warp(struct client_ctx *);
|
2008-04-16 00:24:41 +04:00
|
|
|
|
2011-05-05 20:40:37 +04:00
|
|
|
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 *);
|
2008-04-16 00:24:41 +04:00
|
|
|
|
2011-05-05 20:40:37 +04:00
|
|
|
void search_match_client(struct menu_q *, struct menu_q *,
|
|
|
|
char *);
|
|
|
|
void search_match_exec(struct menu_q *, struct menu_q *,
|
|
|
|
char *);
|
2012-12-17 06:53:29 +04:00
|
|
|
void search_match_exec_path(struct menu_q *,
|
|
|
|
struct menu_q *, char *);
|
2012-11-07 18:39:44 +04:00
|
|
|
void search_match_path_any(struct menu_q *, struct menu_q *,
|
|
|
|
char *);
|
2011-05-05 20:40:37 +04:00
|
|
|
void search_match_text(struct menu_q *, struct menu_q *,
|
|
|
|
char *);
|
|
|
|
void search_print_client(struct menu *, int);
|
2007-04-27 21:58:48 +04:00
|
|
|
|
2013-01-02 20:26:34 +04:00
|
|
|
struct geom screen_find_xinerama(struct screen_ctx *, int, int);
|
2008-04-16 00:24:41 +04:00
|
|
|
struct screen_ctx *screen_fromroot(Window);
|
2013-04-12 18:46:30 +04:00
|
|
|
void screen_init(u_int);
|
2012-07-05 21:35:13 +04:00
|
|
|
void screen_update_geometry(struct screen_ctx *);
|
2011-05-05 20:40:37 +04:00
|
|
|
void screen_updatestackingorder(struct screen_ctx *);
|
2008-04-16 00:24:41 +04:00
|
|
|
|
2009-01-23 21:58:40 +03:00
|
|
|
void kbfunc_client_cycle(struct client_ctx *, union arg *);
|
2011-05-05 20:40:37 +04:00
|
|
|
void kbfunc_client_cyclegroup(struct client_ctx *,
|
|
|
|
union arg *);
|
2009-01-23 21:58:40 +03:00
|
|
|
void kbfunc_client_delete(struct client_ctx *, union arg *);
|
2011-05-07 21:15:37 +04:00
|
|
|
void kbfunc_client_freeze(struct client_ctx *, union arg *);
|
2009-01-23 21:58:40 +03:00
|
|
|
void kbfunc_client_group(struct client_ctx *, union arg *);
|
2009-05-14 20:24:04 +04:00
|
|
|
void kbfunc_client_grouponly(struct client_ctx *,
|
|
|
|
union arg *);
|
2011-05-05 20:40:37 +04:00
|
|
|
void kbfunc_client_grouptoggle(struct client_ctx *,
|
2009-01-23 21:58:40 +03:00
|
|
|
union arg *);
|
2011-05-05 20:40:37 +04:00
|
|
|
void kbfunc_client_hide(struct client_ctx *, union arg *);
|
|
|
|
void kbfunc_client_hmaximize(struct client_ctx *,
|
2009-01-23 21:58:40 +03:00
|
|
|
union arg *);
|
2011-05-05 20:40:37 +04:00
|
|
|
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 *,
|
2009-01-23 21:58:40 +03:00
|
|
|
union arg *);
|
2009-05-17 21:04:59 +04:00
|
|
|
void kbfunc_client_movetogroup(struct client_ctx *,
|
|
|
|
union arg *);
|
2011-05-05 20:40:37 +04:00
|
|
|
void kbfunc_client_nogroup(struct client_ctx *,
|
2009-01-23 21:58:40 +03:00
|
|
|
union arg *);
|
2011-05-05 20:40:37 +04:00
|
|
|
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 *);
|
2009-01-23 21:58:40 +03:00
|
|
|
void kbfunc_client_vmaximize(struct client_ctx *,
|
|
|
|
union arg *);
|
2011-05-05 20:40:37 +04:00
|
|
|
void kbfunc_cmdexec(struct client_ctx *, union arg *);
|
2009-01-23 21:58:40 +03:00
|
|
|
void kbfunc_exec(struct client_ctx *, union arg *);
|
2011-05-05 20:40:37 +04:00
|
|
|
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 *);
|
2012-10-31 23:30:19 +04:00
|
|
|
void kbfunc_restart(struct client_ctx *, union arg *);
|
2009-01-23 21:58:40 +03:00
|
|
|
void kbfunc_ssh(struct client_ctx *, union arg *);
|
|
|
|
void kbfunc_term(struct client_ctx *, union arg *);
|
2013-01-08 19:16:04 +04:00
|
|
|
void kbfunc_tile(struct client_ctx *, union arg *);
|
2008-04-16 00:24:41 +04:00
|
|
|
|
2011-05-05 20:40:37 +04:00
|
|
|
void mousefunc_menu_cmd(struct client_ctx *, void *);
|
|
|
|
void mousefunc_menu_group(struct client_ctx *, void *);
|
|
|
|
void mousefunc_menu_unhide(struct client_ctx *, void *);
|
2008-06-15 01:48:54 +04:00
|
|
|
void mousefunc_window_grouptoggle(struct client_ctx *,
|
|
|
|
void *);
|
2008-06-26 02:44:42 +04:00
|
|
|
void mousefunc_window_hide(struct client_ctx *, void *);
|
2011-05-05 20:40:37 +04:00
|
|
|
void mousefunc_window_lower(struct client_ctx *, void *);
|
|
|
|
void mousefunc_window_move(struct client_ctx *, void *);
|
2011-06-24 10:09:26 +04:00
|
|
|
void mousefunc_window_raise(struct client_ctx *, void *);
|
2011-05-05 20:40:37 +04:00
|
|
|
void mousefunc_window_resize(struct client_ctx *, void *);
|
2008-06-15 01:48:54 +04:00
|
|
|
|
2011-05-05 20:40:37 +04:00
|
|
|
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 *);
|
2012-12-17 18:32:39 +04:00
|
|
|
void menuq_clear(struct menu_q *);
|
2008-04-16 00:24:41 +04:00
|
|
|
|
2011-05-05 20:40:37 +04:00
|
|
|
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 *);
|
2012-12-19 19:21:34 +04:00
|
|
|
void conf_cmd_add(struct conf *, char *, char *);
|
2011-05-05 20:40:37 +04:00
|
|
|
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_ungrab(struct conf *, struct keybinding *);
|
2008-04-16 00:24:41 +04:00
|
|
|
|
2009-12-15 06:26:22 +03:00
|
|
|
int font_ascent(struct screen_ctx *);
|
|
|
|
int font_descent(struct screen_ctx *);
|
2011-05-05 20:40:37 +04:00
|
|
|
void font_draw(struct screen_ctx *, const char *, int,
|
2012-12-17 06:28:45 +04:00
|
|
|
Drawable, int, int, int);
|
2009-12-15 06:26:22 +03:00
|
|
|
u_int font_height(struct screen_ctx *);
|
2012-11-28 18:14:44 +04:00
|
|
|
void font_init(struct screen_ctx *, const char *,
|
2012-12-17 06:28:45 +04:00
|
|
|
const char **);
|
2009-12-08 19:52:17 +03:00
|
|
|
int font_width(struct screen_ctx *, const char *, int);
|
2008-06-15 06:47:46 +04:00
|
|
|
|
2011-05-05 20:40:37 +04:00
|
|
|
void xev_loop(void);
|
2007-04-27 21:58:48 +04:00
|
|
|
|
2011-05-05 20:40:37 +04:00
|
|
|
void xu_btn_grab(Window, int, u_int);
|
|
|
|
void xu_btn_ungrab(Window, int, u_int);
|
|
|
|
void xu_configure(struct client_ctx *);
|
|
|
|
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);
|
2012-12-17 06:53:29 +04:00
|
|
|
void xu_xorcolor(XRenderColor, XRenderColor,
|
|
|
|
XRenderColor *);
|
2012-05-16 05:17:14 +04:00
|
|
|
|
|
|
|
void xu_ewmh_net_supported(struct screen_ctx *);
|
|
|
|
void xu_ewmh_net_supported_wm_check(struct screen_ctx *);
|
2012-07-03 17:49:03 +04:00
|
|
|
void xu_ewmh_net_desktop_geometry(struct screen_ctx *);
|
|
|
|
void xu_ewmh_net_workarea(struct screen_ctx *);
|
|
|
|
void xu_ewmh_net_client_list(struct screen_ctx *);
|
|
|
|
void xu_ewmh_net_active_window(struct screen_ctx *, Window);
|
|
|
|
void xu_ewmh_net_wm_desktop_viewport(struct screen_ctx *);
|
|
|
|
void xu_ewmh_net_wm_number_of_desktops(struct screen_ctx *);
|
|
|
|
void xu_ewmh_net_showing_desktop(struct screen_ctx *);
|
|
|
|
void xu_ewmh_net_virtual_roots(struct screen_ctx *);
|
|
|
|
void xu_ewmh_net_current_desktop(struct screen_ctx *, long);
|
2012-12-17 06:53:29 +04:00
|
|
|
void xu_ewmh_net_desktop_names(struct screen_ctx *, char *,
|
|
|
|
int);
|
2012-07-03 17:49:03 +04:00
|
|
|
|
|
|
|
void xu_ewmh_net_wm_desktop(struct client_ctx *);
|
|
|
|
|
2011-05-05 20:40:37 +04:00
|
|
|
void u_exec(char *);
|
2011-06-24 09:40:09 +04:00
|
|
|
void u_spawn(char *);
|
2011-05-05 20:40:37 +04:00
|
|
|
|
|
|
|
void *xcalloc(size_t, size_t);
|
|
|
|
void *xmalloc(size_t);
|
|
|
|
char *xstrdup(const char *);
|
2012-11-28 18:32:44 +04:00
|
|
|
int xasprintf(char **, const char *, ...)
|
|
|
|
__attribute__((__format__ (printf, 2, 3)))
|
|
|
|
__attribute__((__nonnull__ (2)));
|
2011-05-05 20:40:37 +04:00
|
|
|
|
|
|
|
/* Externs */
|
2007-05-28 22:34:27 +04:00
|
|
|
extern Display *X_Dpy;
|
2007-04-27 21:58:48 +04:00
|
|
|
|
2007-05-28 22:34:27 +04:00
|
|
|
extern Cursor Cursor_default;
|
2011-06-24 10:52:23 +04:00
|
|
|
extern Cursor Cursor_move;
|
|
|
|
extern Cursor Cursor_normal;
|
2007-05-28 22:34:27 +04:00
|
|
|
extern Cursor Cursor_question;
|
2011-06-24 10:52:23 +04:00
|
|
|
extern Cursor Cursor_resize;
|
2007-04-27 21:58:48 +04:00
|
|
|
|
2007-05-28 22:34:27 +04:00
|
|
|
extern struct screen_ctx_q Screenq;
|
|
|
|
extern struct client_ctx_q Clientq;
|
2011-05-05 20:40:37 +04:00
|
|
|
extern struct conf Conf;
|
2012-12-18 03:03:41 +04:00
|
|
|
extern char *homedir;
|
2007-04-27 21:58:48 +04:00
|
|
|
|
2012-11-29 07:34:19 +04:00
|
|
|
extern int HasRandr, Randr_ev;
|
2007-04-27 21:58:48 +04:00
|
|
|
|
2012-07-03 17:49:03 +04:00
|
|
|
enum {
|
|
|
|
WM_STATE,
|
|
|
|
WM_DELETE_WINDOW,
|
|
|
|
WM_TAKE_FOCUS,
|
|
|
|
WM_PROTOCOLS,
|
|
|
|
_MOTIF_WM_HINTS,
|
|
|
|
UTF8_STRING,
|
|
|
|
CWMH_NITEMS
|
|
|
|
};
|
|
|
|
enum {
|
|
|
|
_NET_SUPPORTED,
|
|
|
|
_NET_SUPPORTING_WM_CHECK,
|
|
|
|
_NET_ACTIVE_WINDOW,
|
|
|
|
_NET_CLIENT_LIST,
|
|
|
|
_NET_NUMBER_OF_DESKTOPS,
|
|
|
|
_NET_CURRENT_DESKTOP,
|
|
|
|
_NET_DESKTOP_VIEWPORT,
|
|
|
|
_NET_DESKTOP_GEOMETRY,
|
|
|
|
_NET_VIRTUAL_ROOTS,
|
|
|
|
_NET_SHOWING_DESKTOP,
|
|
|
|
_NET_DESKTOP_NAMES,
|
|
|
|
_NET_WORKAREA,
|
|
|
|
_NET_WM_NAME,
|
|
|
|
_NET_WM_DESKTOP,
|
|
|
|
EWMH_NITEMS
|
|
|
|
};
|
|
|
|
struct atom_ctx {
|
|
|
|
char *name;
|
|
|
|
Atom atom;
|
|
|
|
};
|
|
|
|
extern struct atom_ctx cwmh[CWMH_NITEMS];
|
|
|
|
extern struct atom_ctx ewmh[EWMH_NITEMS];
|
2009-01-22 18:26:33 +03:00
|
|
|
|
2007-04-27 21:58:48 +04:00
|
|
|
#endif /* _CALMWM_H_ */
|