diff options
author | Alan Third <alan@idiocy.org> | 2020-11-10 12:54:50 +0000 |
---|---|---|
committer | Alan Third <alan@idiocy.org> | 2020-12-14 20:32:06 +0000 |
commit | ee6c702e1895d88ee7e6f57bc6778694239ead76 (patch) | |
tree | 344c10d0fa798c7bd8a29b6c906e039a0a1ec292 | |
parent | 668f0a7f847264dbc9549aeb2d42b967e25eef5f (diff) | |
download | emacs-ee6c702e1895d88ee7e6f57bc6778694239ead76.tar.gz |
Fix error with fn key in NS port (bug#44533)
* src/nsterm.m ([EmacsView keyDown:]): Move the correction for fn key
handling to before the modifiers are calculated.
(cherry picked from commit 7970610d48701a949ce443c94c71eac47d044197)
-rw-r--r-- | src/nsterm.m | 19 |
1 files changed, 8 insertions, 11 deletions
diff --git a/src/nsterm.m b/src/nsterm.m index 4defeee7c3a..af06968d088 100644 --- a/src/nsterm.m +++ b/src/nsterm.m @@ -6350,6 +6350,14 @@ not_in_argv (NSString *arg) code = 0xFF08; /* backspace */ else code = fnKeysym; + + /* Function keys (such as the F-keys, arrow keys, etc.) set + modifiers as though the fn key has been pressed when it + hasn't. Also some combinations of fn and a function key + return a different key than was pressed (e.g. fn-<left> + gives <home>). We need to unset the fn key flag in these + cases. */ + flags &= ~NS_FUNCTION_KEY_MASK; } /* The ⌘ and ⌥ modifiers can be either shift-like (for alternate @@ -6371,17 +6379,6 @@ not_in_argv (NSString *arg) Lisp_Object kind = fnKeysym ? QCfunction : QCordinary; emacs_event->modifiers = EV_MODIFIERS2 (flags, kind); - /* Function keys (such as the F-keys, arrow keys, etc.) set - modifiers as though the fn key has been pressed when it - hasn't. Also some combinations of fn and a function key - return a different key than was pressed (e.g. fn-<left> gives - <home>). We need to unset the fn modifier in these cases. - FIXME: Can we avoid setting it in the first place? */ - if (fnKeysym && (flags & NS_FUNCTION_KEY_MASK)) - emacs_event->modifiers - ^= parse_solitary_modifier (mod_of_kind (ns_function_modifier, - QCfunction)); - if (NS_KEYLOG) fprintf (stderr, "keyDown: code =%x\tfnKey =%x\tflags = %x\tmods = %x\n", code, fnKeysym, flags, emacs_event->modifiers); |