Skip to content

Commit dd49a57

Browse files
committed
X11: Fixed send modifier keys when no other keys are pressed.
1 parent 72f9b8b commit dd49a57

File tree

2 files changed

+12
-2
lines changed

2 files changed

+12
-2
lines changed

examples/common/entry/entry_x11.cpp

+9
Original file line numberDiff line numberDiff line change
@@ -422,6 +422,8 @@ namespace entry
422422
bool joystick = s_joystick.update(m_eventQueue);
423423
bool xpending = XPending(m_display);
424424

425+
uint8_t oldModifers = m_modifiers;
426+
425427
if (!xpending)
426428
{
427429
bx::sleep(joystick ? 8 : 16);
@@ -500,6 +502,7 @@ namespace entry
500502
{
501503
XKeyEvent& xkey = event.xkey;
502504
KeySym keysym = XLookupKeysym(&xkey, 0);
505+
503506
switch (keysym)
504507
{
505508
case XK_Meta_L: setModifier(Modifier::LeftMeta, KeyPress == event.type); break;
@@ -538,6 +541,7 @@ namespace entry
538541
if (Key::None != key)
539542
{
540543
m_eventQueue.postKeyEvent(handle, key, m_modifiers, KeyPress == event.type);
544+
oldModifers = m_modifiers;
541545
}
542546
}
543547
break;
@@ -556,6 +560,11 @@ namespace entry
556560
}
557561
break;
558562
}
563+
564+
if (oldModifers != m_modifiers)
565+
{
566+
m_eventQueue.postKeyEvent({ UINT16_MAX }, Key::None, m_modifiers, true);
567+
}
559568
}
560569
}
561570

examples/common/imgui/imgui.cpp

+3-2
Original file line numberDiff line numberDiff line change
@@ -471,12 +471,13 @@ struct OcornutImguiContext
471471
m_lastScroll = _scroll;
472472

473473
#if USE_ENTRY
474-
uint8_t modifiers = inputGetModifiersState();
474+
const uint8_t modifiers = inputGetModifiersState();
475475
io.AddKeyEvent(ImGuiMod_Shift, 0 != (modifiers & (entry::Modifier::LeftShift | entry::Modifier::RightShift) ) );
476476
io.AddKeyEvent(ImGuiMod_Ctrl, 0 != (modifiers & (entry::Modifier::LeftCtrl | entry::Modifier::RightCtrl ) ) );
477477
io.AddKeyEvent(ImGuiMod_Alt, 0 != (modifiers & (entry::Modifier::LeftAlt | entry::Modifier::RightAlt ) ) );
478478
io.AddKeyEvent(ImGuiMod_Super, 0 != (modifiers & (entry::Modifier::LeftMeta | entry::Modifier::RightMeta ) ) );
479-
for (int32_t ii = 0; ii < (int32_t)entry::Key::Count; ++ii)
479+
480+
for (int32_t ii = 0; ii < int32_t(entry::Key::Count); ++ii)
480481
{
481482
io.AddKeyEvent(m_keyMap[ii], inputGetKeyState(entry::Key::Enum(ii) ) );
482483
io.SetKeyEventNativeData(m_keyMap[ii], 0, 0, ii);

0 commit comments

Comments
 (0)