cvsimport

This commit is contained in:
okan
2013-07-10 14:15:58 +00:00
10 changed files with 143 additions and 127 deletions

View File

@@ -102,7 +102,6 @@ main(int argc, char **argv)
conf_path = NULL; conf_path = NULL;
} }
conf_init(&Conf); conf_init(&Conf);
if (conf_path && (parse_config(conf_path, &Conf) == -1)) if (conf_path && (parse_config(conf_path, &Conf) == -1))
warnx("config file %s has errors, not loading", conf_path); warnx("config file %s has errors, not loading", conf_path);
@@ -121,8 +120,7 @@ x_init(const char *dpyname)
int i; int i;
if ((X_Dpy = XOpenDisplay(dpyname)) == NULL) if ((X_Dpy = XOpenDisplay(dpyname)) == NULL)
errx(1, "unable to open display \"%s\"", errx(1, "unable to open display \"%s\"", XDisplayName(dpyname));
XDisplayName(dpyname));
XSetErrorHandler(x_wmerrorhandler); XSetErrorHandler(x_wmerrorhandler);
XSelectInput(X_Dpy, DefaultRootWindow(X_Dpy), SubstructureRedirectMask); XSelectInput(X_Dpy, DefaultRootWindow(X_Dpy), SubstructureRedirectMask);

View File

