aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDave Love2002-10-31 17:57:54 +0000
committerDave Love2002-10-31 17:57:54 +0000
commitf8220f0284fde94a4f6fae63bc362807e8153b22 (patch)
treeb3b62835c5e68a091f2d9d877a1d1af962efdef8 /src
parent0b0c63c231a326b97c28979990c3e3ccdcd848b4 (diff)
downloademacs-f8220f0284fde94a4f6fae63bc362807e8153b22.tar.gz
emacs-f8220f0284fde94a4f6fae63bc362807e8153b22.zip
(XTread_socket): Fix changes for defined keysyms. Add
XK_ISO... case. (xaw_scroll_callback): Revert last change.
Diffstat (limited to 'src')
-rw-r--r--src/ChangeLog6
-rw-r--r--src/xterm.c166
2 files changed, 100 insertions, 72 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 00ecbe554ea..9b6b9c74c23 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,9 @@
12002-10-31 Dave Love <fx@gnu.org>
2
3 * xterm.c (XTread_socket): Fix changes for defined keysyms. Add
4 XK_ISO... case.
5 (xaw_scroll_callback): Revert last change.
6
12002-10-30 Kenichi Handa <handa@m17n.org> 72002-10-30 Kenichi Handa <handa@m17n.org>
2 8
3 * charset.c (Fset_charset_priority): Update 9 * charset.c (Fset_charset_priority): Update
diff --git a/src/xterm.c b/src/xterm.c
index 889e62c3473..986d48353bd 100644
--- a/src/xterm.c
+++ b/src/xterm.c
@@ -8639,7 +8639,8 @@ xaw_scroll_callback (widget, client_data, call_data)
8639 XtPointer client_data, call_data; 8639 XtPointer client_data, call_data;
8640{ 8640{
8641 struct scroll_bar *bar = (struct scroll_bar *) client_data; 8641 struct scroll_bar *bar = (struct scroll_bar *) client_data;
8642 int position = *(int *) call_data; 8642 /* The position really is stored cast to a pointer. */
8643 int position = (long) call_data;
8643 Dimension height; 8644 Dimension height;
8644 int part; 8645 int part;
8645 8646
@@ -10550,130 +10551,151 @@ XTread_socket (sd, bufp, numchars, expected)
10550 10551
10551 if (numchars > 1) 10552 if (numchars > 1)
10552 { 10553 {
10553 if (((keysym >= XK_BackSpace && keysym <= XK_Escape) 10554 Lisp_Object c;
10554 || keysym == XK_Delete 10555
10556 /* First deal with keysyms which have defined
10557 translations to characters. */
10558 if (keysym >= 32 && keysym < 128)
10559 /* Avoid explicitly decoding each ASCII character. */
10560 {
10561 bufp->kind = ascii_keystroke;
10562 bufp->code = keysym;
10563 XSETFRAME (bufp->frame_or_window, f);
10564 bufp->arg = Qnil;
10565 bufp->modifiers
10566 = x_x_to_emacs_modifiers (FRAME_X_DISPLAY_INFO (f),
10567 modifiers);
10568 bufp->timestamp = event.xkey.time;
10569 bufp++;
10570 count++;
10571 numchars--;
10572 }
10573 /* Now non-ASCII. */
10574 else if (! EQ ((c = Fgethash (make_number (keysym),
10575 Vx_keysym_table, Qnil)),
10576 Qnil))
10577 {
10578 bufp->kind = (ASCII_CHAR_P (c)
10579 ? ascii_keystroke
10580 : multibyte_char_keystroke);
10581 bufp->code = c;
10582 XSETFRAME (bufp->frame_or_window, f);
10583 bufp->arg = Qnil;
10584 bufp->modifiers
10585 = x_x_to_emacs_modifiers (FRAME_X_DISPLAY_INFO (f),
10586 modifiers);
10587 bufp->timestamp = event.xkey.time;
10588 bufp++;
10589 count++;
10590 numchars--;
10591 }
10592 else if (((keysym >= XK_BackSpace && keysym <= XK_Escape)
10593 || keysym == XK_Delete
10555#ifdef XK_ISO_Left_Tab 10594#ifdef XK_ISO_Left_Tab
10556 || (keysym >= XK_ISO_Left_Tab && keysym <= XK_ISO_Enter) 10595 || (keysym >= XK_ISO_Left_Tab && keysym <= XK_ISO_Enter)
10557#endif 10596#endif
10558 || (keysym >= XK_Kanji && keysym <= XK_Eisu_toggle) 10597 || (keysym >= XK_Kanji && keysym <= XK_Eisu_toggle)
10559 || IsCursorKey (keysym) /* 0xff50 <= x < 0xff60 */ 10598 || IsCursorKey (keysym) /* 0xff50 <= x < 0xff60 */
10560 || IsMiscFunctionKey (keysym) /* 0xff60 <= x < VARIES */ 10599 || IsMiscFunctionKey (keysym) /* 0xff60 <= x < VARIES */
10561#ifdef HPUX 10600#ifdef HPUX
10562 /* This recognizes the "extended function keys". 10601 /* This recognizes the "extended function
10563 It seems there's no cleaner way. 10602 keys". It seems there's no cleaner way.
10564 Test IsModifierKey to avoid handling mode_switch 10603 Test IsModifierKey to avoid handling
10565 incorrectly. */ 10604 mode_switch incorrectly. */
10566 || ((unsigned) (keysym) >= XK_Select 10605 || ((unsigned) (keysym) >= XK_Select
10567 && (unsigned)(keysym) < XK_KP_Space) 10606 && (unsigned)(keysym) < XK_KP_Space)
10568#endif 10607#endif
10569#ifdef XK_dead_circumflex 10608#ifdef XK_dead_circumflex
10570 || orig_keysym == XK_dead_circumflex 10609 || orig_keysym == XK_dead_circumflex
10571#endif 10610#endif
10572#ifdef XK_dead_grave 10611#ifdef XK_dead_grave
10573 || orig_keysym == XK_dead_grave 10612 || orig_keysym == XK_dead_grave
10574#endif 10613#endif
10575#ifdef XK_dead_tilde 10614#ifdef XK_dead_tilde
10576 || orig_keysym == XK_dead_tilde 10615 || orig_keysym == XK_dead_tilde
10577#endif 10616#endif
10578#ifdef XK_dead_diaeresis 10617#ifdef XK_dead_diaeresis
10579 || orig_keysym == XK_dead_diaeresis 10618 || orig_keysym == XK_dead_diaeresis
10580#endif 10619#endif
10581#ifdef XK_dead_macron 10620#ifdef XK_dead_macron
10582 || orig_keysym == XK_dead_macron 10621 || orig_keysym == XK_dead_macron
10583#endif 10622#endif
10584#ifdef XK_dead_degree 10623#ifdef XK_dead_degree
10585 || orig_keysym == XK_dead_degree 10624 || orig_keysym == XK_dead_degree
10586#endif 10625#endif
10587#ifdef XK_dead_acute 10626#ifdef XK_dead_acute
10588 || orig_keysym == XK_dead_acute 10627 || orig_keysym == XK_dead_acute
10589#endif 10628#endif
10590#ifdef XK_dead_cedilla 10629#ifdef XK_dead_cedilla
10591 || orig_keysym == XK_dead_cedilla 10630 || orig_keysym == XK_dead_cedilla
10592#endif 10631#endif
10593#ifdef XK_dead_breve 10632#ifdef XK_dead_breve
10594 || orig_keysym == XK_dead_breve 10633 || orig_keysym == XK_dead_breve
10595#endif 10634#endif
10596#ifdef XK_dead_ogonek 10635#ifdef XK_dead_ogonek
10597 || orig_keysym == XK_dead_ogonek 10636 || orig_keysym == XK_dead_ogonek
10598#endif 10637#endif
10599#ifdef XK_dead_caron 10638#ifdef XK_dead_caron
10600 || orig_keysym == XK_dead_caron 10639 || orig_keysym == XK_dead_caron
10601#endif 10640#endif
10602#ifdef XK_dead_doubleacute 10641#ifdef XK_dead_doubleacute
10603 || orig_keysym == XK_dead_doubleacute 10642 || orig_keysym == XK_dead_doubleacute
10604#endif 10643#endif
10605#ifdef XK_dead_abovedot 10644#ifdef XK_dead_abovedot
10606 || orig_keysym == XK_dead_abovedot 10645 || orig_keysym == XK_dead_abovedot
10607#endif 10646#endif
10608#ifdef XK_dead_abovering 10647#ifdef XK_dead_abovering
10609 || orig_keysym == XK_dead_abovering 10648 || orig_keysym == XK_dead_abovering
10610#endif 10649#endif
10611#ifdef XK_dead_iota 10650#ifdef XK_dead_iota
10612 || orig_keysym == XK_dead_iota 10651 || orig_keysym == XK_dead_iota
10613#endif 10652#endif
10614#ifdef XK_dead_belowdot 10653#ifdef XK_dead_belowdot
10615 || orig_keysym == XK_dead_belowdot 10654 || orig_keysym == XK_dead_belowdot
10616#endif 10655#endif
10617#ifdef XK_dead_voiced_sound 10656#ifdef XK_dead_voiced_sound
10618 || orig_keysym == XK_dead_voiced_sound 10657 || orig_keysym == XK_dead_voiced_sound
10619#endif 10658#endif
10620#ifdef XK_dead_semivoiced_sound 10659#ifdef XK_dead_semivoiced_sound
10621 || orig_keysym == XK_dead_semivoiced_sound 10660 || orig_keysym == XK_dead_semivoiced_sound
10622#endif 10661#endif
10623#ifdef XK_dead_hook 10662#ifdef XK_dead_hook
10624 || orig_keysym == XK_dead_hook 10663 || orig_keysym == XK_dead_hook
10625#endif 10664#endif
10626#ifdef XK_dead_horn 10665#ifdef XK_dead_horn
10627 || orig_keysym == XK_dead_horn 10666 || orig_keysym == XK_dead_horn
10628#endif 10667#endif
10629 || IsKeypadKey (keysym) /* 0xff80 <= x < 0xffbe */ 10668 || IsKeypadKey (keysym) /* 0xff80 <= x < 0xffbe */
10630 || IsFunctionKey (keysym) /* 0xffbe <= x < 0xffe1 */ 10669 || IsFunctionKey (keysym) /* 0xffbe <= x < 0xffe1 */
10631 /* Any "vendor-specific" key is ok. */ 10670 /* Any "vendor-specific" key is ok. */
10632 || (orig_keysym & (1 << 28)) 10671 || (orig_keysym & (1 << 28))
10633 || (keysym != NoSymbol && nbytes == 0)) 10672 || (keysym != NoSymbol && nbytes == 0))
10634 && ! (IsModifierKey (orig_keysym) 10673 && ! (IsModifierKey (orig_keysym)
10635#ifndef HAVE_X11R5 10674#ifndef HAVE_X11R5
10636#ifdef XK_Mode_switch 10675#ifdef XK_Mode_switch
10637 || ((unsigned)(orig_keysym) == XK_Mode_switch) 10676 || ((unsigned)(orig_keysym) == XK_Mode_switch)
10638#endif 10677#endif
10639#ifdef XK_Num_Lock 10678#ifdef XK_Num_Lock
10640 || ((unsigned)(orig_keysym) == XK_Num_Lock) 10679 || ((unsigned)(orig_keysym) == XK_Num_Lock)
10641#endif 10680#endif
10642#endif /* not HAVE_X11R5 */ 10681#endif /* not HAVE_X11R5 */
10643 )) 10682 /* The symbols from XK_ISO_Lock to
10683 XK_ISO_Last_Group_Lock doesn't have
10684 real modifiers but should be treated
10685 similarly to Mode_switch by Emacs. */
10686#if defined XK_ISO_Lock && defined XK_ISO_Last_Group_Lock
10687 || ((unsigned)(orig_keysym) >= XK_ISO_Lock
10688 && (unsigned)(orig_keysym) <= XK_ISO_Last_Group_Lock)
10689#endif
10690 ))
10644 { 10691 {
10645 Lisp_Object c;
10646
10647 if (temp_index == sizeof temp_buffer / sizeof (short)) 10692 if (temp_index == sizeof temp_buffer / sizeof (short))
10648 temp_index = 0; 10693 temp_index = 0;
10649 temp_buffer[temp_index++] = keysym; 10694 temp_buffer[temp_index++] = keysym;
10650 /* First deal with keysyms which have 10695 /* make_lispy_event will convert this to a symbolic
10651 defined translations to characters. */ 10696 key. */
10652 if (keysym >= 32 && keysym < 128) 10697 bufp->kind = non_ascii_keystroke;
10653 /* Fixme: Is this always right? It avoids 10698 bufp->code = keysym;
10654 explicitly decoding each ASCII character. */
10655 {
10656 bufp->kind = ascii_keystroke;
10657 bufp->code = c;
10658 }
10659 else if (! EQ ((c = Fgethash (make_number (keysym),
10660 Vx_keysym_table,
10661 Qnil)),
10662 Qnil))
10663 {
10664 bufp->kind = (ASCII_CHAR_P (c)
10665 ? ascii_keystroke
10666 : multibyte_char_keystroke);
10667 bufp->code = c;
10668 }
10669 else
10670 /* Not a character keysym.
10671 make_lispy_event will convert it to a
10672 symbolic key. */
10673 {
10674 bufp->kind = non_ascii_keystroke;
10675 bufp->code = keysym;
10676 }
10677 XSETFRAME (bufp->frame_or_window, f); 10699 XSETFRAME (bufp->frame_or_window, f);
10678 bufp->arg = Qnil; 10700 bufp->arg = Qnil;
10679 bufp->modifiers 10701 bufp->modifiers
@@ -10698,7 +10720,7 @@ XTread_socket (sd, bufp, numchars, expected)
10698 temp_buffer[temp_index++] = copy_bufptr[i]; 10720 temp_buffer[temp_index++] = copy_bufptr[i];
10699 } 10721 }
10700 10722
10701 { 10723 {
10702 /* Decode the input data. */ 10724 /* Decode the input data. */
10703 coding.destination 10725 coding.destination
10704 = (unsigned char *) malloc (nbytes); 10726 = (unsigned char *) malloc (nbytes);