summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Melcher <fltk@matthiasm.com>2010-11-16 21:15:27 +0000
committerMatthias Melcher <fltk@matthiasm.com>2010-11-16 21:15:27 +0000
commite91fe6e6d5931953f558345e17e269e5432e956f (patch)
tree9eac78340ee7060f300edfeb1d5a0d58c6217fac
parent8224a775ac877a87d2d82173bef1d49aa9498a92 (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
-rw-r--r--CHANGES1
-rw-r--r--src/Fl_x.cxx54
2 files changed, 25 insertions, 30 deletions
diff --git a/CHANGES b/CHANGES
index 15991cf9d..f11bbd52a 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,5 +1,6 @@
CHANGES IN FLTK 1.3.0
+ - Fixed Caps Lock handling in X11/XIM (STR #2366)
- Fixed handling of missing fonts in Xft (STR #2355)
- Added alternative Xft font names (STR #2215)
- Update lib png access (STR #2442)
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...