#define SYSTEM_TRAY_CANCEL_MESSAGE 2
// selection window
-Window net_sel_win = None, hint_win = None;
+Window net_sel_win = None;
// freedesktop specification doesn't allow multi systray
Systraybar systray;
// init systray protocol
net_sel_win = XCreateSimpleWindow(server.dsp, server.root_win, -1, -1, 1, 1, 0, 0, 0);
- // v0.2 trayer specification. tint2 always horizontal.
+ // v0.3 trayer specification. tint2 always horizontal.
// Vertical panel will draw the systray horizontal.
int orient = 0;
XChangeProperty(server.dsp, net_sel_win, server.atom._NET_SYSTEM_TRAY_ORIENTATION, XA_CARDINAL, 32, PropModeReplace, (unsigned char *) &orient, 1);
// watch for the icon trying to resize itself!
XSelectInput(server.dsp, traywin->tray_id, StructureNotifyMask);
if (real_transparency || systray.alpha != 100 || systray.brightness != 0 || systray.saturation != 0) {
- traywin->damage = XDamageCreate(server.dsp, traywin->id, XDamageReportRawRectangles);
+ traywin->damage = XDamageCreate(server.dsp, traywin->id, XDamageReportNonEmpty);
XCompositeRedirectWindow(server.dsp, traywin->id, CompositeRedirectManual);
}
}
}
-void systray_render_icon_now(TrayWindow* traywin)
+void systray_render_icon_now(void* t)
{
+ TrayWindow* traywin = t;
traywin->render_timeout = 0;
// good systray icons support 32 bit depth, but some icons are still 24 bit.
XCopyArea(server.dsp, systray.area.pix.pmap, 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);
XFlush(server.dsp);
}
+
void systray_render_icon(TrayWindow* traywin)
{
// wine tray icons update whenever mouse is over them, so we limit the updates to 50 ms
if (real_transparency || systray.alpha != 100 || systray.brightness != 0 || systray.saturation != 0)
systray_render_icon(traywin);
else
- XClearArea(server.dsp, traywin->id, 0, 0, traywin->width, traywin->height, True);
+ XClearArea(server.dsp, traywin->tray_id, 0, 0, traywin->width, traywin->height, True);
}
-//
-// if (real_transparency || systray.alpha != 100 || systray.brightness != 0 || systray.saturation != 0)
-// XFlush(server.dsp);
}