diff --git a/NEWS b/NEWS index a34e8d7a0..2716742a4 100644 --- a/NEWS +++ b/NEWS @@ -3,6 +3,7 @@ DFHack Future plugins will not be loaded if globals they specify as required are not located (should prevent some crashes) Fixes Fixed numerous (mostly Lua-related) crashes on OS X by including a more up-to-date libstdc++ + Alt should no longer get stuck on Windows (and perhaps other platforms as well) advfort works again devel/export-dt-ini: Updated for 0.40.20+ digfort: now checks file type and existence diff --git a/library/Core.cpp b/library/Core.cpp index 29aba234e..19e2c4345 100644 --- a/library/Core.cpp +++ b/library/Core.cpp @@ -1579,6 +1579,8 @@ int UnicodeAwareSym(const SDL::KeyboardEvent& ke) //MEMO: return false if event is consumed int Core::DFH_SDL_Event(SDL::Event* ev) { + static bool alt = 0; + // do NOT process events before we are ready. if(!started) return true; if(!ev) @@ -1587,6 +1589,11 @@ int Core::DFH_SDL_Event(SDL::Event* ev) { auto ke = (SDL::KeyboardEvent *)ev; + if (ke->ksym.sym == SDL::K_LALT || ke->ksym.sym == SDL::K_RALT) + { + alt = (ev->type == SDL::ET_KEYDOWN); + } + else if(ke->state == SDL::BTN_PRESSED && !hotkey_states[ke->ksym.sym]) { hotkey_states[ke->ksym.sym] = true; @@ -1594,7 +1601,7 @@ int Core::DFH_SDL_Event(SDL::Event* ev) int mod = 0; if (ke->ksym.mod & SDL::KMOD_SHIFT) mod |= 1; if (ke->ksym.mod & SDL::KMOD_CTRL) mod |= 2; - if (ke->ksym.mod & SDL::KMOD_ALT) mod |= 4; + if (alt) mod |= 4; // Use unicode so Windows gives the correct value for the // user's Input Language