diff options
| author | Matthias Melcher <fltk@matthiasm.com> | 2010-11-16 21:15:27 +0000 |
|---|---|---|
| committer | Matthias Melcher <fltk@matthiasm.com> | 2010-11-16 21:15:27 +0000 |
| commit | e91fe6e6d5931953f558345e17e269e5432e956f (patch) | |
| tree | 9eac78340ee7060f300edfeb1d5a0d58c6217fac /src | |
| parent | 8224a775ac877a87d2d82173bef1d49aa9498a92 (diff) | |
Fixed Caps Lock handling in X11/XIM (STR #2366)
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@7862 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'src')
| -rw-r--r-- | src/Fl_x.cxx | 54 |
1 files changed, 24 insertions, 30 deletions
diff --git a/src/Fl_x.cxx b/src/Fl_x.cxx index d6e34764d..568146ce1 100644 --- a/src/Fl_x.cxx +++ b/src/Fl_x.cxx @@ -809,7 +809,6 @@ int fl_handle(const XEvent& thisevent) XEvent xevent = thisevent; fl_xevent = &thisevent; Window xid = xevent.xany.window; - int filtered = 0; static Window xim_win = 0; if (fl_xim_ic && xevent.type == DestroyNotify && @@ -868,10 +867,8 @@ int fl_handle(const XEvent& thisevent) #endif } - filtered = XFilterEvent((XEvent *)&xevent, 0); - if (filtered) { - return 1; - } + if ( XFilterEvent((XEvent *)&xevent, 0) ) + return(1); switch (xevent.type) { @@ -1144,33 +1141,30 @@ int fl_handle(const XEvent& thisevent) int len = 0; if (fl_xim_ic) { - if (!filtered) { - Status status; - len = XUtf8LookupString(fl_xim_ic, (XKeyPressedEvent *)&xevent.xkey, - buffer, buffer_len, &keysym, &status); - - while (status == XBufferOverflow && buffer_len < 50000) { - buffer_len = buffer_len * 5 + 1; - buffer = (char*)realloc(buffer, buffer_len); - len = XUtf8LookupString(fl_xim_ic, (XKeyPressedEvent *)&xevent.xkey, - buffer, buffer_len, &keysym, &status); - } - } else { - keysym = XKeycodeToKeysym(fl_display, keycode, 0); - } + Status status; + len = XUtf8LookupString(fl_xim_ic, (XKeyPressedEvent *)&xevent.xkey, + buffer, buffer_len, &keysym, &status); + + while (status == XBufferOverflow && buffer_len < 50000) { + buffer_len = buffer_len * 5 + 1; + buffer = (char*)realloc(buffer, buffer_len); + len = XUtf8LookupString(fl_xim_ic, (XKeyPressedEvent *)&xevent.xkey, + buffer, buffer_len, &keysym, &status); + } + keysym = XKeycodeToKeysym(fl_display, keycode, 0); } else { - //static XComposeStatus compose; - len = XLookupString((XKeyEvent*)&(xevent.xkey), + //static XComposeStatus compose; + len = XLookupString((XKeyEvent*)&(xevent.xkey), buffer, buffer_len, &keysym, 0/*&compose*/); - if (keysym && keysym < 0x400) { // a character in latin-1,2,3,4 sets - // force it to type a character (not sure if this ever is needed): - // if (!len) {buffer[0] = char(keysym); len = 1;} - len = fl_utf8encode(XKeysymToUcs(keysym), buffer); - if (len < 1) len = 1; - // ignore all effects of shift on the keysyms, which makes it a lot - // easier to program shortcuts and is Windoze-compatable: - keysym = XKeycodeToKeysym(fl_display, keycode, 0); - } + if (keysym && keysym < 0x400) { // a character in latin-1,2,3,4 sets + // force it to type a character (not sure if this ever is needed): + // if (!len) {buffer[0] = char(keysym); len = 1;} + len = fl_utf8encode(XKeysymToUcs(keysym), buffer); + if (len < 1) len = 1; + // ignore all effects of shift on the keysyms, which makes it a lot + // easier to program shortcuts and is Windoze-compatable: + keysym = XKeycodeToKeysym(fl_display, keycode, 0); + } } // MRS: Can't use Fl::event_state(FL_CTRL) since the state is not // set until set_event_xy() is called later... |
