]> Dogcows Code - chaz/tint2/blobdiff - src/systray/systraybar.c
should fixed issue 208
[chaz/tint2] / src / systray / systraybar.c
index 87e20ec7f1772677ff0290da8d8bb86adbf8ece9..2e34f3e63a5353d10035c76387bab190903a7250 100644 (file)
@@ -113,7 +113,7 @@ void resize_systray(void *obj)
        TrayWindow *traywin;
        GSList *l;
        int count, icon_size;
-       int icons_per_column, icons_per_row, marging;
+       int icons_per_column=1, icons_per_row=1, marging=0;
 
        if (panel_horizontal)
                icon_size = sysbar->area.height;
@@ -208,6 +208,8 @@ void resize_systray(void *obj)
                XMoveResizeWindow(server.dsp, traywin->id, traywin->x, traywin->y, icon_size, icon_size);
                XResizeWindow(server.dsp, traywin->tray_id, icon_size, icon_size);
        }
+       // resize force the redraw
+       systray.area.redraw = 1;
 }
 
 
@@ -423,7 +425,6 @@ gboolean add_icon(Window id)
        else
                systray.list_icons = g_slist_insert_sorted(systray.list_icons, traywin, compare_traywindows);
        systray.area.resize = 1;
-       systray.area.redraw = 1;
        //printf("add_icon id %lx, %d\n", id, g_slist_length(systray.list_icons));
 
        // watch for the icon trying to resize itself!
@@ -434,10 +435,10 @@ gboolean add_icon(Window id)
        }
 
        // show the window
-       if (!traywin->hide) {
-               XMapRaised(server.dsp, traywin->tray_id);
+       if (!traywin->hide)
+               XMapWindow(server.dsp, traywin->tray_id);
+       if (!traywin->hide && !panel->is_hidden)
                XMapRaised(server.dsp, traywin->id);
-       }
 
        // changed in systray force resize on panel
        panel->area.resize = 1;
@@ -453,7 +454,6 @@ void remove_icon(TrayWindow *traywin)
        // remove from our list
        systray.list_icons = g_slist_remove(systray.list_icons, traywin);
        systray.area.resize = 1;
-       systray.area.redraw = 1;
        //printf("remove_icon id %lx, %d\n", traywin->id);
 
        XSelectInput(server.dsp, traywin->tray_id, NoEventMask);
@@ -538,7 +538,8 @@ void systray_render_icon_now(void* t)
        XCopyArea(server.dsp, systray.area.pix, panel->main_win, server.gc, traywin->x-systray.area.posx, traywin->y-systray.area.posy, traywin->width, traywin->height, traywin->x, traywin->y);
        imlib_free_image_and_decache();
 
-       XDamageSubtract(server.dsp, traywin->damage, None, None);
+       if (traywin->damage)
+               XDamageSubtract(server.dsp, traywin->damage, None, None);
        XFlush(server.dsp);
 }
 
@@ -560,7 +561,14 @@ void refresh_systray_icon()
                if (traywin->hide) continue;
                if (real_transparency || systray.alpha != 100 || systray.brightness != 0 || systray.saturation != 0)
                        systray_render_icon(traywin);
-               else
+               else {
+                       // comment by andreas: I'm still not sure, what exactly we need to do here... Somehow trayicons which do not
+                       // offer the same depth as tint2 does, need to draw a background pixmap, but this cannot be done with
+                       // XCopyArea... So we actually need XRenderComposite???
+//                     Pixmap pix = XCreatePixmap(server.dsp, server.root_win, traywin->width, traywin->height, server.depth);
+//                     XCopyArea(server.dsp, panel->temp_pmap, pix, server.gc, traywin->x, traywin->y, traywin->width, traywin->height, 0, 0);
+//                     XSetWindowBackgroundPixmap(server.dsp, traywin->id, pix);
                        XClearArea(server.dsp, traywin->tray_id, 0, 0, traywin->width, traywin->height, True);
+               }
        }
 }
This page took 0.022753 seconds and 4 git commands to generate.