Looking for ideas to fix x2x in rootless mode...

Harold L Hunt II huntharo@msu.edu
Thu Oct 31 14:27:00 GMT 2002


Thomas,

Your simplist fix is to add a command-line parameter to XWin.exe that 
tells it to grab the Windows cursor for you and keep trapping mouse 
events until the focus is given to another app via either Alt+Tab or by 
clicking another app's menu on the task bar.  You wouldn't be able to 
``click-through'' to put the focus on Windows applications, but at least 
you would be able to see those other apps in the background.

Harold

Thomas Chadwick wrote:
> I'm hoping some folks on the ML might help me brainstorm a solution to 
> fixing x2x in rootless mode...
> 
> For those of you not familiar with x2x, it's a handy utility that gives 
> you a dual-headed X display if you have side-by-side workstations both 
> running X (one is designated the "from" display, the other the "to" 
> display).  It does this by simply grabbing the pointer and keyboard 
> focus on the "from" display, and generating fake pointer and keyboard 
> events on the "to" display whenever it receives pointer or keyboard 
> events from the "from" display.
> 
> In my particular case, the "from" display is a PC running 
> Cygwin/XFree86, and the "to" display is an RS/6000 Workstation.
> 
> The trouble with rootless mode is that when my pointer leaves the X 
> server region, x2x no longer gets any pointer events from the "from" 
> display.  This has the effect of restricting my pointer movements on the 
> "to" display to areas that are occupied by X clients on the "from" display.
> 
> I tried patching x2x by using the Windows API calls SetCapture(HWND 
> hwnd) and ReleaseCapture() at the same time x2x does XGrabPointer() and 
> XUnGrabPointer() respectively.  However, the Capture fails.  If I 
> interpret the MSDN documentation correctly, I think it's because the 
> x2x.exe thread does not own the HWND it's trying to do the Capture on 
> (XWin.exe does).  I suppose I could try to overcome this by patching the 
> XGrabPointer() and XUnGrabPointer() functions in the XFree86 source 
> directly.  This would result in XWin doing the SetCapture as a result of 
> calling XGrabPointer() from x2x.
> 
> I haven't actually tried this, however, because it occurs to me that I 
> have an additional problem.  Again, if I interpret the scant 
> documentation properly, it looks to me that while SetCapture may grab 
> the pointer, clicking a mouse button while outside the X server region 
> will cause the capture to be released and the mouse button event to go 
> to whatever MS Windows client is under the pointer at the time of the 
> click.  This would have the effect of letting me point to any region in 
> the "to" display as long as I don't press a mouse button.  Not very useful.
> 
> Perhaps there is a different API call which keeps a "stronger" hold of 
> the pointer than SetCapture()?
> 
> How about calling XWarpPointer() from x2x to keep the pointer from 
> leaving the X server region?
> 
> Any other ideas?
> 
> 
> _________________________________________________________________
> Broadband? Dial-up? Get reliable MSN Internet Access. 
> http://resourcecenter.msn.com/access/plans/default.asp
> 



More information about the Cygwin-xfree mailing list