diff --git a/ChangeLog b/ChangeLog index 6216a06..d100dee 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,6 @@ +2009-06-29 +- fixed bug when active window draged to another desktop + 2009-06-29 - fixed issue 110 and issue 107 diff --git a/src/taskbar/task.c b/src/taskbar/task.c index 0b8bdc8..2e0cc93 100644 --- a/src/taskbar/task.c +++ b/src/taskbar/task.c @@ -34,10 +34,10 @@ -void add_task (Window win) +Task *add_task (Window win) { - if (!win) return; - if (window_is_hidden(win)) return; + if (!win) return 0; + if (window_is_hidden(win)) return 0; int monitor; @@ -45,7 +45,6 @@ void add_task (Window win) new_tsk.win = win; new_tsk.area.panel = &panel1[0]; new_tsk.desktop = window_get_desktop (win); -// if (panel_mode == SINGLE_MONITOR) monitor = window_get_monitor (win); if (nb_panel > 1) monitor = window_get_monitor (win); else monitor = 0; @@ -60,7 +59,7 @@ void add_task (Window win) XSelectInput (server.dsp, new_tsk.win, PropertyChangeMask|StructureNotifyMask); Taskbar *tskbar; - Task *new_tsk2; + Task *new_tsk2=0; int i, j; for (i=0 ; i < nb_panel ; i++) { for (j=0 ; j < panel1[i].nb_desktop ; j++) { @@ -82,6 +81,7 @@ void add_task (Window win) //printf("add_task panel %d, desktop %d, task %s\n", i, j, new_tsk2->title); } } + return new_tsk2; } diff --git a/src/taskbar/task.h b/src/taskbar/task.h index 5f1ecf1..a42caa0 100644 --- a/src/taskbar/task.h +++ b/src/taskbar/task.h @@ -51,7 +51,7 @@ typedef struct { -void add_task (Window win); +Task *add_task (Window win); void remove_task (Task *tsk); void draw_task (void *obj, cairo_t *c, int active); diff --git a/src/tint.c b/src/tint.c index e5bde53..87a57fc 100644 --- a/src/tint.c +++ b/src/tint.c @@ -479,11 +479,16 @@ void event_property_notify (XEvent *e) // Window desktop changed else if (at == server.atom._NET_WM_DESKTOP) { int desktop = window_get_desktop (win); + int active = tsk->area.is_active; //printf(" Window desktop changed %d, %d\n", tsk->desktop, desktop); // bug in windowmaker : send unecessary 'desktop changed' when focus changed if (desktop != tsk->desktop) { remove_task (tsk); - add_task (win); + tsk = add_task (win); + if (tsk && active) { + tsk->area.is_active = 1; + task_active = tsk; + } panel_refresh = 1; } }