all repos — tint2 @ 2b10ed746039847e8b7613770fe94aaf428915b0

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

new solution for omnipresent task

git-svn-id: http://tint2.googlecode.com/svn/trunk@198 121b4492-b84c-0410-8b4c-0d4edfb3f3cc
lorthiois@bbsoft.fr lorthiois@bbsoft.fr@121b4492-b84c-0410-8b4c-0d4edfb3f3cc
commit

2b10ed746039847e8b7613770fe94aaf428915b0

parent

c59330d16ac96e661ff047a8d1af2cb86cb5829c

5 files changed, 38 insertions(+), 33 deletions(-)

jump to
M src/panel.hsrc/panel.h

@@ -83,7 +83,7 @@ Global_task g_task;

// -------------------------------------------------- // taskbar point to the first taskbar in panel.area.list. - // number of tasbar == nb_desktop + // number of tasbar == nb_desktop. taskbar[i] is for desktop(i). // taskbar[i] is used to loop over taskbar, // while panel->area.list is used to loop over all panel's objects Taskbar *taskbar;
M src/taskbar/task.csrc/taskbar/task.c

@@ -61,12 +61,6 @@

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;

@@ -78,6 +72,10 @@ memcpy(&new_tsk2->area, &panel1[i].g_task.area, sizeof(Area));

new_tsk2->area.parent = tskbar; new_tsk2->win = new_tsk.win; new_tsk2->desktop = new_tsk.desktop; + if (new_tsk2->desktop == ALLDESKTOP && server.desktop != j) { + // hide ALLDESKTOP task on non-current desktop + new_tsk2->area.on_screen = 0; + } new_tsk2->title = new_tsk.title; new_tsk2->icon = new_tsk.icon; new_tsk2->icon_active = new_tsk.icon_active;
M src/taskbar/taskbar.csrc/taskbar/taskbar.c

@@ -261,7 +261,6 @@ tsk = l->data;

if (!tsk->area.on_screen) continue; tsk->area.posx = x; tsk->area.width = pixel_width; - tsk->area.redraw = 1; if (modulo_width) { tsk->area.width++; modulo_width--;

@@ -303,7 +302,6 @@ tsk = l->data;

if (!tsk->area.on_screen) continue; tsk->area.posy = y; tsk->area.height = pixel_height; - tsk->area.redraw = 1; if (modulo_height) { tsk->area.height++; modulo_height--;
M src/tint.csrc/tint.c

@@ -169,7 +169,7 @@ if (panel_horizontal) {

Task *tsk; for (l0 = tskbar->area.list; l0 ; l0 = l0->next) { tsk = l0->data; - if (x >= tsk->area.posx && x <= (tsk->area.posx + tsk->area.width)) { + if (tsk->area.on_screen && x >= tsk->area.posx && x <= (tsk->area.posx + tsk->area.width)) { return tsk; } }

@@ -178,7 +178,7 @@ else {

Task *tsk; for (l0 = tskbar->area.list; l0 ; l0 = l0->next) { tsk = l0->data; - if (y >= tsk->area.posy && y <= (tsk->area.posy + tsk->area.height)) { + if (tsk->area.on_screen && y >= tsk->area.posy && y <= (tsk->area.posy + tsk->area.height)) { return tsk; } }

@@ -393,33 +393,37 @@ panel_refresh = 1;

} // Change desktop else if (at == server.atom._NET_CURRENT_DESKTOP) { + int old_desktop = server.desktop; server.desktop = server_get_current_desktop (); for (i=0 ; i < nb_panel ; i++) { Panel *panel = &panel1[i]; if (panel_mode == MULTI_DESKTOP && panel->g_taskbar.use_active) { - // redraw taskbar + // redraw both taskbar + panel->taskbar[old_desktop].area.is_active = 0; + panel->taskbar[old_desktop].area.redraw = 1; + panel->taskbar[server.desktop].area.is_active = 1; + panel->taskbar[server.desktop].area.redraw = 1; panel_refresh = 1; - Taskbar *tskbar; - Task *tsk; - 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; - } - } + } + // check ALLDESKTOP task => resize taskbar + Taskbar *tskbar; + Task *tsk; + GSList *l; + tskbar = &panel->taskbar[old_desktop]; + for (l = tskbar->area.list; l ; l = l->next) { + tsk = l->data; + if (tsk->desktop == ALLDESKTOP) { + tsk->area.on_screen = 0; + tskbar->area.resize = 1; + panel_refresh = 1; + } + } + tskbar = &panel->taskbar[server.desktop]; + for (l = tskbar->area.list; l ; l = l->next) { + tsk = l->data; + if (tsk->desktop == ALLDESKTOP) { + tsk->area.on_screen = 1; + tskbar->area.resize = 1; } } }
M src/util/area.csrc/util/area.c

@@ -43,6 +43,11 @@

// don't draw transparent objects (without foreground and without background) if (a->redraw) { a->redraw = 0; + // force redraw of child + GSList *l; + for (l = a->list ; l ; l = l->next) + set_redraw(l->data); + //printf("draw area posx %d, width %d\n", a->posx, a->width); draw(a, 0); if (a->use_active)