[PATCH xf86-input-mouse] Make absolute input reporting in Solaris aware of resolution changes

Alan Coopersmith alan.coopersmith at oracle.com
Fri Apr 18 23:13:04 PDT 2014


This doesn't apply to current git at all.   The git index of ad38ba4 suggests
it's based on xf86-input-mouse 1.7.2, not the current 1.9.0 release or git master.

	-alan-

On 04/10/14 11:21 AM, Michael Thayer wrote:
> Currently on Solaris absolute input reporting only takes resolution changes
> into account when the video driver is using the pre-RandR 1.2 APIs, and
> there it uses the physical resolution, not the virtual.  This patch fixes
> those two things.
>
> Signed-off-by: Michael Thayer <michael.thayer at oracle.com>
> ---
>   src/sun_mouse.c |   42 +++++++++++++++++++++++++++++++++---------
>   1 file changed, 33 insertions(+), 9 deletions(-)
>
> diff --git a/src/sun_mouse.c b/src/sun_mouse.c
> index ad38ba4..9ffd590 100644
> --- a/src/sun_mouse.c
> +++ b/src/sun_mouse.c
> @@ -57,6 +57,7 @@
>   #include "mouse.h"
>   #include "xisb.h"
>   #include "mipointer.h"
> +#include "xf86Crtc.h"
>   #include <sys/stropts.h>
>   #include <sys/vuid_event.h>
>   #include <sys/msio.h>
> @@ -401,14 +402,11 @@ static void vuidMouseSendScreenSize(ScreenPtr pScreen, VuidMsePtr pVuidMse)
>       ScrnInfoPtr pScr = XF86SCRNINFO(pScreen);
>       int result;
>
> -    if (!pScr->currentMode)
> -	return;
> -
> -    if ((pVuidMse->absres.width != pScr->currentMode->HDisplay) ||
> -	(pVuidMse->absres.height != pScr->currentMode->VDisplay))
> +    if ((pVuidMse->absres.width != pScr->virtualX) ||
> +	(pVuidMse->absres.height != pScr->virtualY))
>       {
> -	pVuidMse->absres.width = pScr->currentMode->HDisplay;
> -	pVuidMse->absres.height = pScr->currentMode->VDisplay;
> +	pVuidMse->absres.width = pScr->virtualX;
> +	pVuidMse->absres.height = pScr->virtualY;
>
>   	do {
>   	    result = ioctl(pInfo->fd, MSIOSRESOLUTION, &(pVuidMse->absres));
> @@ -452,6 +450,24 @@ static void vuidMouseAdjustFrame(int index, int x, int y, int flags)
>   	  }
>         }
>   }
> +
> +static void vuidMouseCrtcNotify(ScreenPtr pScreen)
> +{
> +      xf86_crtc_notify_proc_ptr wrappedCrtcNotify
> +	  = (xf86_crtc_notify_proc_ptr) vuidMouseGetScreenPrivate(pScreen);
> +      VuidMsePtr	m;
> +      ScreenPtr 	ptrCurScreen;
> +
> +      if(wrappedCrtcNotify)
> +	 wrappedCrtcNotify(pScreen);
> +
> +      for (m = vuidMouseList; m != NULL ; m = m->next) {
> +	  ptrCurScreen = miPointerGetScreen(m->pInfo->dev);
> +	  if (ptrCurScreen == pScreen) {
> +	      vuidMouseSendScreenSize(pScreen, m);
> +	  }
> +      }
> +}
>   #endif /* HAVE_ABSOLUTE_MOUSE_SCALING */
>
>
> @@ -487,8 +503,16 @@ vuidMouseProc(DeviceIntPtr pPointer, int what)
>   		for (i = 0; i < screenInfo.numScreens; i++) {
>   		    ScreenPtr pScreen = screenInfo.screens[i];
>   		    ScrnInfoPtr pScrn = XF86SCRNINFO(pScreen);
> -		    vuidMouseSetScreenPrivate(pScreen, pScrn->AdjustFrame);
> -		    pScrn->AdjustFrame = vuidMouseAdjustFrame;
> +		    if (xf86CrtcConfigPrivateIndex != -1) {
> +			xf86_crtc_notify_proc_ptr pCrtcNotify
> +			    = xf86_wrap_crtc_notify(pScreen,
> +						    vuidMouseCrtcNotify);
> +			vuidMouseSetScreenPrivate(pScreen, pCrtcNotify);
> +		    } else {
> +			vuidMouseSetScreenPrivate(pScreen,
> +						  pScrn->AdjustFrame);
> +			pScrn->AdjustFrame = vuidMouseAdjustFrame;
> +		    }
>   		}
>   	    vuidMouseGeneration = serverGeneration;
>   	}
>


-- 
	-Alan Coopersmith-              alan.coopersmith at oracle.com
	 Oracle Solaris Engineering - http://blogs.oracle.com/alanc


More information about the xorg-devel mailing list