new feature: add swap{next,prev} for reordering visible windows

This commit is contained in:
Julien Danjou 2007-09-25 12:41:36 +02:00
parent 5d06303f48
commit a22b4c1008
4 changed files with 76 additions and 0 deletions

View File

@ -70,6 +70,8 @@ awesome:
(("Mod4"), "b", "togglebar"),
(("Mod4"), "j", "focusnext"),
(("Mod4"), "k", "focusprev"),
(("Mod4", "Shift"), "j", "swapnext"),
(("Mod4", "Shift"), "k", "swapprev"),
(("Mod4", "Control"), "j", "focusnextscreen"),
(("Mod4", "Control"), "k", "focusprevscreen"),
(("Mod4"), "h", "setmwfact", "-0.05"),

View File

@ -182,6 +182,39 @@ setclienttrans(Client *c, double opacity)
XSync(c->display, False);
}
/** Swap two client in the linked list clients
* \param c1 first client
* \param c2 second client
*/
static void
client_swap(Client *c1, Client *c2)
{
Client *tmp;
tmp = c1->next;
c1->next = c2->next;
c2->next = (tmp == c2 ? c1 : tmp);
tmp = c2->prev;
c2->prev = c1->prev;
c1->prev = (tmp == c1 ? c2 : tmp );
if(c1->next)
c1->next->prev = c1;
if(c1->prev)
c1->prev->next = c1;
if(c2->next)
c2->next->prev = c2;
if(c2->prev)
c2->prev->next = c2;
if(clients == c1)
clients = c2;
}
/** Attach client to the beginning of the clients stack
* \param c the client
*/
@ -742,3 +775,40 @@ uicb_setborder(Display *disp __attribute__ ((unused)),
awesomeconf->borderpx = 0;
}
void
uicb_swapnext(Display *disp,
DC *drawcontext,
awesome_config *awesomeconf,
const char *arg __attribute__ ((unused)))
{
Client *next;
if(!sel)
return;
for(next = sel->next; next && !isvisible(next, awesomeconf->screen, awesomeconf->tags, awesomeconf->ntags); next = next->next);
if(next)
{
client_swap(sel, next);
arrange(disp, drawcontext, awesomeconf);
}
}
void
uicb_swapprev(Display *disp,
DC *drawcontext,
awesome_config *awesomeconf,
const char *arg __attribute__ ((unused)))
{
Client *prev;
if(!sel)
return;
for(prev = sel->prev; prev && !isvisible(prev, awesomeconf->screen, awesomeconf->tags, awesomeconf->ntags); prev = prev->prev);
if(prev)
{
client_swap(prev, sel);
arrange(disp, drawcontext, awesomeconf);
}
}

View File

@ -72,5 +72,7 @@ UICB_PROTO(uicb_killclient);
UICB_PROTO(uicb_moveresize);
UICB_PROTO(uicb_settrans);
UICB_PROTO(uicb_setborder);
UICB_PROTO(uicb_swapnext);
UICB_PROTO(uicb_swapprev);
#endif

View File

@ -89,6 +89,8 @@ static const NameFuncLink KeyfuncList[] = {
{"moveresize", uicb_moveresize},
{"settrans", uicb_settrans},
{"setborder", uicb_setborder},
{"swapnext", uicb_swapnext},
{"swapprev", uicb_swapprev},
/* tag.c */
{"tag", uicb_tag},
{"togglefloating", uicb_togglefloating},