- Stopped sending double the number of wheel events as appropriate to the
console under Linux. - Added middle mouse button selection pasting for X systems. SVN r1420 (trunk)
This commit is contained in:
parent
e55a97a18e
commit
035edb32ad
8 changed files with 110 additions and 77 deletions
|
|
@ -285,14 +285,17 @@ static void WheelMoved(event_t *event)
|
|||
{
|
||||
if (GUICapture)
|
||||
{
|
||||
SDLMod mod = SDL_GetModState();
|
||||
event->type = EV_GUI_Event;
|
||||
event->subtype = event->data1 == KEY_MWHEELUP ? EV_GUI_WheelUp : EV_GUI_WheelDown;
|
||||
event->data1 = 0;
|
||||
event->data3 = ((mod & KMOD_SHIFT) ? GKM_SHIFT : 0) |
|
||||
((mod & KMOD_CTRL) ? GKM_CTRL : 0) |
|
||||
((mod & KMOD_ALT) ? GKM_ALT : 0);
|
||||
D_PostEvent(event);
|
||||
if (event->type != EV_KeyUp)
|
||||
{
|
||||
SDLMod mod = SDL_GetModState();
|
||||
event->type = EV_GUI_Event;
|
||||
event->subtype = event->data1 == KEY_MWHEELUP ? EV_GUI_WheelUp : EV_GUI_WheelDown;
|
||||
event->data1 = 0;
|
||||
event->data3 = ((mod & KMOD_SHIFT) ? GKM_SHIFT : 0) |
|
||||
((mod & KMOD_CTRL) ? GKM_CTRL : 0) |
|
||||
((mod & KMOD_ALT) ? GKM_ALT : 0);
|
||||
D_PostEvent(event);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -376,41 +379,51 @@ void MessagePump (const SDL_Event &sev)
|
|||
|
||||
case SDL_MOUSEBUTTONDOWN:
|
||||
case SDL_MOUSEBUTTONUP:
|
||||
event.type = sev.type == SDL_MOUSEBUTTONDOWN ? EV_KeyDown : EV_KeyUp;
|
||||
/* These button mappings work with my Gentoo system using the
|
||||
* evdev driver and a Logitech MX510 mouse. Whether or not they
|
||||
* carry over to other Linux systems, I have no idea, but I sure
|
||||
* hope so. (Though buttons 11 and 12 are kind of useless, since
|
||||
* they also trigger buttons 4 and 5.)
|
||||
*/
|
||||
switch (sev.button.button)
|
||||
if (!GUICapture || sev.button.button == 4 || sev.button.button == 5)
|
||||
{
|
||||
case 1: event.data1 = KEY_MOUSE1; break;
|
||||
case 2: event.data1 = KEY_MOUSE3; break;
|
||||
case 3: event.data1 = KEY_MOUSE2; break;
|
||||
case 4: event.data1 = KEY_MWHEELUP; break;
|
||||
case 5: event.data1 = KEY_MWHEELDOWN; break;
|
||||
case 6: event.data1 = KEY_MOUSE4; break; /* dunno; not generated by my mouse */
|
||||
case 7: event.data1 = KEY_MOUSE5; break; /* ditto */
|
||||
case 8: event.data1 = KEY_MOUSE4; break;
|
||||
case 9: event.data1 = KEY_MOUSE5; break;
|
||||
case 10: event.data1 = KEY_MOUSE6; break;
|
||||
case 11: event.data1 = KEY_MOUSE7; break;
|
||||
case 12: event.data1 = KEY_MOUSE8; break;
|
||||
default: printf("SDL mouse button %s %d\n",
|
||||
sev.type == SDL_MOUSEBUTTONDOWN ? "down" : "up", sev.button.button); break;
|
||||
event.type = sev.type == SDL_MOUSEBUTTONDOWN ? EV_KeyDown : EV_KeyUp;
|
||||
/* These button mappings work with my Gentoo system using the
|
||||
* evdev driver and a Logitech MX510 mouse. Whether or not they
|
||||
* carry over to other Linux systems, I have no idea, but I sure
|
||||
* hope so. (Though buttons 11 and 12 are kind of useless, since
|
||||
* they also trigger buttons 4 and 5.)
|
||||
*/
|
||||
switch (sev.button.button)
|
||||
{
|
||||
case 1: event.data1 = KEY_MOUSE1; break;
|
||||
case 2: event.data1 = KEY_MOUSE3; break;
|
||||
case 3: event.data1 = KEY_MOUSE2; break;
|
||||
case 4: event.data1 = KEY_MWHEELUP; break;
|
||||
case 5: event.data1 = KEY_MWHEELDOWN; break;
|
||||
case 6: event.data1 = KEY_MOUSE4; break; /* dunno; not generated by my mouse */
|
||||
case 7: event.data1 = KEY_MOUSE5; break; /* ditto */
|
||||
case 8: event.data1 = KEY_MOUSE4; break;
|
||||
case 9: event.data1 = KEY_MOUSE5; break;
|
||||
case 10: event.data1 = KEY_MOUSE6; break;
|
||||
case 11: event.data1 = KEY_MOUSE7; break;
|
||||
case 12: event.data1 = KEY_MOUSE8; break;
|
||||
default: printf("SDL mouse button %s %d\n",
|
||||
sev.type == SDL_MOUSEBUTTONDOWN ? "down" : "up", sev.button.button); break;
|
||||
}
|
||||
if (event.data1 != 0)
|
||||
{
|
||||
//DIKState[ActiveDIKState][event.data1] = (event.type == EV_KeyDown);
|
||||
if (event.data1 == KEY_MWHEELUP || event.data1 == KEY_MWHEELDOWN)
|
||||
{
|
||||
WheelMoved(&event);
|
||||
}
|
||||
else
|
||||
{
|
||||
D_PostEvent(&event);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (event.data1 != 0)
|
||||
else if (sev.button.button >= 1 && sev.button.button <= 3)
|
||||
{
|
||||
//DIKState[ActiveDIKState][event.data1] = (event.type == EV_KeyDown);
|
||||
if (event.data1 == KEY_MWHEELUP || event.data1 == KEY_MWHEELDOWN)
|
||||
{
|
||||
WheelMoved(&event);
|
||||
}
|
||||
else
|
||||
{
|
||||
D_PostEvent(&event);
|
||||
}
|
||||
event.type = EV_GUI_Event;
|
||||
event.subtype = sev.type == SDL_MOUSEBUTTONDOWN ? EV_GUI_LButtonDown : EV_GUI_LButtonUp;
|
||||
event.subtype += (sev.button.button - 1) * 3;
|
||||
D_PostEvent(&event);
|
||||
}
|
||||
break;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue