X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Fsystray%2Fsystraybar.c;h=4161a6a0ea79f19020e6afd55214366540aca47e;hb=7a03bbf353324d6803aa84ca8fd41e6c6f4d099c;hp=5a380c192302ebc3c7f5079d57374588f00eda52;hpb=4dfce699f6879b5638b044affa6972581ef04bf6;p=chaz%2Ftint2 diff --git a/src/systray/systraybar.c b/src/systray/systraybar.c index 5a380c1..4161a6a 100644 --- a/src/systray/systraybar.c +++ b/src/systray/systraybar.c @@ -116,6 +116,53 @@ void init_systray_panel(void *p) void draw_systray(void *obj, cairo_t *c) { + // TODO : position and size the icon window when position of systray is known + Systraybar *sysbar = obj; + Panel *panel = sysbar->area.panel; + int i, posx, posy, marging=3, icons_per_column=1, icons_per_row=1; + int icon_size = 24; + int start = panel->area.bg->border.width + panel->area.paddingy + systray.area.bg->border.width + systray.area.paddingy +marging/2; + if (panel_horizontal) { + posy = start; + posx = systray.area.posx + systray.area.bg->border.width + systray.area.paddingxlr; + } + else { + posx = start; + posy = systray.area.posy + systray.area.bg->border.width + systray.area.paddingxlr; + } + + TrayWindow *traywin; + GSList *l; + for (i=1, l = systray.list_icons; l ; i++, l = l->next) { + traywin = (TrayWindow*)l->data; + if (traywin->hide) continue; + + traywin->y = posy; + traywin->x = posx; + traywin->width = icon_size; + traywin->height = icon_size; + if (panel_horizontal) { + if (i % icons_per_column) + posy += icon_size + sysbar->area.paddingx; + else { + posy = start; + posx += (icon_size + systray.area.paddingx); + } + } + else { + if (i % icons_per_row) + posx += icon_size + systray.area.paddingx; + else { + posx = start; + posy += (icon_size + systray.area.paddingx); + } + } + + // position and size the icon window + XMoveResizeWindow(server.dsp, traywin->id, traywin->x, traywin->y, icon_size, icon_size); + XResizeWindow(server.dsp, traywin->tray_id, icon_size, icon_size); + } + if (server.real_transparency || systray.alpha != 100 || systray.brightness != 0 || systray.saturation != 0) { if (render_background) XFreePixmap(server.dsp, render_background); render_background = XCreatePixmap(server.dsp, server.root_win, systray.area.width, systray.area.height, server.depth); @@ -126,11 +173,9 @@ void draw_systray(void *obj, cairo_t *c) } -void resize_systray(void *obj) +int resize_systray(void *obj) { Systraybar *sysbar = obj; - Panel *panel = sysbar->area.panel; - TrayWindow *traywin; GSList *l; int count, icon_size; int icons_per_column=1, icons_per_row=1, marging=0; @@ -159,14 +204,6 @@ void resize_systray(void *obj) 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; @@ -178,58 +215,8 @@ void resize_systray(void *obj) 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 - } - - 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 = start; - posx = systray.area.posx + systray.area.bg->border.width + systray.area.paddingxlr; - } - else { - posx = start; - posy = systray.area.posy + systray.area.bg->border.width + systray.area.paddingxlr; - } - - for (i=1, l = systray.list_icons; l ; i++, l = l->next) { - traywin = (TrayWindow*)l->data; - if (traywin->hide) continue; - - traywin->y = posy; - traywin->x = posx; - traywin->width = icon_size; - traywin->height = icon_size; - if (panel_horizontal) { - if (i % icons_per_column) - posy += icon_size + sysbar->area.paddingx; - else { - posy = start; - posx += (icon_size + systray.area.paddingx); - } - } - else { - if (i % icons_per_row) - posx += icon_size + systray.area.paddingx; - else { - posx = start; - posy += (icon_size + systray.area.paddingx); - } - } - - // position and size the icon window - 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; + return 1; } @@ -278,7 +265,7 @@ void start_net() // v0.3 trayer specification. tint2 always horizontal. // Vertical panel will draw the systray horizontal. - int orient = 0; + long orient = 0; XChangeProperty(server.dsp, net_sel_win, server.atom._NET_SYSTEM_TRAY_ORIENTATION, XA_CARDINAL, 32, PropModeReplace, (unsigned char *) &orient, 1); VisualID vid; if (server.visual32 && (systray.alpha != 100 || systray.brightness != 0 || systray.saturation != 0)) @@ -376,7 +363,7 @@ gboolean add_icon(Window id) XSetWindowAttributes set_attr; Visual* visual = server.visual; //printf("icon with depth: %d, width %d, height %d\n", attr.depth, attr.width, attr.height); - printf("icon with depth: %d\n", attr.depth); + //printf("icon with depth: %d\n", attr.depth); if (attr.depth != server.depth || systray.alpha != 100 || systray.brightness != 0 || systray.saturation != 0) { visual = attr.visual; set_attr.colormap = attr.colormap;