comparison src/xterm.c @ 89272:5fd1925653b3

(XTread_socket): Fix changes for defined keysyms. Add XK_ISO... case. (xaw_scroll_callback): Revert last change.
author Dave Love <fx@gnu.org>
date Thu, 31 Oct 2002 17:55:03 +0000
parents 25c1826d3baa
children 4f46c53eb254
comparison
equal deleted inserted replaced
89271:6d05c3c16a01 89272:5fd1925653b3
8637 xaw_scroll_callback (widget, client_data, call_data) 8637 xaw_scroll_callback (widget, client_data, call_data)
8638 Widget widget; 8638 Widget widget;
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
8646 /* Get the height of the scroll bar. */ 8647 /* Get the height of the scroll bar. */
8647 BLOCK_INPUT; 8648 BLOCK_INPUT;
10548 10549
10549 orig_keysym = keysym; 10550 orig_keysym = keysym;
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
10680 = x_x_to_emacs_modifiers (FRAME_X_DISPLAY_INFO (f), 10702 = x_x_to_emacs_modifiers (FRAME_X_DISPLAY_INFO (f),
10681 modifiers); 10703 modifiers);
10696 / sizeof (short))) 10718 / sizeof (short)))
10697 temp_index = 0; 10719 temp_index = 0;
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);
10705 if (! coding.destination) 10727 if (! coding.destination)
10706 break; 10728 break;