aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJan Djärv2004-10-05 10:52:53 +0000
committerJan Djärv2004-10-05 10:52:53 +0000
commitb90ee8b5fe3247c345212614877551d41bcbdd98 (patch)
tree91226312befbf4c0dec84b99b2aaefc5afd0fbb2 /src
parent35ab48578a02c740b9208a5a8848d7a30f7e6592 (diff)
downloademacs-b90ee8b5fe3247c345212614877551d41bcbdd98.tar.gz
emacs-b90ee8b5fe3247c345212614877551d41bcbdd98.zip
* xterm.c (x_find_modifier_meanings): Ignore any Super or Hyper for
a row if Alt or Meta has been found for that row. Also stop scanning for Keysyms for that row.
Diffstat (limited to 'src')
-rw-r--r--src/ChangeLog6
-rw-r--r--src/xterm.c23
2 files changed, 24 insertions, 5 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 8f6b2297692..b823dbe6f30 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,9 @@
12004-10-05 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
2
3 * xterm.c (x_find_modifier_meanings): Ignore any Super or Hyper for
4 a row if Alt or Meta has been found for that row. Also stop scanning
5 for Keysyms for that row.
6
12004-10-04 Kim F. Storm <storm@cua.dk> 72004-10-04 Kim F. Storm <storm@cua.dk>
2 8
3 * fringe.c (Ffringe_bitmaps_at_pos): Change return value from cons 9 * fringe.c (Ffringe_bitmaps_at_pos): Change return value from cons
diff --git a/src/xterm.c b/src/xterm.c
index 97e21d1f255..4fc9ed71abd 100644
--- a/src/xterm.c
+++ b/src/xterm.c
@@ -3383,12 +3383,14 @@ x_find_modifier_meanings (dpyinfo)
3383 Alt keysyms are on. */ 3383 Alt keysyms are on. */
3384 { 3384 {
3385 int row, col; /* The row and column in the modifier table. */ 3385 int row, col; /* The row and column in the modifier table. */
3386 int found_alt_or_meta;
3386 3387
3387 for (row = 3; row < 8; row++) 3388 for (row = 3; row < 8; row++)
3389 {
3390 found_alt_or_meta = 0;
3388 for (col = 0; col < mods->max_keypermod; col++) 3391 for (col = 0; col < mods->max_keypermod; col++)
3389 { 3392 {
3390 KeyCode code 3393 KeyCode code = mods->modifiermap[(row * mods->max_keypermod) + col];
3391 = mods->modifiermap[(row * mods->max_keypermod) + col];
3392 3394
3393 /* Zeroes are used for filler. Skip them. */ 3395 /* Zeroes are used for filler. Skip them. */
3394 if (code == 0) 3396 if (code == 0)
@@ -3406,33 +3408,44 @@ x_find_modifier_meanings (dpyinfo)
3406 { 3408 {
3407 case XK_Meta_L: 3409 case XK_Meta_L:
3408 case XK_Meta_R: 3410 case XK_Meta_R:
3411 found_alt_or_meta = 1;
3409 dpyinfo->meta_mod_mask |= (1 << row); 3412 dpyinfo->meta_mod_mask |= (1 << row);
3410 break; 3413 break;
3411 3414
3412 case XK_Alt_L: 3415 case XK_Alt_L:
3413 case XK_Alt_R: 3416 case XK_Alt_R:
3417 found_alt_or_meta = 1;
3414 dpyinfo->alt_mod_mask |= (1 << row); 3418 dpyinfo->alt_mod_mask |= (1 << row);
3415 break; 3419 break;
3416 3420
3417 case XK_Hyper_L: 3421 case XK_Hyper_L:
3418 case XK_Hyper_R: 3422 case XK_Hyper_R:
3419 dpyinfo->hyper_mod_mask |= (1 << row); 3423 if (!found_alt_or_meta)
3424 dpyinfo->hyper_mod_mask |= (1 << row);
3425 code_col = syms_per_code;
3426 col = mods->max_keypermod;
3420 break; 3427 break;
3421 3428
3422 case XK_Super_L: 3429 case XK_Super_L:
3423 case XK_Super_R: 3430 case XK_Super_R:
3424 dpyinfo->super_mod_mask |= (1 << row); 3431 if (!found_alt_or_meta)
3432 dpyinfo->super_mod_mask |= (1 << row);
3433 code_col = syms_per_code;
3434 col = mods->max_keypermod;
3425 break; 3435 break;
3426 3436
3427 case XK_Shift_Lock: 3437 case XK_Shift_Lock:
3428 /* Ignore this if it's not on the lock modifier. */ 3438 /* Ignore this if it's not on the lock modifier. */
3429 if ((1 << row) == LockMask) 3439 if (!found_alt_or_meta && ((1 << row) == LockMask))
3430 dpyinfo->shift_lock_mask = LockMask; 3440 dpyinfo->shift_lock_mask = LockMask;
3441 code_col = syms_per_code;
3442 col = mods->max_keypermod;
3431 break; 3443 break;
3432 } 3444 }
3433 } 3445 }
3434 } 3446 }
3435 } 3447 }
3448 }
3436 } 3449 }
3437 3450
3438 /* If we couldn't find any meta keys, accept any alt keys as meta keys. */ 3451 /* If we couldn't find any meta keys, accept any alt keys as meta keys. */