Re: DGA and PointerMoved()
Marc Aurele La France <[email protected]>
| Newsgroups | gmane.comp.xfree86.devel |
|---|---|
| Message-ID | <[email protected]> |
On Sat, 12 Mar 2005, Marc Aurele La France wrote: > On Tue, 8 Mar 2005, Thomas Winischhofer wrote: >> 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. > The attached should do just that. Anything more on this? Marc. +----------------------------------+-----------------------------------+ | Marc Aurele La France | work: 1-780-492-9310 | | Computing and Network Services | fax: 1-780-492-1729 | | 352 General Services Building | email: [email protected] | | University of Alberta +-----------------------------------+ | Edmonton, Alberta | | | T6G 2H1 | Standard disclaimers apply | | CANADA | | +----------------------------------+-----------------------------------+ XFree86 developer and VP. ATI driver and X server internals.