summaryrefslogtreecommitdiffstats
path: root/unix/tkUnixEvent.c
diff options
context:
space:
mode:
authorjenglish@flightlab.com <jenglish>2006-01-20 18:42:04 (GMT)
committerjenglish@flightlab.com <jenglish>2006-01-20 18:42:04 (GMT)
commit3a8314cc2b7f4cbc8bc90f9a6dc395d2a64eca3a (patch)
treef606837b2bd183120d27bef7e42d23b8b04d6116 /unix/tkUnixEvent.c
parentaab91ad75b0f45405cd36c76c09a518a0dd5092a (diff)
downloadtk-3a8314cc2b7f4cbc8bc90f9a6dc395d2a64eca3a.zip
tk-3a8314cc2b7f4cbc8bc90f9a6dc395d2a64eca3a.tar.gz
tk-3a8314cc2b7f4cbc8bc90f9a6dc395d2a64eca3a.tar.bz2
XIM fixes [See #905830, patch tk84-xim-fixes.patch]:
+ Revert 2005-12-05 patch disabling XIM when SCIM in use; + Make sure all X events get passed to XFilterEvent, including those without a corresponding Tk window.
Diffstat (limited to 'unix/tkUnixEvent.c')
-rw-r--r--unix/tkUnixEvent.c42
1 files changed, 12 insertions, 30 deletions
diff --git a/unix/tkUnixEvent.c b/unix/tkUnixEvent.c
index 0b13c71..d15d175 100644
--- a/unix/tkUnixEvent.c
+++ b/unix/tkUnixEvent.c
@@ -9,7 +9,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * RCS: @(#) $Id: tkUnixEvent.c,v 1.11.2.5 2005/12/05 22:40:08 hobbs Exp $
+ * RCS: @(#) $Id: tkUnixEvent.c,v 1.11.2.6 2006/01/20 18:42:04 jenglish Exp $
*/
#include "tkInt.h"
@@ -343,19 +343,22 @@ static void
TransferXEventsToTcl(display)
Display *display;
{
- int numFound;
XEvent event;
- numFound = QLength(display);
-
/*
- * Transfer events from the X event queue to the Tk event queue.
+ * Transfer events from the X event queue to the Tk event queue
+ * after XIM event filtering. KeyPress and KeyRelease events
+ * are filtered in Tk_HandleEvent instead of here, so that Tk's
+ * focus management code can redirect them.
*/
-
- while (numFound > 0) {
+ while (QLength(display) > 0) {
XNextEvent(display, &event);
+ if (event.type != KeyPress && event.type != KeyRelease) {
+ if (XFilterEvent(&event, None)) {
+ continue;
+ }
+ }
Tk_QueueWindowEvent(&event, TCL_QUEUE_TAIL);
- numFound--;
}
}
@@ -650,31 +653,10 @@ OpenIM(dispPtr)
{
unsigned short i;
XIMStyles *stylePtr;
- char *modifiers;
- modifiers = XSetLocaleModifiers("");
- if (modifiers == NULL) {
+ if (XSetLocaleModifiers("") == NULL) {
goto error;
}
-#if 1
- /*
- * This is a temporary hack that can be taken back out again
- * once Tk has learned how to deal with SCIM
- */
- while ((modifiers = strchr(modifiers, '@')) != NULL) {
- if (strncmp(modifiers, "@im=", 4) == 0) {
- /* The first "@im=" entry wins */
- const char *scim = "@im=SCIM";
- if (strncmp(modifiers, scim, strlen(scim)) == 0) {
- /* If it is SCIM, we override it */
- if (XSetLocaleModifiers("@im=local") == NULL) {
- goto error;
- }
- }
- break;
- }
- }
-#endif
dispPtr->inputMethod = XOpenIM(dispPtr->display, NULL, NULL, NULL);
if (dispPtr->inputMethod == NULL) {