summaryrefslogtreecommitdiffstats
path: root/generic
diff options
context:
space:
mode:
authorrmax <rmax>2004-10-26 16:39:00 (GMT)
committerrmax <rmax>2004-10-26 16:39:00 (GMT)
commitb485f2b4fade260ea9fcb8a29751b2315eb801af (patch)
tree885c926d5694a46de052f767eb99e5300b2753ad /generic
parentb0bbf82e6cf6644231f1bec3b8130163b994ca98 (diff)
downloadtk-b485f2b4fade260ea9fcb8a29751b2315eb801af.zip
tk-b485f2b4fade260ea9fcb8a29751b2315eb801af.tar.gz
tk-b485f2b4fade260ea9fcb8a29751b2315eb801af.tar.bz2
* generic/tkEvent.c (Tk_HandleEvent): Call XSetICFocus whenever
the window receives focus. This fixes bug #905830 but avoids #1000051.
Diffstat (limited to 'generic')
-rw-r--r--generic/tkEvent.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/generic/tkEvent.c b/generic/tkEvent.c
index 20fbb74..abf7404 100644
--- a/generic/tkEvent.c
+++ b/generic/tkEvent.c
@@ -11,7 +11,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * RCS: @(#) $Id: tkEvent.c,v 1.17.2.5 2004/07/29 21:47:57 dgp Exp $
+ * RCS: @(#) $Id: tkEvent.c,v 1.17.2.6 2004/10/26 16:39:01 rmax Exp $
*/
#include "tkPort.h"
@@ -882,6 +882,7 @@ Tk_HandleEvent(eventPtr)
*/
dispPtr = winPtr->dispPtr;
if ((dispPtr->flags & TK_DISPLAY_USE_IM)) {
+ long im_event_mask = 0L;
if (!(winPtr->flags & (TK_CHECKED_IC|TK_ALREADY_DEAD))) {
winPtr->flags |= TK_CHECKED_IC;
if (dispPtr->inputMethod != NULL) {
@@ -937,6 +938,16 @@ Tk_HandleEvent(eventPtr)
#endif
}
}
+ if (winPtr->inputContext != NULL &&
+ (eventPtr->xany.type == FocusIn)) {
+ XGetICValues(winPtr->inputContext,
+ XNFilterEvents, &im_event_mask, NULL);
+ if (im_event_mask != 0L) {
+ XSelectInput(winPtr->display, winPtr->window,
+ winPtr->atts.event_mask | im_event_mask);
+ XSetICFocus(winPtr->inputContext);
+ }
+ }
if (XFilterEvent(eventPtr, None)) {
goto done;
}