add support for mice with more than 3 buttons and one scroll wheel (Chris
B)
This commit is contained in:
parent
516f452e78
commit
c4083511ac
|
@ -1,3 +1,14 @@
|
|||
2004-08-26 Chris B <news at sempermax dot com>
|
||||
|
||||
* win.h, winmessages.h:
|
||||
Add defines for WM_XBUTTON
|
||||
* winmouse.c (winMouseProc):
|
||||
Query number of mouse buttons from windows.
|
||||
* winmultiwindowwndproc.c (winTopLevelWindowProc):
|
||||
* winwin32rootlesswndproc.c (winMWExtWMWindowProc):
|
||||
* winwndproc.c (winWindowProc):
|
||||
Handle WM_XBUTTON messages.
|
||||
|
||||
2004-08-02 Kensuke Matsuzaki
|
||||
|
||||
* winclipboardthread.c winclipboardwndproc.c:
|
||||
|
|
|
@ -48,6 +48,17 @@
|
|||
#define CYGDEBUG NO
|
||||
#endif
|
||||
|
||||
/* WM_XBUTTON Messages. They should go into w32api. */
|
||||
#ifndef WM_XBUTTONDOWN
|
||||
# define WM_XBUTTONDOWN 523
|
||||
#endif
|
||||
#ifndef WM_XBUTTONUP
|
||||
# define WM_XBUTTONUP 524
|
||||
#endif
|
||||
#ifndef WM_XBUTTONDBLCLK
|
||||
# define WM_XBUTTONDBLCLK 525
|
||||
#endif
|
||||
|
||||
#define NEED_EVENTS
|
||||
|
||||
#define WIN_DEFAULT_BPP 0
|
||||
|
|
|
@ -523,9 +523,9 @@ static const char *MESSAGE_NAMES[1024] = {
|
|||
"WM_MBUTTONUP",
|
||||
"WM_MBUTTONDBLCLK",
|
||||
"WM_MOUSEWHEEL",
|
||||
"523",
|
||||
"524",
|
||||
"525",
|
||||
"WM_XBUTTONDOWN",
|
||||
"WM_XBUTTONUP",
|
||||
"WM_XBUTTONDBLCLK",
|
||||
"526",
|
||||
"527",
|
||||
"WM_PARENTNOTIFY",
|
||||
|
|
|
@ -64,23 +64,26 @@ winMouseCtrl (DeviceIntPtr pDevice, PtrCtrl *pCtrl)
|
|||
int
|
||||
winMouseProc (DeviceIntPtr pDeviceInt, int iState)
|
||||
{
|
||||
CARD8 map[6];
|
||||
int lngMouseButtons, i;
|
||||
CARD8 *map;
|
||||
DevicePtr pDevice = (DevicePtr) pDeviceInt;
|
||||
|
||||
switch (iState)
|
||||
{
|
||||
case DEVICE_INIT:
|
||||
map[1] = 1;
|
||||
map[2] = 2;
|
||||
map[3] = 3;
|
||||
map[4] = 4;
|
||||
map[5] = 5;
|
||||
lngMouseButtons = GetSystemMetrics(SM_CMOUSEBUTTONS);
|
||||
ErrorF ("%d mouse buttons found\n", lngMouseButtons);
|
||||
map = malloc(sizeof(CARD8) * (lngMouseButtons + 1 + 2));
|
||||
|
||||
for (i=1; i <= lngMouseButtons + 2; i++)
|
||||
map[i] = i;
|
||||
InitPointerDeviceStruct (pDevice,
|
||||
map,
|
||||
5, /* Buttons 4 and 5 are mouse wheel events */
|
||||
lngMouseButtons + 2, /* Buttons 4 and 5 are mouse wheel events */
|
||||
miPointerGetMotionEvents,
|
||||
winMouseCtrl,
|
||||
miPointerGetMotionBufferSize ());
|
||||
free(map);
|
||||
|
||||
#if defined(XFree86Server) && defined(XINPUT)
|
||||
g_winMouseButtonMap = pDeviceInt->button->map;
|
||||
|
|
|
@ -628,6 +628,16 @@ winTopLevelWindowProc (HWND hwnd, UINT message,
|
|||
break;
|
||||
return winMouseButtonsHandle (s_pScreen, ButtonRelease, Button3, wParam);
|
||||
|
||||
case WM_XBUTTONDBLCLK:
|
||||
case WM_XBUTTONDOWN:
|
||||
if (s_pScreenPriv == NULL || s_pScreenInfo->fIgnoreInput)
|
||||
break;
|
||||
return winMouseButtonsHandle (s_pScreen, ButtonPress, HIWORD(wParam) + 5, wParam);
|
||||
case WM_XBUTTONUP:
|
||||
if (s_pScreenPriv == NULL || s_pScreenInfo->fIgnoreInput)
|
||||
break;
|
||||
return winMouseButtonsHandle (s_pScreen, ButtonRelease, HIWORD(wParam) + 5, wParam);
|
||||
|
||||
case WM_MOUSEWHEEL:
|
||||
#if CYGMULTIWINDOW_DEBUG
|
||||
ErrorF ("winTopLevelWindowProc - WM_MOUSEWHEEL\n");
|
||||
|
|
|
@ -652,6 +652,18 @@ winMWExtWMWindowProc (HWND hwnd, UINT message,
|
|||
ReleaseCapture ();
|
||||
return winMouseButtonsHandle (pScreen, ButtonRelease, Button3, wParam);
|
||||
|
||||
case WM_XBUTTONDBLCLK:
|
||||
case WM_XBUTTONDOWN:
|
||||
if (pScreenPriv == NULL || pScreenInfo->fIgnoreInput)
|
||||
break;
|
||||
SetCapture (hwnd);
|
||||
return winMouseButtonsHandle (pScreen, ButtonPress, HIWORD(wParam) + 5, wParam);
|
||||
case WM_XBUTTONUP:
|
||||
if (pScreenPriv == NULL || pScreenInfo->fIgnoreInput)
|
||||
break;
|
||||
ReleaseCapture ();
|
||||
return winMouseButtonsHandle (pScreen, ButtonRelease, HIWORD(wParam) + 5, wParam);
|
||||
|
||||
case WM_MOUSEWHEEL:
|
||||
#if CYGMULTIWINDOW_DEBUG
|
||||
winDebug ("winMWExtWMWindowProc - WM_MOUSEWHEEL\n");
|
||||
|
|
|
@ -873,6 +873,28 @@ winWindowProc (HWND hwnd, UINT message,
|
|||
ReleaseCapture ();
|
||||
return winMouseButtonsHandle (s_pScreen, ButtonRelease, Button3, wParam);
|
||||
|
||||
case WM_XBUTTONDBLCLK:
|
||||
case WM_XBUTTONDOWN:
|
||||
if (s_pScreenPriv == NULL || s_pScreenInfo->fIgnoreInput)
|
||||
break;
|
||||
if (s_pScreenInfo->fRootless
|
||||
#ifdef XWIN_MULTIWINDOWEXTWM
|
||||
|| s_pScreenInfo->fMWExtWM
|
||||
#endif
|
||||
)
|
||||
SetCapture (hwnd);
|
||||
return winMouseButtonsHandle (s_pScreen, ButtonPress, HIWORD(wParam) + 5, wParam);
|
||||
case WM_XBUTTONUP:
|
||||
if (s_pScreenPriv == NULL || s_pScreenInfo->fIgnoreInput)
|
||||
break;
|
||||
if (s_pScreenInfo->fRootless
|
||||
#ifdef XWIN_MULTIWINDOWEXTWM
|
||||
|| s_pScreenInfo->fMWExtWM
|
||||
#endif
|
||||
)
|
||||
ReleaseCapture ();
|
||||
return winMouseButtonsHandle (s_pScreen, ButtonRelease, HIWORD(wParam) + 5, wParam);
|
||||
|
||||
case WM_TIMER:
|
||||
if (s_pScreenPriv == NULL || s_pScreenInfo->fIgnoreInput)
|
||||
break;
|
||||
|
|
Loading…
Reference in New Issue
Block a user