systray [4/4]: implement systray transparency
Kirill K. Smirnov
lich at math.spbu.ru
Fri Feb 15 08:10:31 CST 2008
> "Kirill K. Smirnov" <lich at math.spbu.ru> writes:
> > diff --git a/dlls/winex11.drv/winex11.drv.spec
> > b/dlls/winex11.drv/winex11.drv.spec index 36b83d7..126cbc5 100644
> > --- a/dlls/winex11.drv/winex11.drv.spec
> > +++ b/dlls/winex11.drv/winex11.drv.spec
> > @@ -130,6 +130,7 @@ # Desktop
> > # System tray
> > @ cdecl wine_make_systray_window(long) X11DRV_make_systray_window
> > +@ cdecl wine_systray_window_clear(long) X11DRV_systray_window_clear
> We don't want to export such a specific function. Besides, it should
> really be setting the window shape.
Do I understand you correct that we should cut off transparent parts of
icon, thus making window shape to match solid part of icon? Taking into
account that almost every xembed-systray-aware application uses
ParentRelative attribute (and KDE developers assumes this as I noticed at bug
#3534), the idea of changing window shape sounds really strange.
1) Is there any strong reason why we really must change windows shape to
achieve visual transparency?
2) Will it be better to stop embedding wine windows in favor of embedding
pure X windows (like other apps do)? This way assumes implementing all
xembed-specific stuff at winex11.drv side and exporting ONLY ONE function
like wine_xembed_systray_handler(int cmd, void *data), which converts windows
icon to X11 icon, creates X11 window with ParentRelative bkgrnd and embeds
it. Explorer will use this function when it adds/removes icon to/from system
tray. Also, this function will detect the case of wine virtual desktop and
notify explorer to stop using xembed.
I'm just not sure that this way will not break relaying mouse events.
More information about the wine-devel