aboutsummaryrefslogtreecommitdiff
path: root/xorg-server/hw/xwin/winmouse.c
diff options
context:
space:
mode:
Diffstat (limited to 'xorg-server/hw/xwin/winmouse.c')
-rw-r--r--xorg-server/hw/xwin/winmouse.c152
1 files changed, 59 insertions, 93 deletions
diff --git a/xorg-server/hw/xwin/winmouse.c b/xorg-server/hw/xwin/winmouse.c
index cf52bbaaf..c99e9c992 100644
--- a/xorg-server/hw/xwin/winmouse.c
+++ b/xorg-server/hw/xwin/winmouse.c
@@ -43,14 +43,13 @@
#include <xkbsrv.h>
#endif
-#if 1
#include "inputstr.h"
+#include "exevents.h" /* for button/axes labels */
+#include "xserver-properties.h"
/* Peek the internal button mapping */
static CARD8 const *g_winMouseButtonMap = NULL;
-#endif
-#include <X11/extensions/XIproto.h>
/*
* Local prototypes
@@ -78,6 +77,8 @@ winMouseProc (DeviceIntPtr pDeviceInt, int iState)
int lngWheelEvents = 2;
CARD8 *map;
DevicePtr pDevice = (DevicePtr) pDeviceInt;
+ Atom *btn_labels;
+ Atom axes_labels[2];
switch (iState)
{
@@ -105,17 +106,29 @@ winMouseProc (DeviceIntPtr pDeviceInt, int iState)
map[0] = 0;
for (i=1; i <= lngMouseButtons + lngWheelEvents; i++)
map[i] = i;
+
+ btn_labels = calloc((lngMouseButtons + lngWheelEvents), sizeof(Atom));
+ btn_labels[0] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_LEFT);
+ btn_labels[1] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_MIDDLE);
+ btn_labels[2] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_RIGHT);
+ btn_labels[3] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_WHEEL_UP);
+ btn_labels[4] = XIGetKnownProperty(BTN_LABEL_PROP_BTN_WHEEL_DOWN);
+
+ axes_labels[0] = XIGetKnownProperty(AXIS_LABEL_PROP_REL_X);
+ axes_labels[1] = XIGetKnownProperty(AXIS_LABEL_PROP_REL_Y);
+
InitPointerDeviceStruct (pDevice,
map,
lngMouseButtons + lngWheelEvents,
+ btn_labels,
winMouseCtrl,
GetMotionHistorySize(),
- 2);
+ 2,
+ axes_labels);
free(map);
+ free(btn_labels);
-#if 1
g_winMouseButtonMap = pDeviceInt->button->map;
-#endif
break;
case DEVICE_ON:
@@ -123,9 +136,7 @@ winMouseProc (DeviceIntPtr pDeviceInt, int iState)
break;
case DEVICE_CLOSE:
-#if 1
g_winMouseButtonMap = NULL;
-#endif
case DEVICE_OFF:
pDevice->on = FALSE;
break;
@@ -136,7 +147,7 @@ winMouseProc (DeviceIntPtr pDeviceInt, int iState)
/* Handle the mouse wheel */
int
-winMouseWheel (ScreenPtr pScreen, int iDeltaZ, int x, int y)
+winMouseWheel (ScreenPtr pScreen, int iDeltaZ)
{
winScreenPriv(pScreen);
int button; /* Button4 or Button5 */
@@ -211,10 +222,10 @@ winMouseWheel (ScreenPtr pScreen, int iDeltaZ, int x, int y)
while (iDeltaZ--)
{
/* Push the wheel button */
- winMouseButtonsSendEvent (DeviceButtonPress, button,x,y);
+ winMouseButtonsSendEvent (ButtonPress, button);
/* Release the wheel button */
- winMouseButtonsSendEvent (DeviceButtonRelease, button,x,y);
+ winMouseButtonsSendEvent (ButtonRelease, button);
}
return 0;
@@ -226,62 +237,36 @@ winMouseWheel (ScreenPtr pScreen, int iDeltaZ, int x, int y)
*/
void
-winMouseButtonsSendEvent (int iEventType, int iButton, int x, int y)
+winMouseButtonsSendEvent (int iEventType, int iButton)
{
- DeviceIntPtr pDev;
- deviceKeyButtonPointer xCurrentEvent;
- deviceKeyButtonPointer *kbp = &xCurrentEvent;
+ EventListPtr events;
+ int i, nevents;
- /* Load an xEvent and enqueue the event */
- kbp->type=iEventType;
-#if 1
if (g_winMouseButtonMap)
- kbp->detail = g_winMouseButtonMap[iButton];
- else
-#endif
- kbp->detail = iButton;
- kbp->time = g_c32LastInputEventTime = GetTickCount ();
-
- kbp->root_x = x;
- kbp->root_y = y;
-
- for (pDev = inputInfo.devices; pDev; pDev = pDev->next)
- if ((pDev->coreEvents && pDev != inputInfo.pointer) && pDev->button)
- {
- kbp->deviceid = pDev->id;
- mieqEnqueue (pDev, (xEventPtr)kbp);
- }
-}
-
-void winGetPtMouse(HWND hwnd, LPARAM lParam, POINT *ptMouse)
-{
- /* Unpack the client area mouse coordinates */
- ptMouse->x = GET_X_LPARAM(lParam);
- ptMouse->y = GET_Y_LPARAM(lParam);
-}
+ iButton = g_winMouseButtonMap[iButton];
-void winGetPtMouseScreen(HWND hwnd, LPARAM lParam, POINT *ptMouse)
-{
- /* Unpack the client area mouse coordinates */
- ptMouse->x = GET_X_LPARAM(lParam);
- ptMouse->y = GET_Y_LPARAM(lParam);
+ GetEventList(&events);
+ nevents = GetPointerEvents(events, g_pwinPointer, iEventType, iButton,
+ POINTER_RELATIVE, 0, 0, NULL);
- /* Translate the client area mouse coordinates to screen coordinates */
- ClientToScreen (hwnd, ptMouse);
+ for (i = 0; i < nevents; i++)
+ mieqEnqueue(g_pwinPointer, events[i].event);
- /* Screen Coords from (-X, -Y) -> Root Window (0, 0) */
- ptMouse->x -= GetSystemMetrics (SM_XVIRTUALSCREEN);
- ptMouse->y -= GetSystemMetrics (SM_YVIRTUALSCREEN);
+#if CYGDEBUG
+ ErrorF("winMouseButtonsSendEvent: iEventType: %d, iButton: %d, nEvents %d\n",
+ iEventType, iButton, nevents);
+#endif
}
+
/*
* Decide what to do with a Windows mouse message
*/
-static int
-_winMouseButtonsHandle (ScreenPtr pScreen,
+int
+winMouseButtonsHandle (ScreenPtr pScreen,
int iEventType, int iButton,
- WPARAM wParam, POINT *ptMouse)
+ WPARAM wParam)
{
winScreenPriv(pScreen);
winScreenInfo *pScreenInfo = pScreenPriv->pScreenInfo;
@@ -290,12 +275,12 @@ _winMouseButtonsHandle (ScreenPtr pScreen,
if (pScreenInfo->iE3BTimeout == WIN_E3B_OFF)
{
/* Emulate 3 buttons is off, send the button event */
- winMouseButtonsSendEvent (iEventType, iButton, ptMouse->x, ptMouse->y);
+ winMouseButtonsSendEvent (iEventType, iButton);
return 0;
}
/* Emulate 3 buttons is on, let the fun begin */
- if (iEventType == DeviceButtonPress
+ if (iEventType == ButtonPress
&& pScreenPriv->iE3BCachedPress == 0
&& !pScreenPriv->fE3BFakeButton2Sent)
{
@@ -316,7 +301,7 @@ _winMouseButtonsHandle (ScreenPtr pScreen,
pScreenInfo->iE3BTimeout,
NULL);
}
- else if (iEventType == DeviceButtonPress
+ else if (iEventType == ButtonPress
&& pScreenPriv->iE3BCachedPress != 0
&& pScreenPriv->iE3BCachedPress != iButton
&& !pScreenPriv->fE3BFakeButton2Sent)
@@ -331,12 +316,12 @@ _winMouseButtonsHandle (ScreenPtr pScreen,
pScreenPriv->iE3BCachedPress = 0;
/* Send fake middle button */
- winMouseButtonsSendEvent (DeviceButtonPress, Button2, ptMouse->x, ptMouse->y);
+ winMouseButtonsSendEvent (ButtonPress, Button2);
/* Indicate that a fake middle button event was sent */
pScreenPriv->fE3BFakeButton2Sent = TRUE;
}
- else if (iEventType == DeviceButtonRelease
+ else if (iEventType == ButtonRelease
&& pScreenPriv->iE3BCachedPress == iButton)
{
/*
@@ -347,10 +332,10 @@ _winMouseButtonsHandle (ScreenPtr pScreen,
pScreenPriv->iE3BCachedPress = 0;
/* Send cached press, then send release */
- winMouseButtonsSendEvent (DeviceButtonPress, iButton, ptMouse->x, ptMouse->y);
- winMouseButtonsSendEvent (DeviceButtonRelease, iButton, ptMouse->x, ptMouse->y);
+ winMouseButtonsSendEvent (ButtonPress, iButton);
+ winMouseButtonsSendEvent (ButtonRelease, iButton);
}
- else if (iEventType == DeviceButtonRelease
+ else if (iEventType == ButtonRelease
&& pScreenPriv->fE3BFakeButton2Sent
&& !(wParam & MK_LBUTTON)
&& !(wParam & MK_RBUTTON))
@@ -361,9 +346,9 @@ _winMouseButtonsHandle (ScreenPtr pScreen,
pScreenPriv->fE3BFakeButton2Sent = FALSE;
/* Send middle mouse button release */
- winMouseButtonsSendEvent (DeviceButtonRelease, Button2, ptMouse->x, ptMouse->y);
+ winMouseButtonsSendEvent (ButtonRelease, Button2);
}
- else if (iEventType == DeviceButtonRelease
+ else if (iEventType == ButtonRelease
&& pScreenPriv->iE3BCachedPress == 0
&& !pScreenPriv->fE3BFakeButton2Sent)
{
@@ -371,52 +356,33 @@ _winMouseButtonsHandle (ScreenPtr pScreen,
* Button was release, no button is cached,
* and there is no fake button 2 release is pending.
*/
- winMouseButtonsSendEvent (DeviceButtonRelease, iButton, ptMouse->x, ptMouse->y);
+ winMouseButtonsSendEvent (ButtonRelease, iButton);
}
return 0;
}
-int
-winMouseButtonsHandle (ScreenPtr pScreen,
- int iEventType, int iButton,
- WPARAM wParam, HWND hwnd, LPARAM lParam)
-{
- POINT ptMouse;
- winGetPtMouse(hwnd,lParam,&ptMouse);
- return _winMouseButtonsHandle(pScreen, iEventType, iButton, wParam ,&ptMouse);
-}
-
-int
-winMouseButtonsHandleScreen (ScreenPtr pScreen,
- int iEventType, int iButton,
- WPARAM wParam, HWND hwnd, LPARAM lParam)
-{
- POINT ptMouse;
- winGetPtMouseScreen(hwnd,lParam,&ptMouse);
- return _winMouseButtonsHandle(pScreen, iEventType, iButton, wParam ,&ptMouse);
-}
-
-
/**
* Enqueue a motion event.
+ *
+ * XXX: miPointerMove does exactly this, but is static :-( (and uses a static buffer)
+ *
*/
void winEnqueueMotion(int x, int y)
{
int i, nevents;
int valuators[2];
- int MaxN=GetMaximumEventsNum();
- EventListPtr events = InitEventList(MaxN);
+ EventListPtr events;
+
+ miPointerSetPosition(g_pwinPointer, &x, &y);
+ GetEventList(&events);
valuators[0] = x;
valuators[1] = y;
- nevents = GetPointerEvents(events, inputInfo.pointer, MotionNotify, 0,
+ nevents = GetPointerEvents(events, g_pwinPointer, MotionNotify, 0,
POINTER_ABSOLUTE, 0, 2, valuators);
for (i = 0; i < nevents; i++)
- mieqEnqueue(inputInfo.pointer, events[i].event);
-
- FreeEventList(events,MaxN);
+ mieqEnqueue(g_pwinPointer, events[i].event);
}
-// XXX: miPointerMove does exactly this, but is static :-( (and uses a static buffer)