movetab(): Move selected tab instead of switching

Before this patch, movetab() just switched positions of the selected tab with
the new position. This resulted in unexpected behaviour when „moving“ a tab over
one end of the list.

Now tabs are moved correctly by the specified amount of indizes.

Signed-off-by: Christoph Lohmann <20h@r-36.net>
This commit is contained in:
Markus Teich 2014-10-07 17:15:59 +02:00 committed by Christoph Lohmann
parent 5c560f3784
commit 829980f28a

View file

@ -795,19 +795,19 @@ movetab(const Arg *arg) {
int c;
Client *new;
if(sel < 0 || (arg->i == 0))
return;
c = sel + arg->i;
while(c >= nclients)
c -= nclients;
while(c < 0)
c = (sel + arg->i) % nclients;
if(c < 0)
c += nclients;
new = clients[c];
clients[c] = clients[sel];
clients[sel] = new;
if(sel < 0 || (c == sel))
return;
new = clients[sel];
if(sel < c)
memmove(&clients[sel], &clients[sel+1], sizeof(Client *) * (c - sel));
else
memmove(&clients[c+1], &clients[c], sizeof(Client *) * (sel - c));
clients[c] = new;
sel = c;
drawbar();