~kris/suckless

tabbed

829980f28aa91f4837e047bd9e3b599bf6d655a6 — Markus Teich 11 years ago 5c560f3
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>
1 files changed, 10 insertions(+), 10 deletions(-)

M tabbed.c
M tabbed.c => tabbed.c +10 -10
@@ 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();