[Fwd: Re: DGA and PointerMoved()]

Thomas Winischhofer thomas at winischhofer.net
Wed Mar 9 08:17:12 PST 2005


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1


Taking this over to x.org since nobody replied on xdevel:


- -------- Original Message --------
Subject: Re: DGA and PointerMoved()
Date: Tue, 08 Mar 2005 00:10:18 +0100
From: Thomas Winischhofer <thomas at winischhofer.net>
Reply-To: devel at XFree86.Org
To: devel at XFree86.Org
References: <422C85C4.4020100 at winischhofer.net>
<20050307104647.V28945 at public.xfree86.org>
<Pine.BSO.4.61.0503071443100.668 at login3.srv.ualberta.ca>

Marc Aurele La France wrote:
| On Mon, 7 Mar 2005, Mark Vojkovich wrote:
|
|>> Is it intentional that pScrn->PointerMoved() is being called (by whom?)
|>> when DGA is active?
|
|
|>> I only receive the cursor's last coordinates here from the time before
|>> DGA was activated. Any mouse movement while DGA is active has no
|>> influence on the coordinates received here.
|
|
|>   There is no cursor in DGA mode.  Clients can still get mouse
|> events, but that's not the same thing.  DGA mouse events reflect
|> relative motion rather than absolute, and the bulk of the cursor
|> paths need to be bypassed.  That is, the cursor isn't anywhere,
|> the mouse has been disconnected from the cursor and the relative
|> mouse events are sent directly to the client.
|
|
| Yes, but I don't think that answers Thomas's question.

Erm, yes.

I suspected that the cursor stuff is out of order during DGA usage. My
concern was more in the line of why calls to pScrn->PointerMoved() are
issued during DGA activity. That seems like a bug to me. (The generic
xf86PointerMoved does not contain any checks for DGA activity.)

I discovered this while enhancing MergedFB mode which has a very tricky
driver-side PointerMoved() implementation requirement in order to pan
the real display modes within current meta mode. As soon as I switch,
say, vmware to full screen, I get constant coordinates in my
PointerMoved() routine regardless of mouse movement (but synchronous to
mouse movement, ie no random calls but calls clearly related to actual
mouse movement).

I have looked at the cursor code but it goes through many layers, so I
wasn't able to locate the call yet. In xf86Input.c, a
DGAStealMotionEvent is immediately followed by a "continue" statement,
but that obvisouly doesn't keep the event in some way get through to the
PointerMoved() function.

I work around this now, by checking for DGA myself, but that should be
fixed globally.

Thomas

- --
Thomas Winischhofer
Vienna/Austria
thomas AT winischhofer DOT net	       *** http://www.winischhofer.net
twini AT xfree86 DOT org
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.0 (GNU/Linux)

iD8DBQFCLyGIzydIRAktyUcRAscoAKCFlj7nU890KdU16FcTYMHc0eXI7ACZAaN/
W+ifLTpegLDX2pPPSmNYEvM=
=7pYJ
-----END PGP SIGNATURE-----



More information about the xorg mailing list