From b28c78295621a815c9021090fe9d086465930151 Mon Sep 17 00:00:00 2001 From: Thierry Lorthiois Date: Fri, 25 Sep 2009 21:40:06 +0000 Subject: [PATCH] remove patch on omnipresent task to try another solution --- src/panel.h | 1 + src/taskbar/task.c | 20 ++++++------- src/taskbar/taskbar.c | 2 ++ src/taskbar/taskbar.h | 2 +- src/tint.c | 69 ++++++++++++++++--------------------------- 5 files changed, 40 insertions(+), 54 deletions(-) diff --git a/src/panel.h b/src/panel.h index 9676089..9fd52bc 100644 --- a/src/panel.h +++ b/src/panel.h @@ -57,6 +57,7 @@ extern int max_tick_urgent; extern Imlib_Image default_icon; +// tint2 use one panel per monitor and one taskbar per desktop. typedef struct { // always start with area // area.list own all objects of the panel according to config file diff --git a/src/taskbar/task.c b/src/taskbar/task.c index 383d99e..cbd1b07 100644 --- a/src/taskbar/task.c +++ b/src/taskbar/task.c @@ -61,16 +61,16 @@ Task *add_task (Window win) Taskbar *tskbar; Task *new_tsk2=0; int i, j; - for (i = 0; i < nb_panel; i++) { - if (nb_panel > 1 && panel1[i].monitor != monitor) continue; - for (j = 0; j < panel1[i].nb_desktop; j++) { - if ((new_tsk.desktop != ALLDESKTOP && new_tsk.desktop != j) - || (panel_mode == MULTI_DESKTOP && new_tsk.desktop == ALLDESKTOP && server.desktop != j)) - continue; -// for (i=0 ; i < nb_panel ; i++) { -// for (j=0 ; j < panel1[i].nb_desktop ; j++) { -// if (new_tsk.desktop != ALLDESKTOP && new_tsk.desktop != j) continue; -// if (nb_panel > 1 && panel1[i].monitor != monitor) continue; +// for (i = 0; i < nb_panel; i++) { +// if (nb_panel > 1 && panel1[i].monitor != monitor) continue; +// for (j = 0; j < panel1[i].nb_desktop; j++) { +// if ((new_tsk.desktop != ALLDESKTOP && new_tsk.desktop != j) +// || (panel_mode == MULTI_DESKTOP && new_tsk.desktop == ALLDESKTOP && server.desktop != j)) +// continue; + for (i=0 ; i < nb_panel ; i++) { + for (j=0 ; j < panel1[i].nb_desktop ; j++) { + if (new_tsk.desktop != ALLDESKTOP && new_tsk.desktop != j) continue; + if (nb_panel > 1 && panel1[i].monitor != monitor) continue; tskbar = &panel1[i].taskbar[j]; new_tsk2 = malloc(sizeof(Task)); diff --git a/src/taskbar/taskbar.c b/src/taskbar/taskbar.c index a1be3ec..f20e89e 100644 --- a/src/taskbar/taskbar.c +++ b/src/taskbar/taskbar.c @@ -258,6 +258,7 @@ void resize_taskbar(void *obj) x = taskbar->area.posx + taskbar->area.pix.border.width + taskbar->area.paddingxlr; for (l = taskbar->area.list; l ; l = l->next) { tsk = l->data; + if (!tsk->area.on_screen) continue; tsk->area.posx = x; tsk->area.width = pixel_width; tsk->area.redraw = 1; @@ -299,6 +300,7 @@ void resize_taskbar(void *obj) y = taskbar->area.posy + taskbar->area.pix.border.width + taskbar->area.paddingxlr; for (l = taskbar->area.list; l ; l = l->next) { tsk = l->data; + if (!tsk->area.on_screen) continue; tsk->area.posy = y; tsk->area.height = pixel_height; tsk->area.redraw = 1; diff --git a/src/taskbar/taskbar.h b/src/taskbar/taskbar.h index 67733db..0901ed5 100644 --- a/src/taskbar/taskbar.h +++ b/src/taskbar/taskbar.h @@ -10,7 +10,7 @@ #include "task.h" - +// tint2 use one taskbar per desktop. typedef struct { // always start with area Area area; diff --git a/src/tint.c b/src/tint.c index b72b46e..0518486 100644 --- a/src/tint.c +++ b/src/tint.c @@ -394,52 +394,35 @@ void event_property_notify (XEvent *e) // Change desktop else if (at == server.atom._NET_CURRENT_DESKTOP) { server.desktop = server_get_current_desktop (); - for (i = 0; i < nb_panel; i++) { + for (i=0 ; i < nb_panel ; i++) { Panel *panel = &panel1[i]; - if (panel_mode == MULTI_DESKTOP) { - Taskbar *tskbar, *tskbar_active; - GSList *l; + if (panel_mode == MULTI_DESKTOP && panel->g_taskbar.use_active) { + // redraw taskbar + panel_refresh = 1; + Taskbar *tskbar; Task *tsk; - char redraw_tasks; - - tskbar_active = &panel->taskbar[server.desktop]; - if (panel->g_taskbar.use_active) { - tskbar_active->area.is_active = 1; - tskbar_active->area.redraw = 1; + GSList *l; + for (j=0 ; j < panel->nb_desktop ; j++) { + tskbar = &panel->taskbar[j]; + if (tskbar->area.is_active) { + tskbar->area.is_active = 0; + tskbar->area.redraw = 1; + for (l = tskbar->area.list; l ; l = l->next) { + tsk = l->data; + tsk->area.redraw = 1; + } + } + if (j == server.desktop) { + tskbar->area.is_active = 1; + tskbar->area.redraw = 1; + for (l = tskbar->area.list; l ; l = l->next) { + tsk = l->data; + tsk->area.redraw = 1; + } + } } - - for (j = 0; j < panel->nb_desktop; j++) { - tskbar = &panel->taskbar[j]; - - // need to redraw tasks only on taskbar, which was active, or which became active - redraw_tasks = 0; - if (panel->g_taskbar.use_active && tskbar->area.is_active && tskbar != tskbar_active) { - tskbar->area.is_active = 0; - tskbar->area.redraw = 1; - redraw_tasks = 1; - } else if (panel->g_taskbar.use_active && tskbar == tskbar_active) { - redraw_tasks = 1; - } - - for (l = tskbar->area.list; l;) { - tsk = l->data; - l = l->next; - - if (redraw_tasks) tsk->area.redraw = 1; - - if (tsk->desktop == ALLDESKTOP && tskbar != tskbar_active) { - // move omnipresent tasks to current taskbar - tskbar->area.list = g_slist_remove(tskbar->area.list, tsk); - tskbar->area.resize = 1; - tsk->area.parent = tskbar_active; - tskbar_active->area.list = g_slist_append(tskbar_active->area.list, tsk); - tskbar_active->area.resize = 1; - } - } - } - panel_refresh = 1; - } - } + } + } if (panel_mode != MULTI_DESKTOP) { visible_object(); } -- 2.45.2