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

Michael Thayer michael.thayer at oracle.com
Wed Apr 23 11:50:03 PDT 2014


On 19/04/14 08:13, Alan Coopersmith wrote:
> 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.

Sorry about that - I was doing my testing using that version as I was 
having trouble getting the latest versions of everything building in my 
Solaris VM, though I thought I had submitted my forward-port to master. 
  I will check that tomorrow and re-submit.

Regards,

Michael

> 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;
>>       }
>>
>
>


-- 
ORACLE Deutschland B.V. & Co. KG   Michael Thayer
Werkstrasse 24                     VirtualBox engineering
71384 Weinstadt, Germany           mailto:michael.thayer at oracle.com

Hauptverwaltung: Riesstr. 25, D-80992 München
Registergericht: Amtsgericht München, HRA 95603
Geschäftsführer: Jürgen Kunz

Komplementärin: ORACLE Deutschland Verwaltung B.V.
Hertogswetering 163/167, 3543 AS Utrecht, Niederlande
Handelsregister der Handelskammer Midden-Niederlande, Nr. 30143697
Geschäftsführer: Alexander van der Ven, Astrid Kepper, Val Maher


More information about the xorg-devel mailing list