Two monitors & fullscreen mode - minor bug

Bradey D. Honsinger bradeyh@ugcs.caltech.edu
Tue Jul 24 17:11:00 GMT 2001


> > - With engine 1, clicking on a window on the 2nd monitor hides the XFree
> > display on the 1st monitor.
> >
> > I DO realize these are really minor issues, and do not expect a fix unless
> > they are really easy fixes.  Just wanted to report my findings.
>
> Hmm... yeah, I wouldn't be able to address those issues, as I don't have
> room for a two-monitor setup (small dorm room).  So, I guess that the two
> monitor issues are your itch to scratch.  The Cygwin/XFree86 Contributor's
> Guide ( http://xfree86.cygwin.com/docs/cg/ ) should help get you started if
> you feel like trying to take a stab at addressing those issues.

I ran into this problem using a virtual desktop utility on a single monitor,
in case you'd like to try duplicating it in your dorm room :) The one I'm
using is here: < http://www.enablesoftware.com/evd.htm >. I'm using it the same
way Chris is--I want a full-screen X window on one virtual desktop, with other
Windows apps on the rest. Using a window instead isn't a big annoyance--it
just doesn't look as cool.

I would imagine this behaviour is intentional--when in fullscreen mode, you'd
normally want to minimize your window when you lose the focus, so that you
don't obscure other windows. I ran into a similar problem making a remote
control app work with multiple monitors a few years ago. The solution, IIRC,
was to check to see whether the window gaining the focus overlapped with
yours--if it didn't, you didn't have to minimize. Give me a few minutes to go
check out the Cygwin/XFree86 source...

Well, looks like I was right about the code intentionally minimizing when
losing focus in fullscreen mode, at least in some places.
winActivateAppShadowGDI() does just that on a WM_ACTIVATEAPP message:

  /* From $XFree86: xc/programs/Xserver/hw/xwin/winshadgdi.c,v 1.13: */
  else if (!pScreenPriv->fActive
	   && pScreenInfo->fFullScreen)
    {
      /*
       * Deactivating, stuff our window onto the
       * task bar.
       */
      ShowWindow (pScreenPriv->hwndScreen, SW_MINIMIZE);
    }

That would account for the problem Chris describes--the ShadowGDI engine is
engine 1. The problem is, I'm running the ShadowDDNL engine (engine 4), which
doesn't appear to go through that code path--it should be using
winActivateAppShadowDDNL(), which doesn't explicitly minimize the window. Can
anyone more familiar with the code enlighten me?

If anyone's interested in fixing it soon, let me know and I'll see if I can
help--please cc me if you post back to the list. Otherwise, I'll take a look
at posting a patch if/when I have enough time to checkout the source, build
it, and run it through a debugger.

- Bradey









More information about the Cygwin-xfree mailing list