[try 3] systray patches + SetWindowPos in WM_SETICON
Kirill K. Smirnov
lich at math.spbu.ru
Tue Jan 9 01:52:41 CST 2007
> "Kirill K. Smirnov" <lich at math.spbu.ru> writes:
> > Please, explain me, what is wrong with this serie of patches?
> > What to do to improve them?
> As I said, making the background pixmap ParentRelative is just a hack,
> it's not real transparency.
Why is it not a real transparency? This is the easiest way to provide only
output transparency, not input. Exactly what we need.
> You don't know how the parent will paint
> itself, so you can't rely on that.
wine doesn't know that, but does not need to know too. That's why I use
ParentRelative, because when I change KDE (e.g.) panel background it is
> Also, your patch adds special
> handling for the tray window in user32, that's a violation of the
> driver abstraction.
Hm... The core problem here is to notify WM systray to be repainted when wine
changes icon. To achieve this, I call XClearWindow in
setwindowicon at winex11.drv/window.c. This is ideological correct (IMO) -
perform X operation in setwindowicon function when application changes icon.
But!!! defwndproc at user32.defwnd calls SetWindowPos. This breaks everything
concerning wine tray. Tray window should not be reposed. It is done once
(while docking) and forever.
So, my patch for user32 is a 'bugfix' for a 'bug' caused by wine systray
Maybe, there is other way to achieve this, but I cannot imagine.
More information about the wine-devel