[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