]> Dogcows Code - chaz/tint2/blobdiff - src/systray/systraybar.c
*fix* removed warnings
[chaz/tint2] / src / systray / systraybar.c
index dde3dc86d62511c756e850f28289c8c6da91c81f..a0c1f3c716ee275136da229a10b7ed7513de9051 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;
@@ -133,13 +133,9 @@ void resize_systray(void *obj)
                if (!count) systray.area.width = 0;
                else {
                        int height = sysbar->area.height - 2*sysbar->area.bg->border.width - 2*sysbar->area.paddingy;
-                       icons_per_column = height / (icon_size+sysbar->area.paddingx);
-                       if (icons_per_column)
-                               marging = height - (icons_per_column-1)*(icon_size+sysbar->area.paddingx) - icon_size;
-                       else {
-                               marging = height - icon_size;
-                               icons_per_column = 1;
-                       }
+                       // here icons_per_column always higher than 0
+                       icons_per_column = (height+sysbar->area.paddingx) / (icon_size+sysbar->area.paddingx);
+                       marging = height - (icons_per_column-1)*(icon_size+sysbar->area.paddingx) - icon_size;
                        icons_per_row = count / icons_per_column + (count%icons_per_column != 0);
                        systray.area.width = (2 * systray.area.bg->border.width) + (2 * systray.area.paddingxlr) + (icon_size * icons_per_row) + ((icons_per_row-1) * systray.area.paddingx);
                }
@@ -156,13 +152,9 @@ void resize_systray(void *obj)
                if (!count) systray.area.height = 0;
                else {
                        int width = sysbar->area.width - 2*sysbar->area.bg->border.width - 2*sysbar->area.paddingy;
-                       icons_per_row = width / (icon_size+sysbar->area.paddingx);
-                       if (icons_per_row)
-                               marging = width - (icons_per_row-1)*(icon_size+sysbar->area.paddingx) - icon_size;
-                       else {
-                               marging = width - icon_size;
-                               icons_per_row = 1;
-                       }
+                       // here icons_per_row always higher than 0
+                       icons_per_row = (width+sysbar->area.paddingx) / (icon_size+sysbar->area.paddingx);
+                       marging = width - (icons_per_row-1)*(icon_size+sysbar->area.paddingx) - icon_size;
                        icons_per_column = count / icons_per_row+ (count%icons_per_row != 0);
                        systray.area.height = (2 * systray.area.bg->border.width) + (2 * systray.area.paddingxlr) + (icon_size * icons_per_column) + ((icons_per_column-1) * systray.area.paddingx);
                }
@@ -177,12 +169,13 @@ void resize_systray(void *obj)
        }
 
        int i, posx, posy;
+       int start = panel->area.bg->border.width + panel->area.paddingy + systray.area.bg->border.width + systray.area.paddingy +marging/2;
        if (panel_horizontal) {
-               posy = panel->area.bg->border.width + panel->area.paddingy + systray.area.bg->border.width + systray.area.paddingy +marging/2;
+               posy = start;
                posx = systray.area.posx + systray.area.bg->border.width + systray.area.paddingxlr;
        }
        else {
-               posx = panel->area.bg->border.width + panel->area.paddingy + systray.area.bg->border.width + systray.area.paddingy +marging/2;
+               posx = start;
                posy = systray.area.posy + systray.area.bg->border.width + systray.area.paddingxlr;
        }
 
@@ -198,7 +191,7 @@ void resize_systray(void *obj)
                        if (i % icons_per_column)
                                posy += icon_size + sysbar->area.paddingx;
                        else {
-                               posy = panel->area.bg->border.width + panel->area.paddingy + systray.area.bg->border.width + systray.area.paddingy +marging/2;
+                               posy = start;
                                posx += (icon_size + systray.area.paddingx);
                        }
                }
@@ -206,7 +199,7 @@ void resize_systray(void *obj)
                        if (i % icons_per_row)
                                posx += icon_size + systray.area.paddingx;
                        else {
-                               posx = panel->area.bg->border.width + panel->area.paddingy + systray.area.bg->border.width + systray.area.paddingy +marging/2;
+                               posx = start;
                                posy += (icon_size + systray.area.paddingx);
                        }
                }
@@ -441,10 +434,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;
@@ -471,7 +464,7 @@ void remove_icon(TrayWindow *traywin)
        error = FALSE;
        old = XSetErrorHandler(window_error_handler);
        if (!traywin->hide)
-               XUnmapWindow(server.dsp, traywin->id);
+               XUnmapWindow(server.dsp, traywin->tray_id);
        XReparentWindow(server.dsp, traywin->tray_id, server.root_win, 0, 0);
        XDestroyWindow(server.dsp, traywin->id);
        XSync(server.dsp, False);
@@ -567,7 +560,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.024289 seconds and 4 git commands to generate.