Skip to content

Commit c5909bc

Browse files
committed
Add Workaround on linux fix right alt key
1 parent 2d24645 commit c5909bc

File tree

1 file changed

+19
-3
lines changed

1 file changed

+19
-3
lines changed

src/xtd.forms.native.wxwidgets/include/xtd/forms/native/wxwidgets/control_wrapper.hpp

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@
88
#if defined(__WXOSX__)
99
#include <Carbon/Carbon.h>
1010
#endif
11+
#if defined(__WXGTK__)
12+
#include <gdk/gdkkeysyms.h>
13+
#endif
1114

1215
namespace xtd::forms::native {
1316
template<typename control_t>
@@ -571,7 +574,15 @@ namespace xtd::forms::native {
571574

572575
template<typename control_t>
573576
inline void control_wrapper<control_t>::wx_evt_key_down(wxEvent& event) {
574-
#if defined(__WXOSX__)
577+
#if defined (__WXMSW__)
578+
if (static_cast<wxKeyEvent&>(event).GetKeyCode() == WXK_WINDOWS_LEFT || static_cast<wxKeyEvent&>(event).GetKeyCode() == WXK_WINDOWS_RIGHT) return;
579+
#elif defined(__WXGTK__)
580+
if (static_cast<wxKeyEvent&>(event).GetKeyCode() == WXK_NONE && static_cast<wxKeyEvent&>(event).GetRawKeyCode() == GDK_KEY_ISO_Level3_Shift) {
581+
static_cast<wxKeyEvent&>(event).m_keyCode = WXK_ALT;
582+
event_handler_->send_message(reinterpret_cast<intptr>(event_handler_), WM_KEYDOWN, convert_to_virtual_key(static_cast<wxKeyEvent&>(event)), 0, reinterpret_cast<intptr>(&event));
583+
return;
584+
}
585+
#elif defined(__WXOSX__)
575586
static auto functionKeyModifierIsDown = false;
576587
if (static_cast<wxKeyEvent&>(event).GetKeyCode() != WXK_NONE || static_cast<wxKeyEvent&>(event).GetRawKeyCode() != kVK_Function) functionKeyModifierIsDown = false;
577588
else {
@@ -582,14 +593,19 @@ namespace xtd::forms::native {
582593
return;
583594
}
584595
}
585-
#elif defined (__WXMSW__)
586-
if (static_cast<wxKeyEvent&>(event).GetKeyCode() == WXK_WINDOWS_LEFT || static_cast<wxKeyEvent&>(event).GetKeyCode() == WXK_WINDOWS_RIGHT) return;
587596
#endif
588597
event_handler_->send_message(reinterpret_cast<intptr>(event_handler_), WM_KEYDOWN, convert_to_virtual_key(static_cast<wxKeyEvent&>(event)), 0, reinterpret_cast<intptr>(&event));
589598
}
590599

591600
template<typename control_t>
592601
inline void control_wrapper<control_t>::wx_evt_key_up(wxEvent& event) {
602+
#if defined(__WXGTK__)
603+
if (static_cast<wxKeyEvent&>(event).GetKeyCode() == WXK_NONE && static_cast<wxKeyEvent&>(event).GetRawKeyCode() == GDK_KEY_ISO_Level3_Shift) {
604+
static_cast<wxKeyEvent&>(event).m_keyCode = WXK_ALT;
605+
event_handler_->send_message(reinterpret_cast<intptr>(event_handler_), WM_KEYUP, convert_to_virtual_key(static_cast<wxKeyEvent&>(event)), 0, reinterpret_cast<intptr>(&event));
606+
return;
607+
}
608+
#endif
593609
event.Skip(!event_handler_->send_message(reinterpret_cast<intptr>(event_handler_), WM_KEYUP, convert_to_virtual_key(static_cast<wxKeyEvent&>(event)), 0, reinterpret_cast<intptr>(&event)));
594610
}
595611

0 commit comments

Comments
 (0)