On 26 Sep 1996, I posted a patch to fix a problem with handling focus
on multiple screen systems.  The problem manifested itself when moving
the pointer from a window on e.g. screen 0 to the root window of
screen 1.  In these situations, screen 0 would still get focus.  See
my message of that date for details.
The fix was simple, I thought.  But then on 30 Sep 1996, Mark Boyns
followed up with a note that under SloppyFocus there were focus
problems with my patch.  Chuck subsequently did not install my patch
in 2.0.45.
I've just spent some time tracking all this down, and I now think that
Mark's problem has nothing to do with my patch (sorry Mark ;).  I
think the SloppyFocus problem exists in 2.0.45 with or without my
patch.  I'd like Mark (or any other multi-screener) to verify, but I
have been able to reproduce the problem from Mark's description with a
vanilla 2.0.45.  My patch does nothing to fix or hurt this, AFAICT.
I've also come to the conclusion that really good multi-screen support
is hopeless with the way FVWM currently handles multiple screens.  I
don't think there's any way for the screen 0 process to know what's
happening on screen 1 and vice versa.  And if you wanted SloppyFocus
to work correctly, it would have to do this:
    - when moving the pointer from a window in screen 0 to the root
      window in screen 1, the original window keeps focus
    - when subsequently moving the pointer to a window in screen 1, it
      gets focus and the original window loses focus.
    - when moving the pointer from a window in screen 0 to a window in
      screen 1, the new window gets focus and the original window
      loses it.
I don't think there's any way to do this because the screen 0 process
never gets EnterNotify events on screen 1, so it will never know
exactly when to de-focus the original screen.  It could be that there
are dark corners of X (or the FVWM sources :) that contain the answer,
but I can't find it, and can't really spend any more time on the
problem.  The ultimate fix is to do what ctwm does and *not* fork a
separate FVWM process for every screen.  That'll take a major effort I
think.
So, I'm reposting my patch (actually a little cleaner this time), and
hope Chuck will put it in the next version.  If not, I'll resign
myself to patching subsequent versions myself...
-Barry
*** events.c	1997/02/20 16:09:23	1.1
--- events.c	1997/02/20 21:34:48
***************
*** 1100,1105 ****
    if(Event.xany.window == Scr.Root)
      {
!       if((Scr.Focus)&&(!(Scr.Focus->flags&ClickToFocus))&&
! 	 (!(Scr.Focus->flags&SloppyFocus)))
          {
            SetFocus(Scr.NoFocusWin,NULL,1);
--- 1100,1105 ----
    if(Event.xany.window == Scr.Root)
      {
!       if(!Scr.Focus || (!(Scr.Focus->flags&ClickToFocus)&&
!                         !(Scr.Focus->flags&SloppyFocus)))
          {
            SetFocus(Scr.NoFocusWin,NULL,1);
--
Visit the official FVWM web page at <URL:http://www.hpc.uh.edu/fvwm/>.
To unsubscribe from the list, send "unsubscribe fvwm" in the body of a
message to majordomo_at_hpc.uh.edu.
To report problems, send mail to fvwm-owner_at_hpc.uh.edu.
Received on Thu Feb 20 1997 - 16:19:47 GMT