all repos — tint2 @ 0a1ceaeed0ef671ebc82496ecf0578ff6168e372

fork of the tint2 desktop panel for my custom setup - only minimized windows across all desktops for the taskbar

Fix for incorrect task cycling when windows visible on all desktops are present

git-svn-id: http://tint2.googlecode.com/svn/trunk@651 121b4492-b84c-0410-8b4c-0d4edfb3f3cc
o9000 o9000
commit

0a1ceaeed0ef671ebc82496ecf0578ff6168e372

parent

cfa4bc89e1603c29c7aa9ae7f4d45bd1ba70af08

3 files changed, 32 insertions(+), 2 deletions(-)

jump to
M src/taskbar/task.csrc/taskbar/task.c

@@ -405,6 +405,35 @@ // reset Pixmap when position/size changed

set_task_redraw(tsk); } +// Given a pointer to the active task (active_task) and a pointer +// to the task that is currently under the mouse (current_task), +// return a pointer to the active task that is on the same desktop +// as current_task. Normally this is simply active_task, except when +// it is set to appear on all desktops. In that case we search for +// another Task on current_task's taskbar, with the same window as +// active_task. +Task *find_active_task(Task *current_task, Task *active_task) +{ + if (active_task == 0) + return current_task; + if (active_task->desktop != ALLDESKTOP) + return active_task; + if (current_task == 0) + return active_task; + + GSList *l0; + Task *tsk; + Taskbar* tskbar = current_task->area.parent; + + l0 = tskbar->area.list; + if (taskbarname_enabled) l0 = l0->next; + for (; l0 ; l0 = l0->next) { + tsk = l0->data; + if (tsk->win == active_task->win) + return tsk; + } + return active_task; +} Task *next_task(Task *tsk) {
M src/taskbar/task.hsrc/taskbar/task.h

@@ -78,6 +78,7 @@ void active_task();

void set_task_state(Task* tsk, int state); void set_task_redraw(Task* tsk); +Task *find_active_task(Task *current_task, Task *active_task); Task *next_task (Task *tsk); Task *prev_task (Task *tsk);
M src/tint.csrc/tint.c

@@ -331,14 +331,14 @@ break;

case NEXT_TASK: if (task_active) { Task *tsk1; - tsk1 = next_task(task_active); + tsk1 = next_task(find_active_task(tsk, task_active)); set_active(tsk1->win); } break; case PREV_TASK: if (task_active) { Task *tsk1; - tsk1 = prev_task(task_active); + tsk1 = prev_task(find_active_task(tsk, task_active)); set_active(tsk1->win); } }