diff options
| author | Andre Weissflog <floooh@gmail.com> | 2021-04-12 20:22:18 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-04-12 20:22:18 +0200 |
| commit | 2f97685e88749937ee8bace99979a1bb366f95e0 (patch) | |
| tree | ebf54dcfa907a2b8fdd0344adde88472aad843c0 | |
| parent | b6c5ff54156038fc4896270e023c6e9acedfa99b (diff) | |
sokol_app.h: add mouse button modifiers (#511)
| -rw-r--r-- | sokol_app.h | 206 |
1 files changed, 126 insertions, 80 deletions
diff --git a/sokol_app.h b/sokol_app.h index 4e8dccb8..48520cc6 100644 --- a/sokol_app.h +++ b/sokol_app.h @@ -1219,14 +1219,23 @@ typedef enum sapp_mousebutton { } sapp_mousebutton; /* - These are currently pressed modifier keys which are passed in the - struct field sapp_event.modifiers. + These are currently pressed modifier keys (and mouse buttons) which are + passed in the event struct field sapp_event.modifiers. + + NOTE: do not depend on the presence or absence of a modifier flag in + "their own" KEY_UP/DOWN and MOUSE_UP/DOWN events! For instance in the + X11 backend, SAPP_MODIFIER_CTRL will not be set in the KEY_DOWN event + of the Ctrl key, instead the KEY_UP event of the Ctrl-key will have + the SAPP_MODIFIER_CTRL bit set. Same for mouse buttons. */ enum { - SAPP_MODIFIER_SHIFT = 0x1, - SAPP_MODIFIER_CTRL = 0x2, - SAPP_MODIFIER_ALT = 0x4, - SAPP_MODIFIER_SUPER = 0x8 + SAPP_MODIFIER_SHIFT = 0x1, // left or right shift key + SAPP_MODIFIER_CTRL = 0x2, // left or right control key + SAPP_MODIFIER_ALT = 0x4, // left or right alt key + SAPP_MODIFIER_SUPER = 0x8, // left or right 'super' key + SAPP_MODIFIER_LMB = 0x100, // left mouse button + SAPP_MODIFIER_RMB = 0x200, // right mouse button + SAPP_MODIFIER_MMB = 0x400, // middle mouse button }; /* @@ -1866,6 +1875,7 @@ typedef struct { bool wants_show_keyboard; bool wants_hide_keyboard; bool mouse_lock_requested; + uint16_t mouse_buttons; #if defined(SOKOL_WGPU) _sapp_wgpu_t wgpu; #endif @@ -2836,7 +2846,9 @@ int main(int argc, char* argv[]) { } #endif /* SOKOL_NO_ENTRY */ -_SOKOL_PRIVATE uint32_t _sapp_macos_mod(NSEventModifierFlags f) { +_SOKOL_PRIVATE uint32_t _sapp_macos_mods(NSEvent* ev) { + const NSEventModifierFlags f = ev.modifierFlags; + const NSUInteger b = NSEvent.pressedMouseButtons; uint32_t m = 0; if (f & NSEventModifierFlagShift) { m |= SAPP_MODIFIER_SHIFT; @@ -2850,6 +2862,15 @@ _SOKOL_PRIVATE uint32_t _sapp_macos_mod(NSEventModifierFlags f) { if (f & NSEventModifierFlagCommand) { m |= SAPP_MODIFIER_SUPER; } + if (0 != (b & (1<<0))) { + m |= SAPP_MODIFIER_LMB; + } + if (0 != (b & (1<<1))) { + m |= SAPP_MODIFIER_RMB; + } + if (0 != (b & (1<<2))) { + m |= SAPP_MODIFIER_MMB; + } return m; } @@ -3387,46 +3408,46 @@ _SOKOL_PRIVATE void _sapp_macos_poll_input_events() { on Windows while SetCapture is active */ if (0 == _sapp.macos.mouse_buttons) { - _sapp_macos_mouse_event(SAPP_EVENTTYPE_MOUSE_ENTER, SAPP_MOUSEBUTTON_INVALID, _sapp_macos_mod(event.modifierFlags)); + _sapp_macos_mouse_event(SAPP_EVENTTYPE_MOUSE_ENTER, SAPP_MOUSEBUTTON_INVALID, _sapp_macos_mods(event)); } } - (void)mouseExited:(NSEvent*)event { _sapp_macos_update_mouse(event); if (0 == _sapp.macos.mouse_buttons) { - _sapp_macos_mouse_event(SAPP_EVENTTYPE_MOUSE_LEAVE, SAPP_MOUSEBUTTON_INVALID, _sapp_macos_mod(event.modifierFlags)); + _sapp_macos_mouse_event(SAPP_EVENTTYPE_MOUSE_LEAVE, SAPP_MOUSEBUTTON_INVALID, _sapp_macos_mods(event)); } } - (void)mouseDown:(NSEvent*)event { _sapp_macos_update_mouse(event); - _sapp_macos_mouse_event(SAPP_EVENTTYPE_MOUSE_DOWN, SAPP_MOUSEBUTTON_LEFT, _sapp_macos_mod(event.modifierFlags)); + _sapp_macos_mouse_event(SAPP_EVENTTYPE_MOUSE_DOWN, SAPP_MOUSEBUTTON_LEFT, _sapp_macos_mods(event)); _sapp.macos.mouse_buttons |= (1<<SAPP_MOUSEBUTTON_LEFT); } - (void)mouseUp:(NSEvent*)event { _sapp_macos_update_mouse(event); - _sapp_macos_mouse_event(SAPP_EVENTTYPE_MOUSE_UP, SAPP_MOUSEBUTTON_LEFT, _sapp_macos_mod(event.modifierFlags)); + _sapp_macos_mouse_event(SAPP_EVENTTYPE_MOUSE_UP, SAPP_MOUSEBUTTON_LEFT, _sapp_macos_mods(event)); _sapp.macos.mouse_buttons &= ~(1<<SAPP_MOUSEBUTTON_LEFT); } - (void)rightMouseDown:(NSEvent*)event { _sapp_macos_update_mouse(event); - _sapp_macos_mouse_event(SAPP_EVENTTYPE_MOUSE_DOWN, SAPP_MOUSEBUTTON_RIGHT, _sapp_macos_mod(event.modifierFlags)); + _sapp_macos_mouse_event(SAPP_EVENTTYPE_MOUSE_DOWN, SAPP_MOUSEBUTTON_RIGHT, _sapp_macos_mods(event)); _sapp.macos.mouse_buttons |= (1<<SAPP_MOUSEBUTTON_RIGHT); } - (void)rightMouseUp:(NSEvent*)event { _sapp_macos_update_mouse(event); - _sapp_macos_mouse_event(SAPP_EVENTTYPE_MOUSE_UP, SAPP_MOUSEBUTTON_RIGHT, _sapp_macos_mod(event.modifierFlags)); + _sapp_macos_mouse_event(SAPP_EVENTTYPE_MOUSE_UP, SAPP_MOUSEBUTTON_RIGHT, _sapp_macos_mods(event)); _sapp.macos.mouse_buttons &= ~(1<<SAPP_MOUSEBUTTON_RIGHT); } - (void)otherMouseDown:(NSEvent*)event { _sapp_macos_update_mouse(event); if (2 == event.buttonNumber) { - _sapp_macos_mouse_event(SAPP_EVENTTYPE_MOUSE_DOWN, SAPP_MOUSEBUTTON_MIDDLE, _sapp_macos_mod(event.modifierFlags)); + _sapp_macos_mouse_event(SAPP_EVENTTYPE_MOUSE_DOWN, SAPP_MOUSEBUTTON_MIDDLE, _sapp_macos_mods(event)); _sapp.macos.mouse_buttons |= (1<<SAPP_MOUSEBUTTON_MIDDLE); } } - (void)otherMouseUp:(NSEvent*)event { _sapp_macos_update_mouse(event); if (2 == event.buttonNumber) { - _sapp_macos_mouse_event(SAPP_EVENTTYPE_MOUSE_UP, SAPP_MOUSEBUTTON_MIDDLE, _sapp_macos_mod(event.modifierFlags)); + _sapp_macos_mouse_event(SAPP_EVENTTYPE_MOUSE_UP, SAPP_MOUSEBUTTON_MIDDLE, _sapp_macos_mods(event)); _sapp.macos.mouse_buttons &= (1<<SAPP_MOUSEBUTTON_MIDDLE); } } @@ -3437,7 +3458,7 @@ _SOKOL_PRIVATE void _sapp_macos_poll_input_events() { _sapp.mouse.dx = [event deltaX]; _sapp.mouse.dy = [event deltaY]; } - _sapp_macos_mouse_event(SAPP_EVENTTYPE_MOUSE_MOVE, SAPP_MOUSEBUTTON_MIDDLE, _sapp_macos_mod(event.modifierFlags)); + _sapp_macos_mouse_event(SAPP_EVENTTYPE_MOUSE_MOVE, SAPP_MOUSEBUTTON_INVALID, _sapp_macos_mods(event)); } } - (void)mouseMoved:(NSEvent*)event { @@ -3446,7 +3467,7 @@ _SOKOL_PRIVATE void _sapp_macos_poll_input_events() { _sapp.mouse.dx = [event deltaX]; _sapp.mouse.dy = [event deltaY]; } - _sapp_macos_mouse_event(SAPP_EVENTTYPE_MOUSE_MOVE, SAPP_MOUSEBUTTON_INVALID , _sapp_macos_mod(event.modifierFlags)); + _sapp_macos_mouse_event(SAPP_EVENTTYPE_MOUSE_MOVE, SAPP_MOUSEBUTTON_INVALID , _sapp_macos_mods(event)); } - (void)mouseDragged:(NSEvent*)event { _sapp_macos_update_mouse(event); @@ -3454,7 +3475,7 @@ _SOKOL_PRIVATE void _sapp_macos_poll_input_events() { _sapp.mouse.dx = [event deltaX]; _sapp.mouse.dy = [event deltaY]; } - _sapp_macos_mouse_event(SAPP_EVENTTYPE_MOUSE_MOVE, SAPP_MOUSEBUTTON_INVALID , _sapp_macos_mod(event.modifierFlags)); + _sapp_macos_mouse_event(SAPP_EVENTTYPE_MOUSE_MOVE, SAPP_MOUSEBUTTON_INVALID , _sapp_macos_mods(event)); } - (void)rightMouseDragged:(NSEvent*)event { _sapp_macos_update_mouse(event); @@ -3462,7 +3483,7 @@ _SOKOL_PRIVATE void _sapp_macos_poll_input_events() { _sapp.mouse.dx = [event deltaX]; _sapp.mouse.dy = [event deltaY]; } - _sapp_macos_mouse_event(SAPP_EVENTTYPE_MOUSE_MOVE, SAPP_MOUSEBUTTON_INVALID, _sapp_macos_mod(event.modifierFlags)); + _sapp_macos_mouse_event(SAPP_EVENTTYPE_MOUSE_MOVE, SAPP_MOUSEBUTTON_INVALID, _sapp_macos_mods(event)); } - (void)scrollWheel:(NSEvent*)event { _sapp_macos_update_mouse(event); @@ -3475,7 +3496,7 @@ _SOKOL_PRIVATE void _sapp_macos_poll_input_events() { } if ((_sapp_absf(dx) > 0.0f) || (_sapp_absf(dy) > 0.0f)) { _sapp_init_event(SAPP_EVENTTYPE_MOUSE_SCROLL); - _sapp.event.modifiers = _sapp_macos_mod(event.modifierFlags); + _sapp.event.modifiers = _sapp_macos_mods(event); _sapp.event.scroll_x = dx; _sapp.event.scroll_y = dy; _sapp_call_event(&_sapp.event); @@ -3484,7 +3505,7 @@ _SOKOL_PRIVATE void _sapp_macos_poll_input_events() { } - (void)keyDown:(NSEvent*)event { if (_sapp_events_enabled()) { - const uint32_t mods = _sapp_macos_mod(event.modifierFlags); + const uint32_t mods = _sapp_macos_mods(event); /* NOTE: macOS doesn't send keyUp events while the Cmd key is pressed, as a workaround, to prevent key presses from sticking we'll send a keyup event following right after the keydown if SUPER is also pressed @@ -3520,7 +3541,7 @@ _SOKOL_PRIVATE void _sapp_macos_poll_input_events() { _sapp_macos_key_event(SAPP_EVENTTYPE_KEY_UP, _sapp_translate_key(event.keyCode), event.isARepeat, - _sapp_macos_mod(event.modifierFlags)); + _sapp_macos_mods(event)); } - (void)flagsChanged:(NSEvent*)event { const uint32_t old_f = _sapp.macos.flags_changed_store; @@ -3548,7 +3569,7 @@ _SOKOL_PRIVATE void _sapp_macos_poll_input_events() { _sapp_macos_key_event(down ? SAPP_EVENTTYPE_KEY_DOWN : SAPP_EVENTTYPE_KEY_UP, key_code, false, - _sapp_macos_mod(event.modifierFlags)); + _sapp_macos_mods(event)); } } - (void)cursorUpdate:(NSEvent*)event { @@ -4272,6 +4293,44 @@ _SOKOL_PRIVATE void _sapp_emsc_wgpu_surfaces_create(void); _SOKOL_PRIVATE void _sapp_emsc_wgpu_surfaces_discard(void); #endif +_SOKOL_PRIVATE uint32_t _sapp_emsc_mouse_button_mods(uint16_t buttons) { + uint32_t m = 0; + if (0 != (buttons & (1<<0))) { m |= SAPP_MODIFIER_LMB; } + if (0 != (buttons & (1<<1))) { m |= SAPP_MODIFIER_RMB; } // not a bug + if (0 != (buttons & (1<<2))) { m |= SAPP_MODIFIER_MMB; } // not a bug + return m; +} + +_SOKOL_PRIVATE uint32_t _sapp_emsc_mouse_event_mods(const EmscriptenMouseEvent* ev) { + uint32_t m = 0; + if (ev->ctrlKey) { m |= SAPP_MODIFIER_CTRL; } + if (ev->shiftKey) { m |= SAPP_MODIFIER_SHIFT; } + if (ev->altKey) { m |= SAPP_MODIFIER_ALT; } + if (ev->metaKey) { m |= SAPP_MODIFIER_SUPER; } + m |= _sapp_emsc_mouse_button_mods(_sapp.emsc.mouse_buttons); + return m; +} + +_SOKOL_PRIVATE uint32_t _sapp_emsc_key_event_mods(const EmscriptenKeyboardEvent* ev) { + uint32_t m = 0; + if (ev->ctrlKey) { m |= SAPP_MODIFIER_CTRL; } + if (ev->shiftKey) { m |= SAPP_MODIFIER_SHIFT; } + if (ev->altKey) { m |= SAPP_MODIFIER_ALT; } + if (ev->metaKey) { m |= SAPP_MODIFIER_SUPER; } + m |= _sapp_emsc_mouse_button_mods(_sapp.emsc.mouse_buttons); + return m; +} + +_SOKOL_PRIVATE uint32_t _sapp_emsc_touch_event_mods(const EmscriptenTouchEvent* ev) { + uint32_t m = 0; + if (ev->ctrlKey) { m |= SAPP_MODIFIER_CTRL; } + if (ev->shiftKey) { m |= SAPP_MODIFIER_SHIFT; } + if (ev->altKey) { m |= SAPP_MODIFIER_ALT; } + if (ev->metaKey) { m |= SAPP_MODIFIER_SUPER; } + m |= _sapp_emsc_mouse_button_mods(_sapp.emsc.mouse_buttons); + return m; +} + _SOKOL_PRIVATE EM_BOOL _sapp_emsc_size_changed(int event_type, const EmscriptenUiEvent* ui_event, void* user_data) { _SOKOL_UNUSED(event_type); _SOKOL_UNUSED(user_data); @@ -4330,6 +4389,7 @@ _SOKOL_PRIVATE EM_BOOL _sapp_emsc_size_changed(int event_type, const EmscriptenU _SOKOL_PRIVATE EM_BOOL _sapp_emsc_mouse_cb(int emsc_type, const EmscriptenMouseEvent* emsc_event, void* user_data) { _SOKOL_UNUSED(user_data); + _sapp.emsc.mouse_buttons = emsc_event->buttons; if (_sapp.mouse.locked) { _sapp.mouse.dx = (float) emsc_event->movementX; _sapp.mouse.dy = (float) emsc_event->movementY; @@ -4372,18 +4432,7 @@ _SOKOL_PRIVATE EM_BOOL _sapp_emsc_mouse_cb(int emsc_type, const EmscriptenMouseE } if (type != SAPP_EVENTTYPE_INVALID) { _sapp_init_event(type); - if (emsc_event->ctrlKey) { - _sapp.event.modifiers |= SAPP_MODIFIER_CTRL; - } - if (emsc_event->shiftKey) { - _sapp.event.modifiers |= SAPP_MODIFIER_SHIFT; - } - if (emsc_event->altKey) { - _sapp.event.modifiers |= SAPP_MODIFIER_ALT; - } - if (emsc_event->metaKey) { - _sapp.event.modifiers |= SAPP_MODIFIER_SUPER; - } + _sapp.event.modifiers = _sapp_emsc_mouse_event_mods(emsc_event); if (is_button_event) { switch (emsc_event->button) { case 0: _sapp.event.mouse_button = SAPP_MOUSEBUTTON_LEFT; break; @@ -4409,20 +4458,10 @@ _SOKOL_PRIVATE EM_BOOL _sapp_emsc_mouse_cb(int emsc_type, const EmscriptenMouseE _SOKOL_PRIVATE EM_BOOL _sapp_emsc_wheel_cb(int emsc_type, const EmscriptenWheelEvent* emsc_event, void* user_data) { _SOKOL_UNUSED(emsc_type); _SOKOL_UNUSED(user_data); + _sapp.emsc.mouse_buttons = emsc_event->mouse.buttons; if (_sapp_events_enabled()) { _sapp_init_event(SAPP_EVENTTYPE_MOUSE_SCROLL); - if (emsc_event->mouse.ctrlKey) { - _sapp.event.modifiers |= SAPP_MODIFIER_CTRL; - } - if (emsc_event->mouse.shiftKey) { - _sapp.event.modifiers |= SAPP_MODIFIER_SHIFT; - } - if (emsc_event->mouse.altKey) { - _sapp.event.modifiers |= SAPP_MODIFIER_ALT; - } - if (emsc_event->mouse.metaKey) { - _sapp.event.modifiers |= SAPP_MODIFIER_SUPER; - } + _sapp.event.modifiers = _sapp_emsc_mouse_event_mods(&emsc_event->mouse); /* see https://github.com/floooh/sokol/issues/339 */ float scale; switch (emsc_event->deltaMode) { @@ -4463,18 +4502,7 @@ _SOKOL_PRIVATE EM_BOOL _sapp_emsc_key_cb(int emsc_type, const EmscriptenKeyboard bool send_keyup_followup = false; _sapp_init_event(type); _sapp.event.key_repeat = emsc_event->repeat; - if (emsc_event->ctrlKey) { - _sapp.event.modifiers |= SAPP_MODIFIER_CTRL; - } - if (emsc_event->shiftKey) { - _sapp.event.modifiers |= SAPP_MODIFIER_SHIFT; - } - if (emsc_event->altKey) { - _sapp.event.modifiers |= SAPP_MODIFIER_ALT; - } - if (emsc_event->metaKey) { - _sapp.event.modifiers |= SAPP_MODIFIER_SUPER; - } + _sapp.event.modifiers = _sapp_emsc_key_event_mods(emsc_event); if (type == SAPP_EVENTTYPE_CHAR) { _sapp.event.char_code = emsc_event->charCode; /* workaround to make Cmd+V work on Safari */ @@ -4603,18 +4631,7 @@ _SOKOL_PRIVATE EM_BOOL _sapp_emsc_touch_cb(int emsc_type, const EmscriptenTouchE } if (type != SAPP_EVENTTYPE_INVALID) { _sapp_init_event(type); - if (emsc_event->ctrlKey) { - _sapp.event.modifiers |= SAPP_MODIFIER_CTRL; - } - if (emsc_event->shiftKey) { - _sapp.event.modifiers |= SAPP_MODIFIER_SHIFT; - } - if (emsc_event->altKey) { - _sapp.event.modifiers |= SAPP_MODIFIER_ALT; - } - if (emsc_event->metaKey) { - _sapp.event.modifiers |= SAPP_MODIFIER_SUPER; - } + _sapp.event.modifiers = _sapp_emsc_touch_event_mods(emsc_event); _sapp.event.num_touches = emsc_event->numTouches; if (_sapp.event.num_touches > SAPP_MAX_TOUCHPOINTS) { _sapp.event.num_touches = SAPP_MAX_TOUCHPOINTS; @@ -5925,6 +5942,16 @@ _SOKOL_PRIVATE uint32_t _sapp_win32_mods(void) { if ((GetKeyState(VK_LWIN) | GetKeyState(VK_RWIN)) & (1<<15)) { mods |= SAPP_MODIFIER_SUPER; } + const bool swapped = (TRUE == GetSystemMetrics(SM_SWAPBUTTON)); + if (GetAsyncKeyState(VK_LBUTTON)) { + mods |= swapped ? SAPP_MODIFIER_RMB : SAPP_MODIFIER_LMB; + } + if (GetAsyncKeyState(VK_RBUTTON)) { + mods |= swapped ? SAPP_MODIFIER_LMB : SAPP_MODIFIER_RMB; + } + if (GetAsyncKeyState(VK_MBUTTON)) { + mods |= SAPP_MODIFIER_MMB; + } return mods; } @@ -6703,6 +6730,15 @@ _SOKOL_PRIVATE uint32_t _sapp_uwp_mods(winrt::Windows::UI::Core::CoreWindow cons { mods |= SAPP_MODIFIER_SUPER; } + if (0 != (_sapp.uwp.mouse_buttons & (1<<SAPP_MOUSEBUTTON_LEFT))) { + mods |= SAPP_MODIFIER_LMB; + } + if (0 != (_sapp.uwp.mouse_buttons & (1<<SAPP_MOUSEBUTTON_MIDDLE))) { + mods |= SAPP_MODIFIER_MMB; + } + if (0 != (_sapp.uwp.mouse_buttons & (1<<SAPP_MOUSEBUTTON_RIGHT))) { + mods |= SAPP_MODIFIER_RMB; + } return mods; } @@ -9772,7 +9808,7 @@ _SOKOL_PRIVATE int _sapp_x11_get_window_state(void) { return result; } -_SOKOL_PRIVATE uint32_t _sapp_x11_mod(uint32_t x11_mods) { +_SOKOL_PRIVATE uint32_t _sapp_x11_mods(uint32_t x11_mods) { uint32_t mods = 0; if (x11_mods & ShiftMask) { mods |= SAPP_MODIFIER_SHIFT; @@ -9786,6 +9822,15 @@ _SOKOL_PRIVATE uint32_t _sapp_x11_mod(uint32_t x11_mods) { if (x11_mods & Mod4Mask) { mods |= SAPP_MODIFIER_SUPER; } + if (x11_mods & Button1Mask) { + mods |= SAPP_MODIFIER_LMB; + } + if (x11_mods & Button2Mask) { + mods |= SAPP_MODIFIER_MMB; + } + if (x11_mods & Button3Mask) { + mods |= SAPP_MODIFIER_RMB; + } return mods; } @@ -10126,7 +10171,7 @@ _SOKOL_PRIVATE void _sapp_x11_process_event(XEvent* event) { if (XIMaskIsSet(re->valuators.mask, 1)) { _sapp.mouse.dy = (float) *values; } - _sapp_x11_mouse_event(SAPP_EVENTTYPE_MOUSE_MOVE, SAPP_MOUSEBUTTON_INVALID, _sapp_x11_mod(event->xmotion.state)); + _sapp_x11_mouse_event(SAPP_EVENTTYPE_MOUSE_MOVE, SAPP_MOUSEBUTTON_INVALID, _sapp_x11_mods(event->xmotion.state)); } } XFreeEventData(_sapp.x11.display, &event->xcookie); @@ -10146,7 +10191,7 @@ _SOKOL_PRIVATE void _sapp_x11_process_event(XEvent* event) { const sapp_keycode key = _sapp_x11_translate_key(keycode); bool repeat = _sapp_x11_keycodes[keycode & 0xFF]; _sapp_x11_keycodes[keycode & 0xFF] = true; - const uint32_t mods = _sapp_x11_mod(event->xkey.state); + const uint32_t mods = _sapp_x11_mods(event->xkey.state); if (key != SAPP_KEYCODE_INVALID) { _sapp_x11_key_event(SAPP_EVENTTYPE_KEY_DOWN, key, repeat, mods); } @@ -10164,7 +10209,7 @@ _SOKOL_PRIVATE void _sapp_x11_process_event(XEvent* event) { const sapp_keycode key = _sapp_x11_translate_key(keycode); _sapp_x11_keycodes[keycode & 0xFF] = false; if (key != SAPP_KEYCODE_INVALID) { - const uint32_t mods = _sapp_x11_mod(event->xkey.state); + const uint32_t mods = _sapp_x11_mods(event->xkey.state); _sapp_x11_key_event(SAPP_EVENTTYPE_KEY_UP, key, false, mods); } } @@ -10172,7 +10217,7 @@ _SOKOL_PRIVATE void _sapp_x11_process_event(XEvent* event) { case ButtonPress: { const sapp_mousebutton btn = _sapp_x11_translate_button(event); - const uint32_t mods = _sapp_x11_mod(event->xbutton.state); + const uint32_t mods = _sapp_x11_mods(event->xbutton.state); if (btn != SAPP_MOUSEBUTTON_INVALID) { _sapp_x11_mouse_event(SAPP_EVENTTYPE_MOUSE_DOWN, btn, mods); _sapp.x11.mouse_buttons |= (1 << btn); @@ -10192,7 +10237,8 @@ _SOKOL_PRIVATE void _sapp_x11_process_event(XEvent* event) { { const sapp_mousebutton btn = _sapp_x11_translate_button(event); if (btn != SAPP_MOUSEBUTTON_INVALID) { - _sapp_x11_mouse_event(SAPP_EVENTTYPE_MOUSE_UP, btn, _sapp_x11_mod(event->xbutton.state)); + const uint32_t mods = _sapp_x11_mods(event->xbutton.state); + _sapp_x11_mouse_event(SAPP_EVENTTYPE_MOUSE_UP, btn, mods); _sapp.x11.mouse_buttons &= ~(1 << btn); } } @@ -10200,12 +10246,12 @@ _SOKOL_PRIVATE void _sapp_x11_process_event(XEvent* event) { case EnterNotify: /* don't send enter/leave events while mouse button held down */ if (0 == _sapp.x11.mouse_buttons) { - _sapp_x11_mouse_event(SAPP_EVENTTYPE_MOUSE_ENTER, SAPP_MOUSEBUTTON_INVALID, _sapp_x11_mod(event->xcrossing.state)); + _sapp_x11_mouse_event(SAPP_EVENTTYPE_MOUSE_ENTER, SAPP_MOUSEBUTTON_INVALID, _sapp_x11_mods(event->xcrossing.state)); } break; case LeaveNotify: if (0 == _sapp.x11.mouse_buttons) { - _sapp_x11_mouse_event(SAPP_EVENTTYPE_MOUSE_LEAVE, SAPP_MOUSEBUTTON_INVALID, _sapp_x11_mod(event->xcrossing.state)); + _sapp_x11_mouse_event(SAPP_EVENTTYPE_MOUSE_LEAVE, SAPP_MOUSEBUTTON_INVALID, _sapp_x11_mods(event->xcrossing.state)); } break; case MotionNotify: @@ -10219,7 +10265,7 @@ _SOKOL_PRIVATE void _sapp_x11_process_event(XEvent* event) { _sapp.mouse.x = new_x; _sapp.mouse.y = new_y; _sapp.mouse.pos_valid = true; - _sapp_x11_mouse_event(SAPP_EVENTTYPE_MOUSE_MOVE, SAPP_MOUSEBUTTON_INVALID, _sapp_x11_mod(event->xmotion.state)); + _sapp_x11_mouse_event(SAPP_EVENTTYPE_MOUSE_MOVE, SAPP_MOUSEBUTTON_INVALID, _sapp_x11_mods(event->xmotion.state)); } break; case ConfigureNotify: |