aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Djärv2010-11-24 08:50:08 +0100
committerJan Djärv2010-11-24 08:50:08 +0100
commit50795d1ff3bb9affaae8247dd39b86e43b4af47c (patch)
tree89ad4d4ea8b19a2b70be63e4753047a676b62f61
parent69881db0cbcf68001165a44b2ab2595c23e035e3 (diff)
downloademacs-50795d1ff3bb9affaae8247dd39b86e43b4af47c.tar.gz
emacs-50795d1ff3bb9affaae8247dd39b86e43b4af47c.zip
Bug 7458: Make key press like Left + right ctrl work when right is not control.
Ditto Alt and Command. * src/nsterm.m (NSLeftControlKeyMask, NSLeftCommandKeyMask) (NSLeftAlternateKeyMask): New defines. (keyDown): Parse left and right keys separatly.
-rw-r--r--src/ChangeLog6
-rw-r--r--src/nsterm.m73
2 files changed, 51 insertions, 28 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index c18c84a42cb..4fe2d8864ae 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,9 @@
12010-11-24 Jan Djärv <jan.h.d@swipnet.se>
2
3 * nsterm.m (NSLeftControlKeyMask, NSLeftCommandKeyMask)
4 (NSLeftAlternateKeyMask): New defines.
5 (keyDown): Parse left and right keys separatly (Bug#7458).
6
12010-11-23 Eli Zaretskii <eliz@gnu.org> 72010-11-23 Eli Zaretskii <eliz@gnu.org>
2 8
3 * intervals.c (temp_set_point_both): Define before calling, to 9 * intervals.c (temp_set_point_both): Define before calling, to
diff --git a/src/nsterm.m b/src/nsterm.m
index 06d7354873d..04951bb5068 100644
--- a/src/nsterm.m
+++ b/src/nsterm.m
@@ -233,9 +233,12 @@ static BOOL inNsSelect = 0;
233 233
234/* Convert modifiers in a NeXTSTEP event to emacs style modifiers. */ 234/* Convert modifiers in a NeXTSTEP event to emacs style modifiers. */
235#define NS_FUNCTION_KEY_MASK 0x800000 235#define NS_FUNCTION_KEY_MASK 0x800000
236#define NSRightAlternateKeyMask (0x000040 | NSAlternateKeyMask) 236#define NSLeftControlKeyMask (0x000001 | NSControlKeyMask)
237#define NSRightControlKeyMask (0x002000 | NSControlKeyMask) 237#define NSRightControlKeyMask (0x002000 | NSControlKeyMask)
238#define NSLeftCommandKeyMask (0x000008 | NSCommandKeyMask)
238#define NSRightCommandKeyMask (0x000010 | NSCommandKeyMask) 239#define NSRightCommandKeyMask (0x000010 | NSCommandKeyMask)
240#define NSLeftAlternateKeyMask (0x000020 | NSAlternateKeyMask)
241#define NSRightAlternateKeyMask (0x000040 | NSAlternateKeyMask)
239#define EV_MODIFIERS(e) \ 242#define EV_MODIFIERS(e) \
240 ((([e modifierFlags] & NSHelpKeyMask) ? \ 243 ((([e modifierFlags] & NSHelpKeyMask) ? \
241 hyper_modifier : 0) \ 244 hyper_modifier : 0) \
@@ -4419,7 +4422,7 @@ ns_term_shutdown (int sig)
4419 code = ([[theEvent charactersIgnoringModifiers] length] == 0) ? 4422 code = ([[theEvent charactersIgnoringModifiers] length] == 0) ?
4420 0 : [[theEvent charactersIgnoringModifiers] characterAtIndex: 0]; 4423 0 : [[theEvent charactersIgnoringModifiers] characterAtIndex: 0];
4421 /* (Carbon way: [theEvent keyCode]) */ 4424 /* (Carbon way: [theEvent keyCode]) */
4422 4425
4423 /* is it a "function key"? */ 4426 /* is it a "function key"? */
4424 fnKeysym = ns_convert_key (code); 4427 fnKeysym = ns_convert_key (code);
4425 if (fnKeysym) 4428 if (fnKeysym)
@@ -4442,15 +4445,16 @@ ns_term_shutdown (int sig)
4442 if (flags & NSShiftKeyMask) 4445 if (flags & NSShiftKeyMask)
4443 emacs_event->modifiers |= shift_modifier; 4446 emacs_event->modifiers |= shift_modifier;
4444 4447
4445 if (flags & NSCommandKeyMask) 4448 if ((flags & NSRightCommandKeyMask) == NSRightCommandKeyMask)
4449 emacs_event->modifiers |= parse_solitary_modifier
4450 (EQ (ns_right_command_modifier, Qleft)
4451 ? ns_command_modifier
4452 : ns_right_command_modifier);
4453
4454 if (flags & NSLeftCommandKeyMask)
4446 { 4455 {
4447 if ((flags & NSRightCommandKeyMask) == NSRightCommandKeyMask 4456 emacs_event->modifiers |= parse_solitary_modifier
4448 && !EQ (ns_right_command_modifier, Qleft)) 4457 (ns_command_modifier);
4449 emacs_event->modifiers |= parse_solitary_modifier
4450 (ns_right_command_modifier);
4451 else
4452 emacs_event->modifiers |= parse_solitary_modifier
4453 (ns_command_modifier);
4454 4458
4455 /* if super (default), take input manager's word so things like 4459 /* if super (default), take input manager's word so things like
4456 dvorak / qwerty layout work */ 4460 dvorak / qwerty layout work */
@@ -4484,30 +4488,43 @@ ns_term_shutdown (int sig)
4484 } 4488 }
4485 } 4489 }
4486 4490
4487 if (flags & NSControlKeyMask) 4491 if ((flags & NSRightControlKeyMask) == NSRightControlKeyMask)
4488 { 4492 emacs_event->modifiers |= parse_solitary_modifier
4489 if ((flags & NSRightControlKeyMask) == NSRightControlKeyMask 4493 (EQ (ns_right_control_modifier, Qleft)
4490 && !EQ (ns_right_control_modifier, Qleft)) 4494 ? ns_control_modifier
4491 emacs_event->modifiers |= parse_solitary_modifier 4495 : ns_right_control_modifier);
4492 (ns_right_control_modifier); 4496
4493 else 4497 if (flags & NSLeftControlKeyMask)
4494 emacs_event->modifiers |= parse_solitary_modifier 4498 emacs_event->modifiers |= parse_solitary_modifier
4495 (ns_control_modifier); 4499 (ns_control_modifier);
4496 }
4497 4500
4498 if (flags & NS_FUNCTION_KEY_MASK && !fnKeysym) 4501 if (flags & NS_FUNCTION_KEY_MASK && !fnKeysym)
4499 emacs_event->modifiers |= 4502 emacs_event->modifiers |=
4500 parse_solitary_modifier (ns_function_modifier); 4503 parse_solitary_modifier (ns_function_modifier);
4501 4504
4502 if (!EQ (ns_right_alternate_modifier, Qleft) 4505 if ((flags & NSRightAlternateKeyMask) == NSRightAlternateKeyMask)
4503 && ((flags & NSRightAlternateKeyMask) == NSRightAlternateKeyMask)) 4506 {
4504 { 4507 if ((NILP (ns_right_alternate_modifier)
4505 emacs_event->modifiers |= parse_solitary_modifier 4508 || EQ (ns_right_alternate_modifier, Qnone))
4506 (ns_right_alternate_modifier); 4509 && !fnKeysym)
4507 } 4510 { /* accept pre-interp alt comb */
4508 else if (flags & NSAlternateKeyMask) /* default = meta */ 4511 if ([[theEvent characters] length] > 0)
4512 code = [[theEvent characters] characterAtIndex: 0];
4513 /*HACK: clear lone shift modifier to stop next if from firing */
4514 if (emacs_event->modifiers == shift_modifier)
4515 emacs_event->modifiers = 0;
4516 }
4517 else
4518 emacs_event->modifiers |= parse_solitary_modifier
4519 (EQ (ns_right_alternate_modifier, Qleft)
4520 ? ns_alternate_modifier
4521 : ns_right_alternate_modifier);
4522 }
4523
4524 if (flags & NSLeftAlternateKeyMask) /* default = meta */
4509 { 4525 {
4510 if ((NILP (ns_alternate_modifier) || EQ (ns_alternate_modifier, Qnone)) 4526 if ((NILP (ns_alternate_modifier)
4527 || EQ (ns_alternate_modifier, Qnone))
4511 && !fnKeysym) 4528 && !fnKeysym)
4512 { /* accept pre-interp alt comb */ 4529 { /* accept pre-interp alt comb */
4513 if ([[theEvent characters] length] > 0) 4530 if ([[theEvent characters] length] > 0)