Subject: CVS drbob: Experimental RaiseOverUnmanaged Handling - an attempt to fix the

From: FVWM CVS <[email-masked]>
Date: Thu, 22 Aug 2002 21:31:38 -0500

CVSROOT:	/home/cvs/fvwm
Module name:	fvwm
Changes by:	drbob	02/08/22 21:31:38

Modified files:
	.              : ChangeLog 
	fvwm           : events.c focus.c focus.h stack.c stack.h 

Log message:
Experimental RaiseOverUnmanaged Handling - an attempt to fix the
interaction of RaiseOverUnmanaged with various focus policies,
particularly mouse focus + client click raises.

--
Visit the official FVWM web page at <URL:http://www.fvwm.org/>.
To unsubscribe from the list, send "unsubscribe fvwm-workers" in the
body of a message to [email-masked].
To report problems, send mail to [email-masked]

---

From: Bob Woodside <[email-masked]>
Date: Sat, 24 Aug 2002 00:07:11 -0400

On Thu, 22 Aug 2002 21:31:38 -0500

> particularly mouse focus + client click raises.

	To recap briefly:

1) This is an attempt to fix the old "MouseFocusClickRaises breaks double-click
handling in xfm" problem.
2) The problem is caused by the RaiseOverUnmanaged hack in stack.c
(is_on_top_of_layer): formerly it always returned false to force a raise because
we couldn't know whether there was an override_redirect window abovr the target
window. This had the unwanted side effect of causing button grab timing that
didn't work well with MFCR, and caused certain XtLib programs to miss
double-clicks due to extraneous Enter/LeaveNotify events.
3) This fix adds a query of the server's window tree and a search for any
superior OR windows if the target is at the top of the FvwmWindow stack and
RaiseOverUnmanaged is in effect.
4) We don't want to query the server on every call to iotol - there are just too
many of them; so the trick is to find the one spot where the caller really needs
to know the true "on-top" status with regard to OR windows.
5) I thought I had identified this spot, ran the test code for a couple of days,
and committed it. According to some immutable natural law governing such
matters, a few minutes later I dragged out yet another app with an OR splash
window to test, and the new code failed to raise the target window over it.
6) I'll be committing an update shortly that looks intuitively like it shouldn't
work, but does. I can't explain it yet. I can only surmise that Dominik's
rewritten focus & grab code was impeccably correct as far as the timing of grabs
before I tweaked it, so long as iotol didn't return any false negatives.
7) Dominik -- the new version effectively no-ops most of the first version by
reverting to the original handling in HandleEnterNotify; instead it calls the
server-query version of iotol from HandleButtonPress. (Calling the old iotol
would override the effect of the previous call from HandleEnterNotify. I don't
understand why this didn't always fail before.)

Cheers,
Bob