merge kbfunc_{ptrmove,client_{move,resize}} into one function that takes a flag,

this code was almost identical...

ok okan.
This commit is contained in:
oga 2008-04-16 13:47:29 +00:00
parent cd5c340e01
commit 898bfff36a
3 changed files with 92 additions and 120 deletions

View File

@ -205,10 +205,14 @@ struct xevent {
TAILQ_HEAD(xevent_q, xevent);
#define CWM_BIGMOVE 0x1000
enum directions {
CWM_UP = 0, CWM_DOWN, CWM_LEFT, CWM_RIGHT,
};
#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.
@ -447,11 +451,9 @@ void kbfunc_client_nogroup(struct client_ctx *, void *);
void kbfunc_client_maximize(struct client_ctx *, void *);
void kbfunc_client_vmaximize(struct client_ctx *, void *);
void kbfunc_quit_wm(struct client_ctx *, void *);
void kbfunc_client_move(struct client_ctx *, void *);
void kbfunc_client_resize(struct client_ctx *, void *);
void kbfunc_moveresize(struct client_ctx *, void *);
void kbfunc_menu_search(struct client_ctx *, void *);
void kbfunc_exec(struct client_ctx *, void *);
void kbfunc_ptrmove(struct client_ctx *, void *);
void kbfunc_ssh(struct client_ctx *, void *);
void kbfunc_term(struct client_ctx *, void *);
void kbfunc_lock(struct client_ctx *, void *);

69
conf.c
View File

@ -238,14 +238,6 @@ struct {
{ "rcycle", kbfunc_client_rcycle, 0, 0 },
{ "label", kbfunc_client_label, KBFLAG_NEEDCLIENT, 0 },
{ "delete", kbfunc_client_delete, KBFLAG_NEEDCLIENT, 0 },
{ "ptrmoveup", kbfunc_ptrmove, 0, (void *)CWM_UP },
{ "ptrmovedown", kbfunc_ptrmove, 0, (void *)CWM_DOWN },
{ "ptrmoveleft", kbfunc_ptrmove, 0, (void *)CWM_LEFT },
{ "ptrmoveright", kbfunc_ptrmove, 0, (void *)CWM_RIGHT },
{ "bigptrmoveup", kbfunc_ptrmove, 0, (void *)(CWM_UP|CWM_BIGMOVE) },
{ "bigptrmovedown", kbfunc_ptrmove, 0, (void *)(CWM_DOWN|CWM_BIGMOVE) },
{ "bigptrmoveleft", kbfunc_ptrmove, 0, (void *)(CWM_LEFT|CWM_BIGMOVE) },
{ "bigptrmoveright", kbfunc_ptrmove, 0, (void *)(CWM_RIGHT|CWM_BIGMOVE) },
{ "group1", kbfunc_client_group, 0, (void *)1 },
{ "group2", kbfunc_client_group, 0, (void *)2 },
{ "group3", kbfunc_client_group, 0, (void *)3 },
@ -266,22 +258,51 @@ struct {
{ "ssh", kbfunc_ssh, 0, 0 },
{ "terminal", kbfunc_term, 0, 0 },
{ "lock", kbfunc_lock, 0, 0 },
{ "moveup", kbfunc_client_move, KBFLAG_NEEDCLIENT, (void *)CWM_UP },
{ "movedown", kbfunc_client_move, KBFLAG_NEEDCLIENT, (void *)CWM_DOWN },
{ "moveright", kbfunc_client_move, KBFLAG_NEEDCLIENT, (void *)CWM_RIGHT },
{ "moveleft", kbfunc_client_move, KBFLAG_NEEDCLIENT, (void *)CWM_LEFT },
{ "bigmoveup", kbfunc_client_move, KBFLAG_NEEDCLIENT, (void *)(CWM_UP|CWM_BIGMOVE) },
{ "bigmovedown", kbfunc_client_move, KBFLAG_NEEDCLIENT, (void *)(CWM_DOWN|CWM_BIGMOVE) },
{ "bigmoveright", kbfunc_client_move, KBFLAG_NEEDCLIENT, (void *)(CWM_RIGHT|CWM_BIGMOVE) },
{ "bigmoveleft", kbfunc_client_move, KBFLAG_NEEDCLIENT, (void *)(CWM_LEFT|CWM_BIGMOVE) },
{ "resizeup", kbfunc_client_resize, KBFLAG_NEEDCLIENT, (void *)(CWM_UP) },
{ "resizedown", kbfunc_client_resize, KBFLAG_NEEDCLIENT, (void *)CWM_DOWN },
{ "resizeright", kbfunc_client_resize, KBFLAG_NEEDCLIENT, (void *)CWM_RIGHT },
{ "resizeleft", kbfunc_client_resize, KBFLAG_NEEDCLIENT, (void *)CWM_LEFT },
{ "bigresizeup", kbfunc_client_resize, KBFLAG_NEEDCLIENT, (void *)(CWM_UP|CWM_BIGMOVE) },
{ "bigresizedown", kbfunc_client_resize, KBFLAG_NEEDCLIENT, (void *)(CWM_DOWN|CWM_BIGMOVE) },
{ "bigresizeright", kbfunc_client_resize, KBFLAG_NEEDCLIENT, (void *)(CWM_RIGHT|CWM_BIGMOVE) },
{ "bigresizeleft", kbfunc_client_resize, KBFLAG_NEEDCLIENT, (void *)(CWM_LEFT|CWM_BIGMOVE) },
{ "moveup", kbfunc_moveresize, KBFLAG_NEEDCLIENT,
(void *)(CWM_UP|CWM_MOVE) },
{ "movedown", kbfunc_moveresize, KBFLAG_NEEDCLIENT,
(void *)(CWM_DOWN|CWM_MOVE) },
{ "moveright", kbfunc_moveresize, KBFLAG_NEEDCLIENT,
(void *)(CWM_RIGHT|CWM_MOVE) },
{ "moveleft", kbfunc_moveresize, KBFLAG_NEEDCLIENT,
(void *)(CWM_LEFT|CWM_MOVE) },
{ "bigmoveup", kbfunc_moveresize, KBFLAG_NEEDCLIENT,
(void *)(CWM_UP|CWM_MOVE|CWM_BIGMOVE) },
{ "bigmovedown", kbfunc_moveresize, KBFLAG_NEEDCLIENT,
(void *)(CWM_DOWN|CWM_MOVE|CWM_BIGMOVE) },
{ "bigmoveright", kbfunc_moveresize, KBFLAG_NEEDCLIENT,
(void *)(CWM_RIGHT|CWM_MOVE|CWM_BIGMOVE) },
{ "bigmoveleft", kbfunc_moveresize, KBFLAG_NEEDCLIENT,
(void *)(CWM_LEFT|CWM_MOVE|CWM_BIGMOVE) },
{ "resizeup", kbfunc_moveresize, KBFLAG_NEEDCLIENT,
(void *)(CWM_UP|CWM_RESIZE) },
{ "resizedown", kbfunc_moveresize, KBFLAG_NEEDCLIENT,
(void *)(CWM_DOWN|CWM_RESIZE) },
{ "resizeright", kbfunc_moveresize, KBFLAG_NEEDCLIENT,
(void *)(CWM_RIGHT|CWM_RESIZE) },
{ "resizeleft", kbfunc_moveresize, KBFLAG_NEEDCLIENT,
(void *)(CWM_LEFT|CWM_RESIZE) },
{ "bigresizeup", kbfunc_moveresize, KBFLAG_NEEDCLIENT,
(void *)(CWM_UP|CWM_RESIZE|CWM_BIGMOVE) },
{ "bigresizedown", kbfunc_moveresize, KBFLAG_NEEDCLIENT,
(void *)(CWM_DOWN|CWM_RESIZE|CWM_BIGMOVE) },
{ "bigresizeright", kbfunc_moveresize, KBFLAG_NEEDCLIENT,
(void *)(CWM_RIGHT|CWM_RESIZE|CWM_BIGMOVE) },
{ "bigresizeleft", kbfunc_moveresize, KBFLAG_NEEDCLIENT,
(void *)(CWM_LEFT|CWM_RESIZE|CWM_BIGMOVE) },
{ "ptrmoveup", kbfunc_moveresize, 0, (void *)(CWM_UP|CWM_PTRMOVE) },
{ "ptrmovedown", kbfunc_moveresize, 0, (void *)(CWM_DOWN|CWM_PTRMOVE) },
{ "ptrmoveleft", kbfunc_moveresize, 0, (void *)(CWM_LEFT|CWM_PTRMOVE) },
{ "ptrmoveright", kbfunc_moveresize, 0,
(void *)(CWM_RIGHT|CWM_PTRMOVE) },
{ "bigptrmoveup", kbfunc_moveresize, 0,
(void *)(CWM_UP|CWM_PTRMOVE|CWM_BIGMOVE) },
{ "bigptrmovedown", kbfunc_moveresize, 0,
(void *)(CWM_DOWN|CWM_PTRMOVE|CWM_BIGMOVE) },
{ "bigptrmoveleft", kbfunc_moveresize, 0,
(void *)(CWM_LEFT|CWM_PTRMOVE|CWM_BIGMOVE) },
{ "bigptrmoveright", kbfunc_moveresize, 0,
(void *)(CWM_RIGHT|CWM_PTRMOVE|CWM_BIGMOVE) },
{ NULL, NULL, 0, 0},
};

127
kbfunc.c
View File

@ -41,9 +41,12 @@ kbfunc_client_raise(struct client_ctx *cc, void *arg)
client_raise(cc);
}
#define typemask (CWM_MOVE | CWM_RESIZE | CWM_PTRMOVE)
#define movemask (CWM_UP | CWM_DOWN | CWM_LEFT | CWM_RIGHT)
void
kbfunc_client_move(struct client_ctx *cc, void *arg)
kbfunc_moveresize(struct client_ctx *cc, void *arg)
{
struct screen_ctx *sc = screen_current();
int x,y,flags,amt;
u_int mx,my;
@ -57,7 +60,7 @@ kbfunc_client_move(struct client_ctx *cc, void *arg)
amt = amt*10;
}
switch (flags) {
switch (flags & movemask) {
case CWM_UP:
my -= amt;
break;
@ -71,96 +74,42 @@ kbfunc_client_move(struct client_ctx *cc, void *arg)
mx -= amt;
break;
}
switch (flags & typemask) {
case CWM_MOVE:
cc->geom.y += my;
cc->geom.x += mx;
client_move(cc);
xu_ptr_getpos(cc->pwin, &x, &y);
cc->ptr.y = y + my;
cc->ptr.x = x + mx;
client_ptrwarp(cc);
break;
case CWM_RESIZE:
cc->geom.height += my;
cc->geom.width += mx;
client_resize(cc);
cc->geom.y += my;
cc->geom.x += mx;
client_move(cc);
xu_ptr_getpos(cc->pwin, &x, &y);
cc->ptr.y = y + my;
cc->ptr.x = x + mx;
client_ptrwarp(cc);
}
void
kbfunc_client_resize(struct client_ctx *cc, void *arg)
{
int flags,mx,my;
u_int amt;
mx = my = 0;
flags = (int)arg;
amt = MOVE_AMOUNT;
if (flags & CWM_BIGMOVE) {
flags -= CWM_BIGMOVE;
amt = amt*10;
/*
* Moving the cursor while resizing is problematic. Just place
* it in the middle of the window.
*/
cc->ptr.x = -1;
cc->ptr.y = -1;
client_ptrwarp(cc);
break;
case CWM_PTRMOVE:
if (cc) {
xu_ptr_getpos(cc->pwin, &x, &y);
xu_ptr_setpos(cc->pwin, x + mx, y + my);
} else {
xu_ptr_getpos(sc->rootwin, &x, &y);
xu_ptr_setpos(sc->rootwin, x + mx, y + my);
}
break;
default:
warnx("invalid flags passed to kbfunc_client_moveresize");
}
switch (flags) {
case CWM_UP:
my -= amt;
break;
case CWM_DOWN:
my += amt;
break;
case CWM_RIGHT:
mx += amt;
break;
case CWM_LEFT:
mx -= amt;
break;
}
cc->geom.height += my;
cc->geom.width += mx;
client_resize(cc);
/*
* Moving the cursor while resizing is problematic. Just place
* it in the middle of the window.
*/
cc->ptr.x = -1;
cc->ptr.y = -1;
client_ptrwarp(cc);
}
void
kbfunc_ptrmove(struct client_ctx *cc, void *arg)
{
int px,py,mx,my,flags,amt;
struct screen_ctx *sc = screen_current();
my = mx = 0;
flags = (int)arg;
amt = MOVE_AMOUNT;
if (flags & CWM_BIGMOVE) {
flags -= CWM_BIGMOVE;
amt = amt * 10;
}
switch (flags) {
case CWM_UP:
my -= amt;
break;
case CWM_DOWN:
my += amt;
break;
case CWM_RIGHT:
mx += amt;
break;
case CWM_LEFT:
mx -= amt;
break;
}
if (cc) {
xu_ptr_getpos(cc->pwin, &px, &py);
xu_ptr_setpos(cc->pwin, px + mx, py + my);
} else {
xu_ptr_getpos(sc->rootwin, &px, &py);
xu_ptr_setpos(sc->rootwin, px + mx, py + my);
}
}
void