@@ -270,7 +270,7 @@ struct mousebinding {
u_int button; u_int button;
#define MOUSEBIND_CTX_ROOT 0x0001 #define MOUSEBIND_CTX_ROOT 0x0001
#define MOUSEBIND_CTX_WIN 0x0002 #define MOUSEBIND_CTX_WIN 0x0002
int context; int flags;
}; };
TAILQ_HEAD(mousebinding_q, mousebinding); TAILQ_HEAD(mousebinding_q, mousebinding);
@@ -372,7 +372,7 @@ void group_autogroup(struct client_ctx *);
void group_cycle(struct screen_ctx *, int); void group_cycle(struct screen_ctx *, int);
void group_hidetoggle(struct screen_ctx *, int); void group_hidetoggle(struct screen_ctx *, int);
void group_init(struct screen_ctx *); void group_init(struct screen_ctx *);
void group_menu(XButtonEvent *); void group_menu(struct screen_ctx *);
void group_movetogroup(struct client_ctx *, int); void group_movetogroup(struct client_ctx *, int);
void group_only(struct screen_ctx *, int); void group_only(struct screen_ctx *, int);
void group_sticky(struct client_ctx *); void group_sticky(struct client_ctx *);
@@ -415,6 +415,8 @@ void kbfunc_client_label(struct client_ctx *, union arg *);
void kbfunc_client_lower(struct client_ctx *, union arg *); void kbfunc_client_lower(struct client_ctx *, union arg *);
void kbfunc_client_maximize(struct client_ctx *, void kbfunc_client_maximize(struct client_ctx *,
union arg *); union arg *);
void kbfunc_client_moveresize(struct client_ctx *,
union arg *);
void kbfunc_client_movetogroup(struct client_ctx *, void kbfunc_client_movetogroup(struct client_ctx *,
union arg *); union arg *);
void kbfunc_client_nogroup(struct client_ctx *, void kbfunc_client_nogroup(struct client_ctx *,
@@ -428,23 +430,26 @@ void kbfunc_cmdexec(struct client_ctx *, union arg *);
void kbfunc_exec(struct client_ctx *, union arg *); void kbfunc_exec(struct client_ctx *, union arg *);
void kbfunc_lock(struct client_ctx *, union arg *); void kbfunc_lock(struct client_ctx *, union arg *);
void kbfunc_menu_search(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_quit_wm(struct client_ctx *, union arg *);
void kbfunc_restart(struct client_ctx *, union arg *); void kbfunc_restart(struct client_ctx *, union arg *);
void kbfunc_ssh(struct client_ctx *, union arg *); void kbfunc_ssh(struct client_ctx *, union arg *);
void kbfunc_term(struct client_ctx *, union arg *); void kbfunc_term(struct client_ctx *, union arg *);
void kbfunc_tile(struct client_ctx *, union arg *); void kbfunc_tile(struct client_ctx *, union arg *);
void mousefunc_client_cyclegroup(struct client_ctx *,
void *);
void mousefunc_client_grouptoggle(struct client_ctx *,
void *);
void mousefunc_client_hide(struct client_ctx *, void *);
void mousefunc_client_lower(struct client_ctx *, void *);
void mousefunc_client_move(struct client_ctx *, void *);
void mousefunc_client_raise(struct client_ctx *, void *);
void mousefunc_client_rcyclegroup(struct client_ctx *,
void *);
void mousefunc_client_resize(struct client_ctx *, void *);
void mousefunc_menu_cmd(struct client_ctx *, void *); void mousefunc_menu_cmd(struct client_ctx *, void *);
void mousefunc_menu_group(struct client_ctx *, void *); void mousefunc_menu_group(struct client_ctx *, void *);
void mousefunc_menu_unhide(struct client_ctx *, void *); void mousefunc_menu_unhide(struct client_ctx *, void *);
void mousefunc_window_grouptoggle(struct client_ctx *,
void *);
void mousefunc_window_hide(struct client_ctx *, void *);
void mousefunc_window_lower(struct client_ctx *, void *);
void mousefunc_window_move(struct client_ctx *, void *);
void mousefunc_window_raise(struct client_ctx *, void *);
void mousefunc_window_resize(struct client_ctx *, void *);
struct menu *menu_filter(struct screen_ctx *, struct menu_q *, struct menu *menu_filter(struct screen_ctx *, struct menu_q *,
char *, char *, int, char *, char *, int,
@@ -455,7 +460,8 @@ void menuq_clear(struct menu_q *);
int parse_config(const char *, struct conf *); int parse_config(const char *, struct conf *);
void conf_autogroup(struct conf *, int, char *); void conf_autogroup(struct conf *, int, char *);
void conf_bindname(struct conf *, char *, char *); void conf_bind_kbd(struct conf *, char *, char *);
int conf_bind_mouse(struct conf *, char *, char *);
void conf_clear(struct conf *); void conf_clear(struct conf *);
void conf_client(struct client_ctx *); void conf_client(struct client_ctx *);
void conf_cmd_add(struct conf *, char *, char *); void conf_cmd_add(struct conf *, char *, char *);
@@ -464,7 +470,6 @@ void conf_grab_kbd(Window);
void conf_grab_mouse(Window); void conf_grab_mouse(Window);
void conf_init(struct conf *); void conf_init(struct conf *);
void conf_ignore(struct conf *, char *); void conf_ignore(struct conf *, char *);
int conf_mousebind(struct conf *, char *, char *);
void conf_screen(struct screen_ctx *); void conf_screen(struct screen_ctx *);
void xev_loop(void); void xev_loop(void);

161
conf.c
View File

@@ -31,8 +31,9 @@
#include "calmwm.h" #include "calmwm.h"
static void conf_mouseunbind(struct conf *, struct mousebinding *); static const char *conf_bind_getmask(const char *, u_int *);
static void conf_unbind(struct conf *, struct keybinding *); static void conf_unbind_kbd(struct conf *, struct keybinding *);
static void conf_unbind_mouse(struct conf *, struct mousebinding *);
/* Add an command menu entry to the end of the menu */ /* Add an command menu entry to the end of the menu */
void void
@@ -98,7 +99,7 @@ static char *color_binds[] = {
void void
conf_screen(struct screen_ctx *sc) conf_screen(struct screen_ctx *sc)
{ {
int i; u_int i;
XftColor xc; XftColor xc;
sc->gap = Conf.gap; sc->gap = Conf.gap;
@@ -144,7 +145,7 @@ conf_screen(struct screen_ctx *sc)
static struct { static struct {
char *key; char *key;
char *func; char *func;
} kb_binds[] = { } kbd_binds[] = {
{ "CM-Return", "terminal" }, { "CM-Return", "terminal" },
{ "CM-Delete", "lock" }, { "CM-Delete", "lock" },
{ "M-question", "exec" }, { "M-question", "exec" },
@@ -203,7 +204,7 @@ static struct {
{ "CS-Up", "bigptrmoveup" }, { "CS-Up", "bigptrmoveup" },
{ "CS-Right", "bigptrmoveright" }, { "CS-Right", "bigptrmoveright" },
}, },
m_binds[] = { mouse_binds[] = {
{ "1", "menu_unhide" }, { "1", "menu_unhide" },
{ "2", "menu_group" }, { "2", "menu_group" },
{ "3", "menu_cmd" }, { "3", "menu_cmd" },
@@ -231,11 +232,11 @@ conf_init(struct conf *c)
TAILQ_INIT(&c->autogroupq); TAILQ_INIT(&c->autogroupq);
TAILQ_INIT(&c->mousebindingq); TAILQ_INIT(&c->mousebindingq);
for (i = 0; i < nitems(kb_binds); i++) for (i = 0; i < nitems(kbd_binds); i++)
conf_bindname(c, kb_binds[i].key, kb_binds[i].func); conf_bind_kbd(c, kbd_binds[i].key, kbd_binds[i].func);
for (i = 0; i < nitems(m_binds); i++) for (i = 0; i < nitems(mouse_binds); i++)
conf_mousebind(c, m_binds[i].key, m_binds[i].func); conf_bind_mouse(c, mouse_binds[i].key, mouse_binds[i].func);
for (i = 0; i < nitems(color_binds); i++) for (i = 0; i < nitems(color_binds); i++)
c->color[i] = xstrdup(color_binds[i]); c->color[i] = xstrdup(color_binds[i]);
@@ -381,50 +382,53 @@ static struct {
{ "ssh", kbfunc_ssh, 0, {0} }, { "ssh", kbfunc_ssh, 0, {0} },
{ "terminal", kbfunc_term, 0, {0} }, { "terminal", kbfunc_term, 0, {0} },
{ "lock", kbfunc_lock, 0, {0} }, { "lock", kbfunc_lock, 0, {0} },
{ "moveup", kbfunc_moveresize, KBFLAG_NEEDCLIENT, { "moveup", kbfunc_client_moveresize, KBFLAG_NEEDCLIENT,
{.i = (CWM_UP|CWM_MOVE)} }, {.i = (CWM_UP|CWM_MOVE)} },
{ "movedown", kbfunc_moveresize, KBFLAG_NEEDCLIENT, { "movedown", kbfunc_client_moveresize, KBFLAG_NEEDCLIENT,
{.i = (CWM_DOWN|CWM_MOVE)} }, {.i = (CWM_DOWN|CWM_MOVE)} },
{ "moveright", kbfunc_moveresize, KBFLAG_NEEDCLIENT, { "moveright", kbfunc_client_moveresize, KBFLAG_NEEDCLIENT,
{.i = (CWM_RIGHT|CWM_MOVE)} }, {.i = (CWM_RIGHT|CWM_MOVE)} },
{ "moveleft", kbfunc_moveresize, KBFLAG_NEEDCLIENT, { "moveleft", kbfunc_client_moveresize, KBFLAG_NEEDCLIENT,
{.i = (CWM_LEFT|CWM_MOVE)} }, {.i = (CWM_LEFT|CWM_MOVE)} },
{ "bigmoveup", kbfunc_moveresize, KBFLAG_NEEDCLIENT, { "bigmoveup", kbfunc_client_moveresize, KBFLAG_NEEDCLIENT,
{.i = (CWM_UP|CWM_MOVE|CWM_BIGMOVE)} }, {.i = (CWM_UP|CWM_MOVE|CWM_BIGMOVE)} },
{ "bigmovedown", kbfunc_moveresize, KBFLAG_NEEDCLIENT, { "bigmovedown", kbfunc_client_moveresize, KBFLAG_NEEDCLIENT,
{.i = (CWM_DOWN|CWM_MOVE|CWM_BIGMOVE)} }, {.i = (CWM_DOWN|CWM_MOVE|CWM_BIGMOVE)} },
{ "bigmoveright", kbfunc_moveresize, KBFLAG_NEEDCLIENT, { "bigmoveright", kbfunc_client_moveresize, KBFLAG_NEEDCLIENT,
{.i = (CWM_RIGHT|CWM_MOVE|CWM_BIGMOVE)} }, {.i = (CWM_RIGHT|CWM_MOVE|CWM_BIGMOVE)} },
{ "bigmoveleft", kbfunc_moveresize, KBFLAG_NEEDCLIENT, { "bigmoveleft", kbfunc_client_moveresize, KBFLAG_NEEDCLIENT,
{.i = (CWM_LEFT|CWM_MOVE|CWM_BIGMOVE)} }, {.i = (CWM_LEFT|CWM_MOVE|CWM_BIGMOVE)} },
{ "resizeup", kbfunc_moveresize, KBFLAG_NEEDCLIENT, { "resizeup", kbfunc_client_moveresize, KBFLAG_NEEDCLIENT,
{.i = (CWM_UP|CWM_RESIZE)} }, {.i = (CWM_UP|CWM_RESIZE)} },
{ "resizedown", kbfunc_moveresize, KBFLAG_NEEDCLIENT, { "resizedown", kbfunc_client_moveresize, KBFLAG_NEEDCLIENT,
{.i = (CWM_DOWN|CWM_RESIZE)} }, {.i = (CWM_DOWN|CWM_RESIZE)} },
{ "resizeright", kbfunc_moveresize, KBFLAG_NEEDCLIENT, { "resizeright", kbfunc_client_moveresize, KBFLAG_NEEDCLIENT,
{.i = (CWM_RIGHT|CWM_RESIZE)} }, {.i = (CWM_RIGHT|CWM_RESIZE)} },
{ "resizeleft", kbfunc_moveresize, KBFLAG_NEEDCLIENT, { "resizeleft", kbfunc_client_moveresize, KBFLAG_NEEDCLIENT,
{.i = (CWM_LEFT|CWM_RESIZE)} }, {.i = (CWM_LEFT|CWM_RESIZE)} },
{ "bigresizeup", kbfunc_moveresize, KBFLAG_NEEDCLIENT, { "bigresizeup", kbfunc_client_moveresize, KBFLAG_NEEDCLIENT,
{.i = (CWM_UP|CWM_RESIZE|CWM_BIGMOVE)} }, {.i = (CWM_UP|CWM_RESIZE|CWM_BIGMOVE)} },
{ "bigresizedown", kbfunc_moveresize, KBFLAG_NEEDCLIENT, { "bigresizedown", kbfunc_client_moveresize, KBFLAG_NEEDCLIENT,
{.i = (CWM_DOWN|CWM_RESIZE|CWM_BIGMOVE)} }, {.i = (CWM_DOWN|CWM_RESIZE|CWM_BIGMOVE)} },
{ "bigresizeright", kbfunc_moveresize, KBFLAG_NEEDCLIENT, { "bigresizeright", kbfunc_client_moveresize, KBFLAG_NEEDCLIENT,
{.i = (CWM_RIGHT|CWM_RESIZE|CWM_BIGMOVE)} }, {.i = (CWM_RIGHT|CWM_RESIZE|CWM_BIGMOVE)} },
{ "bigresizeleft", kbfunc_moveresize, KBFLAG_NEEDCLIENT, { "bigresizeleft", kbfunc_client_moveresize, KBFLAG_NEEDCLIENT,
{.i = (CWM_LEFT|CWM_RESIZE|CWM_BIGMOVE)} }, {.i = (CWM_LEFT|CWM_RESIZE|CWM_BIGMOVE)} },
{ "ptrmoveup", kbfunc_moveresize, 0, {.i = (CWM_UP|CWM_PTRMOVE)} }, { "ptrmoveup", kbfunc_client_moveresize, 0,
{ "ptrmovedown", kbfunc_moveresize, 0, {.i = (CWM_DOWN|CWM_PTRMOVE)} }, {.i = (CWM_UP|CWM_PTRMOVE)} },
{ "ptrmoveleft", kbfunc_moveresize, 0, {.i = (CWM_LEFT|CWM_PTRMOVE)} }, { "ptrmovedown", kbfunc_client_moveresize, 0,
{ "ptrmoveright", kbfunc_moveresize, 0, {.i = (CWM_DOWN|CWM_PTRMOVE)} },
{ "ptrmoveleft", kbfunc_client_moveresize, 0,
{.i = (CWM_LEFT|CWM_PTRMOVE)} },
{ "ptrmoveright", kbfunc_client_moveresize, 0,
{.i = (CWM_RIGHT|CWM_PTRMOVE)} }, {.i = (CWM_RIGHT|CWM_PTRMOVE)} },
{ "bigptrmoveup", kbfunc_moveresize, 0, { "bigptrmoveup", kbfunc_client_moveresize, 0,
{.i = (CWM_UP|CWM_PTRMOVE|CWM_BIGMOVE)} }, {.i = (CWM_UP|CWM_PTRMOVE|CWM_BIGMOVE)} },
{ "bigptrmovedown", kbfunc_moveresize, 0, { "bigptrmovedown", kbfunc_client_moveresize, 0,
{.i = (CWM_DOWN|CWM_PTRMOVE|CWM_BIGMOVE)} }, {.i = (CWM_DOWN|CWM_PTRMOVE|CWM_BIGMOVE)} },
{ "bigptrmoveleft", kbfunc_moveresize, 0, { "bigptrmoveleft", kbfunc_client_moveresize, 0,
{.i = (CWM_LEFT|CWM_PTRMOVE|CWM_BIGMOVE)} }, {.i = (CWM_LEFT|CWM_PTRMOVE|CWM_BIGMOVE)} },
{ "bigptrmoveright", kbfunc_moveresize, 0, { "bigptrmoveright", kbfunc_client_moveresize, 0,
{.i = (CWM_RIGHT|CWM_PTRMOVE|CWM_BIGMOVE)} }, {.i = (CWM_RIGHT|CWM_PTRMOVE|CWM_BIGMOVE)} },
{ "htile", kbfunc_tile, KBFLAG_NEEDCLIENT, { "htile", kbfunc_tile, KBFLAG_NEEDCLIENT,
{.i = CWM_TILE_HORIZ } }, {.i = CWM_TILE_HORIZ } },
@@ -433,7 +437,7 @@ static struct {
}; };
static struct { static struct {
char chr; char ch;
int mask; int mask;
} bind_mods[] = { } bind_mods[] = {
{ 'C', ControlMask }, { 'C', ControlMask },
@@ -442,27 +446,35 @@ static struct {
{ 'S', ShiftMask }, { 'S', ShiftMask },
}; };
void static const char *
conf_bindname(struct conf *c, char *name, char *binding) conf_bind_getmask(const char *name, u_int *mask)
{ {
struct keybinding *current_binding; char *dash;
char *substring, *tmp; const char *ch;
u_int i; u_int i;
current_binding = xcalloc(1, sizeof(*current_binding)); *mask = 0;
if ((dash = strchr(name, '-')) == NULL)
if ((substring = strchr(name, '-')) != NULL) { return (name);
for (i = 0; i < nitems(bind_mods); i++) { for (i = 0; i < nitems(bind_mods); i++) {
if ((tmp = strchr(name, bind_mods[i].chr)) != if ((ch = strchr(name, bind_mods[i].ch)) != NULL && ch < dash)
NULL && tmp < substring) { *mask |= bind_mods[i].mask;
current_binding->modmask |= bind_mods[i].mask;
}
} }
/* skip past the modifiers */ /* Skip past modifiers. */
substring++; return (dash + 1);
} else }
substring = name;
void
conf_bind_kbd(struct conf *c, char *name, char *binding)
{
struct keybinding *current_binding;
const char *substring;
u_int i, mask;
current_binding = xcalloc(1, sizeof(*current_binding));
substring = conf_bind_getmask(name, &mask);
current_binding->modmask |= mask;
if (substring[0] == '[' && if (substring[0] == '[' &&
substring[strlen(substring)-1] == ']') { substring[strlen(substring)-1] == ']') {
@@ -480,7 +492,7 @@ conf_bindname(struct conf *c, char *name, char *binding)
} }
/* We now have the correct binding, remove duplicates. */ /* We now have the correct binding, remove duplicates. */
conf_unbind(c, current_binding); conf_unbind_kbd(c, current_binding);
if (strcmp("unmap", binding) == 0) { if (strcmp("unmap", binding) == 0) {
free(current_binding); free(current_binding);
@@ -507,7 +519,7 @@ conf_bindname(struct conf *c, char *name, char *binding)
} }
static void static void
conf_unbind(struct conf *c, struct keybinding *unbind) conf_unbind_kbd(struct conf *c, struct keybinding *unbind)
{ {
struct keybinding *key = NULL, *keynxt; struct keybinding *key = NULL, *keynxt;
@@ -529,15 +541,17 @@ conf_unbind(struct conf *c, struct keybinding *unbind)
static struct { static struct {
char *tag; char *tag;
void (*handler)(struct client_ctx *, void *); void (*handler)(struct client_ctx *, void *);
int context; int flags;
} name_to_mousefunc[] = { } name_to_mousefunc[] = {
{ "window_move", mousefunc_window_move, MOUSEBIND_CTX_WIN }, { "window_move", mousefunc_client_move, MOUSEBIND_CTX_WIN },
{ "window_resize", mousefunc_window_resize, MOUSEBIND_CTX_WIN }, { "window_resize", mousefunc_client_resize, MOUSEBIND_CTX_WIN },
{ "window_grouptoggle", mousefunc_window_grouptoggle, { "window_grouptoggle", mousefunc_client_grouptoggle,
MOUSEBIND_CTX_WIN }, MOUSEBIND_CTX_WIN },
{ "window_lower", mousefunc_window_lower, MOUSEBIND_CTX_WIN }, { "window_lower", mousefunc_client_lower, MOUSEBIND_CTX_WIN },
{ "window_raise", mousefunc_window_raise, MOUSEBIND_CTX_WIN }, { "window_raise", mousefunc_client_raise, MOUSEBIND_CTX_WIN },
{ "window_hide", mousefunc_window_hide, MOUSEBIND_CTX_WIN }, { "window_hide", mousefunc_client_hide, MOUSEBIND_CTX_WIN },
{ "cyclegroup", mousefunc_client_cyclegroup, MOUSEBIND_CTX_ROOT },
{ "rcyclegroup", mousefunc_client_rcyclegroup, MOUSEBIND_CTX_ROOT },
{ "menu_group", mousefunc_menu_group, MOUSEBIND_CTX_ROOT }, { "menu_group", mousefunc_menu_group, MOUSEBIND_CTX_ROOT },
{ "menu_unhide", mousefunc_menu_unhide, MOUSEBIND_CTX_ROOT }, { "menu_unhide", mousefunc_menu_unhide, MOUSEBIND_CTX_ROOT },
{ "menu_cmd", mousefunc_menu_cmd, MOUSEBIND_CTX_ROOT }, { "menu_cmd", mousefunc_menu_cmd, MOUSEBIND_CTX_ROOT },
@@ -548,28 +562,15 @@ static unsigned int mouse_btns[] = {
}; };
int int
conf_mousebind(struct conf *c, char *name, char *binding) conf_bind_mouse(struct conf *c, char *name, char *binding)
{ {
struct mousebinding *current_binding; struct mousebinding *current_binding;
char *substring, *tmp; const char *errstr, *substring;
u_int button; u_int button, i, mask;
const char *errstr;
u_int i;
current_binding = xcalloc(1, sizeof(*current_binding)); current_binding = xcalloc(1, sizeof(*current_binding));
substring = conf_bind_getmask(name, &mask);
if ((substring = strchr(name, '-')) != NULL) { current_binding->modmask |= mask;
for (i = 0; i < nitems(bind_mods); i++) {
if ((tmp = strchr(name, bind_mods[i].chr)) !=
NULL && tmp < substring) {
current_binding->modmask |= bind_mods[i].mask;
}
}
/* skip past the modifiers */
substring++;
} else
substring = name;
button = strtonum(substring, 1, 5, &errstr); button = strtonum(substring, 1, 5, &errstr);
if (errstr) if (errstr)
@@ -587,7 +588,7 @@ conf_mousebind(struct conf *c, char *name, char *binding)
} }
/* We now have the correct binding, remove duplicates. */ /* We now have the correct binding, remove duplicates. */
conf_mouseunbind(c, current_binding); conf_unbind_mouse(c, current_binding);
if (strcmp("unmap", binding) == 0) { if (strcmp("unmap", binding) == 0) {
free(current_binding); free(current_binding);
@@ -598,8 +599,8 @@ conf_mousebind(struct conf *c, char *name, char *binding)
if (strcmp(name_to_mousefunc[i].tag, binding) != 0) if (strcmp(name_to_mousefunc[i].tag, binding) != 0)
continue; continue;
current_binding->context = name_to_mousefunc[i].context;
current_binding->callback = name_to_mousefunc[i].handler; current_binding->callback = name_to_mousefunc[i].handler;
current_binding->flags = name_to_mousefunc[i].flags;
TAILQ_INSERT_TAIL(&c->mousebindingq, current_binding, entry); TAILQ_INSERT_TAIL(&c->mousebindingq, current_binding, entry);
return (1); return (1);
} }
@@ -608,7 +609,7 @@ conf_mousebind(struct conf *c, char *name, char *binding)
} }
static void static void
conf_mouseunbind(struct conf *c, struct mousebinding *unbind) conf_unbind_mouse(struct conf *c, struct mousebinding *unbind)
{ {
struct mousebinding *mb = NULL, *mbnxt; struct mousebinding *mb = NULL, *mbnxt;
@@ -646,7 +647,7 @@ conf_grab_mouse(Window win)
struct mousebinding *mb; struct mousebinding *mb;
TAILQ_FOREACH(mb, &Conf.mousebindingq, entry) { TAILQ_FOREACH(mb, &Conf.mousebindingq, entry) {
if (mb->context != MOUSEBIND_CTX_WIN) if (mb->flags != MOUSEBIND_CTX_WIN)
continue; continue;
xu_btn_grab(win, mb->modmask, mb->button); xu_btn_grab(win, mb->modmask, mb->button);
} }

View File

@@ -14,7 +14,7 @@
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
.\" .\"
.Dd $Mdocdate: January 8 2013 $ .Dd $Mdocdate: June 17 2013 $
.Dt CWMRC 5 .Dt CWMRC 5
.Os .Os
.Sh NAME .Sh NAME
@@ -463,6 +463,10 @@ Raise current window.
Hide current window. Hide current window.
.It window_grouptoggle .It window_grouptoggle
Toggle group membership of current window. Toggle group membership of current window.
.It cyclegroup
Forward cycle through groups.
.It rcyclegroup
Reverse cycle through groups.
.It menu_group .It menu_group
Launch group list. Launch group list.
.It menu_unhide .It menu_unhide

View File

@@ -309,16 +309,13 @@ group_cycle(struct screen_ctx *sc, int flags)
} }
void void
group_menu(XButtonEvent *e) group_menu(struct screen_ctx *sc)
{ {
struct screen_ctx *sc;
struct group_ctx *gc; struct group_ctx *gc;
struct menu *mi; struct menu *mi;
struct menu_q menuq; struct menu_q menuq;
int i; int i;
sc = screen_fromroot(e->root);
TAILQ_INIT(&menuq); TAILQ_INIT(&menuq);
for (i = 0; i < CALMWM_NGROUPS; i++) { for (i = 0; i < CALMWM_NGROUPS; i++) {
@@ -430,8 +427,8 @@ group_update_names(struct screen_ctx *sc)
} }
} }
strings = xmalloc((nstrings < CALMWM_NGROUPS ? CALMWM_NGROUPS : strings = xcalloc((nstrings < CALMWM_NGROUPS ? CALMWM_NGROUPS :
nstrings) * sizeof(*strings)); nstrings), sizeof(*strings));
p = (char *)prop_ret; p = (char *)prop_ret;
while (n < nstrings) { while (n < nstrings) {

View File

@@ -53,7 +53,7 @@ kbfunc_client_raise(struct client_ctx *cc, union arg *arg)
#define TYPEMASK (CWM_MOVE | CWM_RESIZE | CWM_PTRMOVE) #define TYPEMASK (CWM_MOVE | CWM_RESIZE | CWM_PTRMOVE)
#define MOVEMASK (CWM_UP | CWM_DOWN | CWM_LEFT | CWM_RIGHT) #define MOVEMASK (CWM_UP | CWM_DOWN | CWM_LEFT | CWM_RIGHT)
void void
kbfunc_moveresize(struct client_ctx *cc, union arg *arg) kbfunc_client_moveresize(struct client_ctx *cc, union arg *arg)
{ {
struct screen_ctx *sc = cc->sc; struct screen_ctx *sc = cc->sc;
int x, y, flags, amt; int x, y, flags, amt;

View File

@@ -68,7 +68,7 @@ mousefunc_sweep_draw(struct client_ctx *cc)
} }
void void
mousefunc_window_resize(struct client_ctx *cc, void *arg) mousefunc_client_resize(struct client_ctx *cc, void *arg)
{ {
XEvent ev; XEvent ev;
Time ltime = 0; Time ltime = 0;
@@ -125,7 +125,7 @@ mousefunc_window_resize(struct client_ctx *cc, void *arg)
} }
void void
mousefunc_window_move(struct client_ctx *cc, void *arg) mousefunc_client_move(struct client_ctx *cc, void *arg)
{ {
XEvent ev; XEvent ev;
Time ltime = 0; Time ltime = 0;
@@ -177,34 +177,46 @@ mousefunc_window_move(struct client_ctx *cc, void *arg)
} }
void void
mousefunc_window_grouptoggle(struct client_ctx *cc, void *arg) mousefunc_client_grouptoggle(struct client_ctx *cc, void *arg)
{ {
group_sticky_toggle_enter(cc); group_sticky_toggle_enter(cc);
} }
void void
mousefunc_window_lower(struct client_ctx *cc, void *arg) mousefunc_client_lower(struct client_ctx *cc, void *arg)
{ {
client_ptrsave(cc); client_ptrsave(cc);
client_lower(cc); client_lower(cc);
} }
void void
mousefunc_window_raise(struct client_ctx *cc, void *arg) mousefunc_client_raise(struct client_ctx *cc, void *arg)
{ {
client_raise(cc); client_raise(cc);
} }
void void
mousefunc_window_hide(struct client_ctx *cc, void *arg) mousefunc_client_hide(struct client_ctx *cc, void *arg)
{ {
client_hide(cc); client_hide(cc);
} }
void
mousefunc_client_cyclegroup(struct client_ctx *cc, void *arg)
{
group_cycle(cc->sc, CWM_CYCLE);
}
void
mousefunc_client_rcyclegroup(struct client_ctx *cc, void *arg)
{
group_cycle(cc->sc, CWM_RCYCLE);
}
void void
mousefunc_menu_group(struct client_ctx *cc, void *arg) mousefunc_menu_group(struct client_ctx *cc, void *arg)
{ {
group_menu(arg); group_menu(cc->sc);
} }
void void

View File

@@ -157,7 +157,7 @@ main : FONTNAME STRING {
free($2); free($2);
} }
| BIND STRING string { | BIND STRING string {
conf_bindname(conf, $2, $3); conf_bind_kbd(conf, $2, $3);
free($2); free($2);
free($3); free($3);
} }
@@ -173,7 +173,7 @@ main : FONTNAME STRING {
conf->gap.right = $5; conf->gap.right = $5;
} }
| MOUSEBIND STRING string { | MOUSEBIND STRING string {
if (!conf_mousebind(conf, $2, $3)) { if (!conf_bind_mouse(conf, $2, $3)) {
yyerror("invalid mousebind: %s %s", $2, $3); yyerror("invalid mousebind: %s %s", $2, $3);
free($2); free($2);
free($3); free($3);

View File

@@ -238,12 +238,8 @@ xev_handle_buttonpress(XEvent *ee)
{ {
XButtonEvent *e = &ee->xbutton; XButtonEvent *e = &ee->xbutton;
struct client_ctx *cc, fakecc; struct client_ctx *cc, fakecc;
struct screen_ctx *sc;
struct mousebinding *mb; struct mousebinding *mb;
sc = screen_fromroot(e->root);
cc = client_find(e->window);
e->state &= ~IGNOREMODMASK; e->state &= ~IGNOREMODMASK;
TAILQ_FOREACH(mb, &Conf.mousebindingq, entry) { TAILQ_FOREACH(mb, &Conf.mousebindingq, entry) {
@@ -253,13 +249,16 @@ xev_handle_buttonpress(XEvent *ee)
if (mb == NULL) if (mb == NULL)
return; return;
if (mb->context == MOUSEBIND_CTX_ROOT) { if (mb->flags == MOUSEBIND_CTX_WIN) {
if (e->window != sc->rootwin) if (((cc = client_find(e->window)) == NULL) &&
(cc = client_current()) == NULL)
return;
} else { /* (mb->flags == MOUSEBIND_CTX_ROOT) */
if (e->window != e->root)
return; return;
cc = &fakecc; cc = &fakecc;
cc->sc = screen_fromroot(e->window); cc->sc = screen_fromroot(e->window);
} else if (cc == NULL) /* (mb->context == MOUSEBIND_CTX_WIN */ }
return;
(*mb->callback)(cc, e); (*mb->callback)(cc, e);
} }

View File

@@ -291,7 +291,7 @@ xu_ewmh_net_client_list(struct screen_ctx *sc)
if (i == 0) if (i == 0)
return; return;
winlist = xmalloc(i * sizeof(*winlist)); winlist = xcalloc(i, sizeof(*winlist));
TAILQ_FOREACH(cc, &Clientq, entry) TAILQ_FOREACH(cc, &Clientq, entry)
winlist[j++] = cc->win; winlist[j++] = cc->win;
XChangeProperty(X_Dpy, sc->rootwin, ewmh[_NET_CLIENT_LIST].atom, XChangeProperty(X_Dpy, sc->rootwin, ewmh[_NET_CLIENT_LIST].atom,
@@ -382,7 +382,7 @@ xu_ewmh_get_net_wm_state(struct client_ctx *cc, int *n)
(u_char **)&p)) <= 0) (u_char **)&p)) <= 0)
return (NULL); return (NULL);
state = xmalloc(*n * sizeof(Atom)); state = xcalloc(*n, sizeof(Atom));
memcpy(state, p, *n * sizeof(Atom)); memcpy(state, p, *n * sizeof(Atom));
XFree((char *)p); XFree((char *)p);
@@ -393,7 +393,7 @@ void
xu_ewmh_handle_net_wm_state_msg(struct client_ctx *cc, int action, xu_ewmh_handle_net_wm_state_msg(struct client_ctx *cc, int action,
Atom first, Atom second) Atom first, Atom second)
{ {
int i; u_int i;
static struct handlers { static struct handlers {
int atom; int atom;
int property; int property;
@@ -449,7 +449,7 @@ xu_ewmh_set_net_wm_state(struct client_ctx *cc)
int n, i, j; int n, i, j;
oatoms = xu_ewmh_get_net_wm_state(cc, &n); oatoms = xu_ewmh_get_net_wm_state(cc, &n);
atoms = xmalloc((n + _NET_WM_STATES_NITEMS) * sizeof(Atom)); atoms = xcalloc((n + _NET_WM_STATES_NITEMS), sizeof(Atom));
for (i = j = 0; i < n; i++) { for (i = j = 0; i < n; i++) {
if (oatoms[i] != ewmh[_NET_WM_STATE_MAXIMIZED_HORZ].atom && if (oatoms[i] != ewmh[_NET_WM_STATE_MAXIMIZED_HORZ].atom &&
oatoms[i] != ewmh[_NET_WM_STATE_MAXIMIZED_VERT].atom) oatoms[i] != ewmh[_NET_WM_STATE_MAXIMIZED_VERT].atom)