[PATCH xserver v2 1/2] xf86Cursor: Use PRIME master xf86CursorScreenRec::HotX/Y for slaves

Hans de Goede hdegoede at redhat.com
Thu Oct 6 11:00:39 UTC 2016


Hi,

On 06-10-16 11:45, Michel Dänzer wrote:
> From: Michel Dänzer <michel.daenzer at amd.com>
>
> xf86CursorScreenRec::HotX/Y contain 0 for PRIME slave screens.
>
> Fixes incorrect HW cursor position on PRIME slave screens.
>
> Also hoist the hotspot translation out from xf86ScreenSet/MoveCursor to
> xf86Set/MoveCursor, since the hotspot position is a property of the
> cursor, not the screen.
>
> v2:
> * Squash patches 1 & 2 of the v1 series, since it's basically the same
>   problem
> * Use the master screen's xf86CursorScreenRec::HotX/Y instead of
>   CursorRec::bits->x/yhot, since CursorRec::bits can be NULL (Hans de
>   Goede)
>
> Signed-off-by: Michel Dänzer <michel.daenzer at amd.com>

v2 series looks good to me, both patches are:

Reviewed-by: Hans de Goede <hdegoede at redhat.com>

REgards,

Hans

> ---
>  hw/xfree86/ramdac/xf86HWCurs.c | 20 ++++++++++++++++----
>  1 file changed, 16 insertions(+), 4 deletions(-)
>
> diff --git a/hw/xfree86/ramdac/xf86HWCurs.c b/hw/xfree86/ramdac/xf86HWCurs.c
> index e8966ed..c455902 100644
> --- a/hw/xfree86/ramdac/xf86HWCurs.c
> +++ b/hw/xfree86/ramdac/xf86HWCurs.c
> @@ -179,8 +179,8 @@ xf86ScreenSetCursor(ScreenPtr pScreen, CursorPtr pCurs, int x, int y)
>      bits =
>          dixLookupScreenPrivate(&pCurs->devPrivates, CursorScreenKey, pScreen);
>
> -    x -= infoPtr->pScrn->frameX0 + ScreenPriv->HotX;
> -    y -= infoPtr->pScrn->frameY0 + ScreenPriv->HotY;
> +    x -= infoPtr->pScrn->frameX0;
> +    y -= infoPtr->pScrn->frameY0;
>
>      if (!pCurs->bits->argb || !xf86DriverHasLoadCursorARGB(infoPtr))
>          if (!bits) {
> @@ -211,8 +211,14 @@ xf86ScreenSetCursor(ScreenPtr pScreen, CursorPtr pCurs, int x, int y)
>  Bool
>  xf86SetCursor(ScreenPtr pScreen, CursorPtr pCurs, int x, int y)
>  {
> +    xf86CursorScreenPtr ScreenPriv =
> +        (xf86CursorScreenPtr) dixLookupPrivate(&pScreen->devPrivates,
> +                                               xf86CursorScreenKey);
>      ScreenPtr pSlave;
>
> +    x -= ScreenPriv->HotX;
> +    y -= ScreenPriv->HotY;
> +
>      if (!xf86ScreenSetCursor(pScreen, pCurs, x, y))
>          return FALSE;
>
> @@ -263,8 +269,8 @@ xf86ScreenMoveCursor(ScreenPtr pScreen, int x, int y)
>                                                 xf86CursorScreenKey);
>      xf86CursorInfoPtr infoPtr = ScreenPriv->CursorInfoPtr;
>
> -    x -= infoPtr->pScrn->frameX0 + ScreenPriv->HotX;
> -    y -= infoPtr->pScrn->frameY0 + ScreenPriv->HotY;
> +    x -= infoPtr->pScrn->frameX0;
> +    y -= infoPtr->pScrn->frameY0;
>
>      (*infoPtr->SetCursorPosition) (infoPtr->pScrn, x, y);
>  }
> @@ -272,8 +278,14 @@ xf86ScreenMoveCursor(ScreenPtr pScreen, int x, int y)
>  void
>  xf86MoveCursor(ScreenPtr pScreen, int x, int y)
>  {
> +    xf86CursorScreenPtr ScreenPriv =
> +        (xf86CursorScreenPtr) dixLookupPrivate(&pScreen->devPrivates,
> +                                               xf86CursorScreenKey);
>      ScreenPtr pSlave;
>
> +    x -= ScreenPriv->HotX;
> +    y -= ScreenPriv->HotY;
> +
>      xf86ScreenMoveCursor(pScreen, x, y);
>
>      /* ask each slave driver to move the cursor */
>


More information about the xorg-devel mailing list