[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 
handled correct.

> 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 
embedding idea.

Maybe, there is other way to achieve this, but I cannot imagine.

Any ideas?

-- Kirill



More information about the wine-devel mailing list