]> Dogcows Code - chaz/tint2/blobdiff - src/tint.c
fixed issue 150
[chaz/tint2] / src / tint.c
index 0518486bc39352a83c2f1916434288cea401a942..c85bd1bac8f4cbb9dbd4358098c9ab769bb90513 100644 (file)
@@ -169,7 +169,7 @@ Task *click_task (Panel *panel, int x, int y)
                        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 @@ Task *click_task (Panel *panel, int x, int y)
                        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;
                                }
                        }
@@ -268,8 +268,7 @@ void event_button_press (XEvent *e)
        Panel *panel = get_panel(e->xany.window);
        if (!panel) return;
 
-       if (panel_mode == MULTI_DESKTOP)
-               task_drag = click_task(panel, e->xbutton.x, e->xbutton.y);
+       task_drag = click_task(panel, e->xbutton.x, e->xbutton.y);
 
        if (wm_menu && !task_drag && !click_clock(panel, e->xbutton.x, e->xbutton.y) && (e->xbutton.button != 1) ) {
                // forward the click to the desktop window (thanks conky)
@@ -393,33 +392,37 @@ void event_property_notify (XEvent *e)
                }
                // 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;
                                        }
                                }
                        }
This page took 0.023304 seconds and 4 git commands to generate.