Earle F. Philhower III wrote:
Hi all,
I've been hacking away fixing up the support for always-on-top mode which seems to have been broken since the upgrades Takuma did about 3 weeks ago (~v1.1.6.2? of multiwndproc, etc). Minimized always-on-top windows never disappear from in front of other X windows in all the tests I've tried. And when a non-aot window is created on top of an a-o-t one, it is popped to the top of the X window stack, even if there is an a-o-t window in Win32 space above it. It's as if a chunk of the window below the aot window is showing through, and a real pain. (It's caused by XRaiseWindow()ing a window that's not really at the top of the Win32 stack...)
Yup, Takuma knew there were bugs, but the new code is so much more efficient (the old code was performing lots of operations during our block and wakeup handlers, which get called hundreds of times per second) that I told him to leave it there for a few weeks until we could figure out if we could fix it and keep the performance improvement.
I've cleaned all this up in my local copy, and made Emacs/xterm menus work properly in a-o-t mode (they don't disappear!) without stepping on any of Takuma's changes. However, I can't get minimization to work without turning off the Win32 a-o-t setting on the window during the minimize...
Hmm... if you have it mostly fixed, then check it in... Takuma is currently burning cycles trying to fix this also but I don't think he has gotten far. I think he will appreciate having a little help :)
The old behavior was to copy the current a-o-t state to a private flag in pWinPriv on a minimize, remove the a-o-t bit from the window, and on a restore set the a-o-t flag back on the Win32 window if so cached.
If I put this flag and behavior back I can get things working 100% AFAICT: a-o-t windows minimized from the taskbar, the system menu, or the button disappear.
That sounds good. Takuma was talking about re-adding the fRestacking flag... is that the flag you are talking about?
Takuma, if you're reading the list, can you give some insight as to why you took out the old private flag? (I agree it should be cached in the wndproc on the WM_SIZE message, not the SC_* menu handler where it was, that's where I've got it placed presently, and it now works for all different methods of minimizing a window I can think of...)
My guess is that he will agree... but I imagine he'll reply soon anyway.
Harold