From e7614cc9ac18995ef8ac353096a5c13e8cebddc9 Mon Sep 17 00:00:00 2001 From: Po Lu Date: Sat, 12 Nov 2022 13:11:00 +0000 Subject: [PATCH] Correctly handle key map updates on Haiku * src/haiku_support.cc (MessageReceived): Handle B_KEY_MAP_LOADED by clearing the previous keymap. --- src/haiku_support.cc | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/haiku_support.cc b/src/haiku_support.cc index 0f8e26d0db4..3a982856777 100644 --- a/src/haiku_support.cc +++ b/src/haiku_support.cc @@ -653,6 +653,24 @@ public: Quit (); else if (msg->what == B_CLIPBOARD_CHANGED) haiku_write (CLIPBOARD_CHANGED_EVENT, &rq); + else if (msg->what == B_KEY_MAP_LOADED) + { + /* Install the new keymap. Or rather, clear key_map -- Emacs + will fetch it again from the main thread the next time it + is needed. */ + if (key_map_lock.Lock ()) + { + if (key_map) + free (key_map); + + if (key_chars) + free (key_chars); + + key_map = NULL; + key_chars = NULL; + key_map_lock.Unlock (); + } + } else BApplication::MessageReceived (msg); } -- 2.39.2