X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Ftaskbar%2Ftask.c;h=994ff3f3893c7dce39965513e5900af05098eae8;hb=827f5d6fc955e7071351716d7d0d41b66ed65a76;hp=df4bdbd2221af67b9b4987891deb05500a57df67;hpb=b984f3f3b26d76ba6bf7488ac9737cd69413031c;p=chaz%2Ftint2 diff --git a/src/taskbar/task.c b/src/taskbar/task.c index df4bdbd..994ff3f 100644 --- a/src/taskbar/task.c +++ b/src/taskbar/task.c @@ -96,7 +96,8 @@ Task *add_task (Window win) new_tsk2->area.on_screen = 0; } new_tsk2->title = new_tsk.title; - new_tsk2->area._get_tooltip_text = task_get_tooltip; + if (panel1[monitor].g_task.tooltip_enabled) + new_tsk2->area._get_tooltip_text = task_get_tooltip; for (k=0; kicon[k] = new_tsk.icon[k]; new_tsk2->state_pix[k] = 0; @@ -164,7 +165,7 @@ int get_title(Task *tsk) Panel *panel = tsk->area.panel; char *title, *name; - if (!panel->g_task.text && !g_tooltip.enabled) return 0; + if (!panel->g_task.text && !panel->g_task.tooltip_enabled) return 0; name = server_get_property (tsk->win, server.atom._NET_WM_VISIBLE_NAME, server.atom.UTF8_STRING, 0); if (!name || !strlen(name)) { @@ -404,22 +405,52 @@ void on_change_task (void *obj) 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) { if (tsk == 0) return 0; - GSList *l0; + GSList *l0, *lfirst_tsk; Task *tsk1; Taskbar* tskbar = tsk->area.parent; l0 = tskbar->area.list; if (taskbarname_enabled) l0 = l0->next; + lfirst_tsk = l0; for (; l0 ; l0 = l0->next) { tsk1 = l0->data; if (tsk1 == tsk) { - if (l0->next == 0) l0 = tskbar->area.list; + if (l0->next == 0) l0 = lfirst_tsk; else l0 = l0->next; return l0->data; } @@ -433,17 +464,18 @@ Task *prev_task(Task *tsk) if (tsk == 0) return 0; - GSList *l0; + GSList *l0, *lfirst_tsk; Task *tsk1, *tsk2; Taskbar* tskbar = tsk->area.parent; tsk2 = 0; l0 = tskbar->area.list; if (taskbarname_enabled) l0 = l0->next; + lfirst_tsk = l0; for (; l0 ; l0 = l0->next) { tsk1 = l0->data; if (tsk1 == tsk) { - if (l0 == tskbar->area.list) { + if (l0 == lfirst_tsk) { l0 = g_slist_last ( l0 ); tsk2 = l0->data; }