--- rxvt-unicode/src/command.C 2004/12/13 07:18:52 1.177 +++ rxvt-unicode/src/command.C 2005/01/26 07:08:15 1.191 @@ -50,8 +50,12 @@ #include "version.h" #include "command.h" -#include -#include +#ifdef KEYSYM_RESOURCE +# include "keyboard.h" +#endif + +#include +#include /*----------------------------------------------------------------------*/ @@ -346,6 +350,11 @@ if (valid_keysym) { +#ifdef KEYSYM_RESOURCE + if (keyboard->dispatch (this, keysym, ev.state)) + return; +#endif + if (TermWin.saveLines) { #ifdef UNSHIFTED_SCROLLKEYS @@ -489,31 +498,6 @@ if (keysym >= 0xFF00 && keysym <= 0xFFFF) { -#ifdef KEYSYM_RESOURCE - if (! (shft | ctrl) && Keysym_map[keysym & 0xFF] != NULL) - { - unsigned int l; - const unsigned char *kbuf0; - - kbuf0 = (Keysym_map[keysym & 0xFF]); - l = (unsigned int)*kbuf0++; - - /* escape prefix */ - if (meta -# ifdef META8_OPTION - && meta_char == C0_ESC -# endif - ) - { - const unsigned char ch = C0_ESC; - tt_write (&ch, 1); - } - - tt_write (kbuf0, l); - return; - } - else -#endif { newlen = 1; switch (keysym) @@ -790,6 +774,7 @@ newlen = 0; break; } + if (newlen) len = strlen (kbuf); } @@ -808,6 +793,11 @@ len = 1; kbuf[0] = '\037'; /* Ctrl-Minus generates ^_ (31) */ } + else if (keysym == XK_ISO_Left_Tab) + { + strcpy (kbuf, "\033[Z"); + len = 3; + } else { #ifdef META8_OPTION @@ -875,7 +865,7 @@ } /*}}} */ -#if (MENUBAR_MAX) +#if MENUBAR_MAX || defined (KEYSYM_RESOURCE) /*{{{ rxvt_cmd_write (), rxvt_cmd_getc () */ /* attempt to `write' count to the input buffer */ unsigned int @@ -908,7 +898,7 @@ return 0; } -#endif /* MENUBAR_MAX */ +#endif void rxvt_term::flush () @@ -1019,6 +1009,10 @@ || mouse_slip_wheel_speed < 0 ? scr_page (DN, -mouse_slip_wheel_speed) : scr_page (UP, mouse_slip_wheel_speed)) { + if (TermWin.view_start == TermWin.nscrolled || + TermWin.view_start == 0) + mouse_slip_wheel_speed = 0; + refresh_type |= SMOOTH_REFRESH; want_refresh = 1; w.start (w.at + SCROLLBAR_CONTINUOUS_DELAY); @@ -1091,7 +1085,7 @@ if (! (options & Opt_pointerBlank)) return; - XDefineCursor (display->display, TermWin.vt, blank_cursor); + XDefineCursor (display->display, TermWin.vt, display->blank_cursor); XFlush (display->display); hidden_pointer = 1; @@ -1670,10 +1664,8 @@ * if user used some Esetroot compatible prog to set the root bg, * use the property to determine the pixmap. We use it later on. */ - if (xa[XA_XROOTPMAPID] == 0) - xa[XA_XROOTPMAPID] = XInternAtom (display->display, "_XROOTPMAP_ID", False); - - if (ev.xproperty.atom != xa[XA_XROOTPMAPID]) + if (ev.xproperty.atom != xa[XA_XROOTPMAP_ID] + && ev.xproperty.atom != xa[XA_ESETROOT_PMAP_ID]) return; /* FALLTHROUGH */ @@ -1755,7 +1747,7 @@ /* allow meta + click to select rectangular areas */ /* should be done in screen.C */ #if ENABLE_FRILLS - selection.rect = !! (ev.state & ModMetaMask); + selection.rect = !!(ev.state & ModMetaMask); #else selection.rect = false; #endif @@ -2353,14 +2345,14 @@ * the root background. Some window managers put multiple nested frame * windows for each client, so we have to take care about that. */ - i = (xa[XA_XROOTPMAPID] - && XGetWindowProperty (display->display, display->root, xa[XA_XROOTPMAPID], + i = (xa[XA_XROOTPMAP_ID] + && XGetWindowProperty (display->display, display->root, xa[XA_XROOTPMAP_ID], 0L, 1L, False, XA_PIXMAP, &atype, &aformat, &nitems, &bytes_after, &prop) == Success); if (!i || prop == NULL) - i = (xa[XA_XSETROOTID] - && XGetWindowProperty (display->display, display->root, xa[XA_XSETROOTID], + i = (xa[XA_ESETROOT_PMAP_ID] + && XGetWindowProperty (display->display, display->root, xa[XA_ESETROOT_PMAP_ID], 0L, 1L, False, XA_PIXMAP, &atype, &aformat, &nitems, &bytes_after, &prop) == Success); @@ -2711,7 +2703,7 @@ // assume wchar == unicode cmdbuf_ptr += len; - return wc; + return wc & UNICODE_MASK; } return NOCHAR; @@ -3786,8 +3778,8 @@ #if XPM_BACKGROUND changed += scale_pixmap (str); #endif - } + if (changed) { #ifdef XPM_BACKGROUND @@ -3838,6 +3830,7 @@ else { set_locale (str); + pty.set_utf8_mode (enc_utf8); # ifdef USE_XIM im_cb (); # endif