- int count, posx, posy;
- int icon_size;
-
- icon_size = sysbar->area.height - (2 * sysbar->area.pix.border.width) - (2 * sysbar->area.paddingy);
- count = g_slist_length(systray.list_icons);
-
- if (!count) systray.area.width = 0;
- else systray.area.width = (2 * systray.area.pix.border.width) + (2 * systray.area.paddingxlr) + (icon_size * count) + ((count-1) * systray.area.paddingx);
-
- systray.area.posx = panel->area.width - panel->area.pix.border.width - panel->area.paddingxlr - systray.area.width;
- if (panel->clock.area.on_screen)
- systray.area.posx -= (panel->clock.area.width + panel->area.paddingx);
+ int count, icon_size;
+ int icons_per_column, icons_per_row, marging;
+
+ if (panel_horizontal)
+ icon_size = sysbar->area.height;
+ else
+ icon_size = sysbar->area.width;
+ icon_size = icon_size - (2 * sysbar->area.bg->border.width) - (2 * sysbar->area.paddingy);
+ if (systray_max_icon_size > 0 && icon_size > systray_max_icon_size)
+ icon_size = systray_max_icon_size;
+ count = 0;
+ for (l = systray.list_icons; l ; l = l->next) {
+ if (!((TrayWindow*)l->data)->hide)
+ count++;
+ }
+ //printf("count %d\n", count);
+
+ if (panel_horizontal) {
+ if (!count) systray.area.width = 0;
+ else {
+ int height = sysbar->area.height - 2*sysbar->area.bg->border.width - 2*sysbar->area.paddingy;
+ // 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);
+ }
+
+ systray.area.posx = panel->area.width - panel->area.bg->border.width - panel->area.paddingxlr - systray.area.width;
+ if (panel->clock.area.on_screen)
+ systray.area.posx -= (panel->clock.area.width + panel->area.paddingx);
+#ifdef ENABLE_BATTERY
+ if (panel->battery.area.on_screen)
+ systray.area.posx -= (panel->battery.area.width + panel->area.paddingx);
+#endif
+ }
+ else {
+ if (!count) systray.area.height = 0;
+ else {
+ int width = sysbar->area.width - 2*sysbar->area.bg->border.width - 2*sysbar->area.paddingy;
+ // 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);
+ }
+
+ systray.area.posy = panel->area.bg->border.width + panel->area.paddingxlr;
+ if (panel->clock.area.on_screen)
+ systray.area.posy += (panel->clock.area.height + panel->area.paddingx);
+#ifdef ENABLE_BATTERY
+ if (panel->battery.area.on_screen)
+ systray.area.posy += (panel->battery.area.height + panel->area.paddingx);
+#endif
+ }