mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-15 14:54:09 +02:00
Fix AltGr triggering keyboard shortcuts.
This commit is contained in:
parent
46cc3d088b
commit
93cef5fe9b
5 changed files with 37 additions and 5 deletions
|
@ -82,6 +82,8 @@ namespace Beefy.widgets
|
||||||
F12 = 0x7B,
|
F12 = 0x7B,
|
||||||
Numlock = 0x90,
|
Numlock = 0x90,
|
||||||
Scroll = 0x91,
|
Scroll = 0x91,
|
||||||
|
RAlt = 0xA5,
|
||||||
|
RMenu = 0xA5,
|
||||||
Semicolon = 0xBA,
|
Semicolon = 0xBA,
|
||||||
Equals = 0xBB,
|
Equals = 0xBB,
|
||||||
Comma = 0xBC,
|
Comma = 0xBC,
|
||||||
|
|
|
@ -121,7 +121,7 @@ namespace Beefy.widgets
|
||||||
KeyFlags keyFlags = default;
|
KeyFlags keyFlags = default;
|
||||||
if (IsKeyDown(KeyCode.Shift))
|
if (IsKeyDown(KeyCode.Shift))
|
||||||
keyFlags |= KeyFlags.Shift;
|
keyFlags |= KeyFlags.Shift;
|
||||||
if (IsKeyDown(KeyCode.Control))
|
if ((IsKeyDown(KeyCode.Control)) && (!IsKeyDown(KeyCode.RAlt)))
|
||||||
keyFlags |= KeyFlags.Ctrl;
|
keyFlags |= KeyFlags.Ctrl;
|
||||||
if (IsKeyDown(KeyCode.Menu))
|
if (IsKeyDown(KeyCode.Menu))
|
||||||
keyFlags |= KeyFlags.Alt;
|
keyFlags |= KeyFlags.Alt;
|
||||||
|
|
|
@ -76,6 +76,22 @@ static BOOL ClipToMonitor(HMONITOR mon, HDC hdc, LPRECT monRect, LPARAM userArg)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static BOOL KeyboardLayoutHasAltGr(HKL layout)
|
||||||
|
{
|
||||||
|
BOOL hasAltGr = FALSE;
|
||||||
|
int scancode;
|
||||||
|
for (WORD i = 32; i < 256; ++i)
|
||||||
|
{
|
||||||
|
scancode = VkKeyScanEx((TCHAR)i, layout);
|
||||||
|
if ((scancode != -1) && ((scancode & 0x600) == 0x600))
|
||||||
|
{
|
||||||
|
hasAltGr = TRUE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return hasAltGr;
|
||||||
|
}
|
||||||
|
|
||||||
WinBFWindow::WinBFWindow(BFWindow* parent, const StringImpl& title, int x, int y, int width, int height, int windowFlags)
|
WinBFWindow::WinBFWindow(BFWindow* parent, const StringImpl& title, int x, int y, int width, int height, int windowFlags)
|
||||||
{
|
{
|
||||||
HINSTANCE hInstance = GetModuleHandle(NULL);
|
HINSTANCE hInstance = GetModuleHandle(NULL);
|
||||||
|
@ -281,6 +297,9 @@ WinBFWindow::WinBFWindow(BFWindow* parent, const StringImpl& title, int x, int y
|
||||||
BF_ASSERT(winParent->mHWnd);
|
BF_ASSERT(winParent->mHWnd);
|
||||||
parent->mChildren.push_back(this);
|
parent->mChildren.push_back(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HKL layout = GetKeyboardLayout(0);
|
||||||
|
mKeyLayoutHasAltGr = (KeyboardLayoutHasAltGr(layout) == TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
WinBFWindow::~WinBFWindow()
|
WinBFWindow::~WinBFWindow()
|
||||||
|
@ -880,6 +899,9 @@ LRESULT WinBFWindow::WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lPar
|
||||||
if (keyCode == VK_APPS)
|
if (keyCode == VK_APPS)
|
||||||
break; // This is handled in WM_CONTEXTMENU
|
break; // This is handled in WM_CONTEXTMENU
|
||||||
|
|
||||||
|
if ((mKeyLayoutHasAltGr) && (keyCode == VK_MENU) && ((lParam & 0x01000000) != 0))
|
||||||
|
keyCode = VK_RMENU;
|
||||||
|
|
||||||
mIsKeyDown[keyCode] = true;
|
mIsKeyDown[keyCode] = true;
|
||||||
|
|
||||||
for (auto kv : *menuIDMap)
|
for (auto kv : *menuIDMap)
|
||||||
|
@ -899,7 +921,7 @@ LRESULT WinBFWindow::WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lPar
|
||||||
|
|
||||||
if (!mIsMenuKeyHandled)
|
if (!mIsMenuKeyHandled)
|
||||||
{
|
{
|
||||||
if (mKeyDownFunc(this, (int) wParam, (lParam & 0x7FFF) != 0))
|
if (mKeyDownFunc(this, keyCode, (lParam & 0x7FFF) != 0))
|
||||||
{
|
{
|
||||||
mIsMenuKeyHandled = true;
|
mIsMenuKeyHandled = true;
|
||||||
doResult = true;
|
doResult = true;
|
||||||
|
@ -936,9 +958,11 @@ LRESULT WinBFWindow::WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lPar
|
||||||
case WM_KEYUP:
|
case WM_KEYUP:
|
||||||
{
|
{
|
||||||
int keyCode = (int) wParam;
|
int keyCode = (int) wParam;
|
||||||
|
if ((mKeyLayoutHasAltGr) && (keyCode == VK_MENU) && ((lParam & 0x01000000) != 0))
|
||||||
|
keyCode = VK_RMENU;
|
||||||
if (mIsKeyDown[keyCode])
|
if (mIsKeyDown[keyCode])
|
||||||
{
|
{
|
||||||
mKeyUpFunc(this, (int) wParam);
|
mKeyUpFunc(this, keyCode);
|
||||||
mIsKeyDown[keyCode] = false;
|
mIsKeyDown[keyCode] = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1023,6 +1047,10 @@ LRESULT WinBFWindow::WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lPar
|
||||||
if (gBFApp->mSysDialogCnt == 0)
|
if (gBFApp->mSysDialogCnt == 0)
|
||||||
gBFApp->Process();
|
gBFApp->Process();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case WM_INPUTLANGCHANGE:
|
||||||
|
mKeyLayoutHasAltGr = (KeyboardLayoutHasAltGr((HKL)lParam) == TRUE);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
app->mInMsgProc = false;
|
app->mInMsgProc = false;
|
||||||
|
|
|
@ -52,6 +52,7 @@ public:
|
||||||
bool mSoftHasFocus; // Mostly tracks mHasFocus except for when we get an explicit 'LostFocus' callback
|
bool mSoftHasFocus; // Mostly tracks mHasFocus except for when we get an explicit 'LostFocus' callback
|
||||||
|
|
||||||
bool mNeedsStateReset;
|
bool mNeedsStateReset;
|
||||||
|
bool mKeyLayoutHasAltGr;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
virtual LRESULT WindowProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
|
virtual LRESULT WindowProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
|
||||||
|
|
|
@ -44,7 +44,8 @@ namespace IDE.ui
|
||||||
{
|
{
|
||||||
if ((evt.mKeyCode == .Control) ||
|
if ((evt.mKeyCode == .Control) ||
|
||||||
(evt.mKeyCode == .Shift) ||
|
(evt.mKeyCode == .Shift) ||
|
||||||
(evt.mKeyCode == .Alt))
|
(evt.mKeyCode == .Alt) ||
|
||||||
|
(evt.mKeyCode == .RAlt))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if ((evt.mKeyFlags == 0) &&
|
if ((evt.mKeyFlags == 0) &&
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue