From 9da158f17a6eed1a76e5b57bdd93da5234edc5d3 Mon Sep 17 00:00:00 2001
From: rmax <rmax>
Date: Tue, 26 Oct 2004 16:39:00 +0000
Subject: * generic/tkEvent.c (Tk_HandleEvent): Call XSetICFocus whenever the
 window receives focus. This fixes bug #905830 but avoids #1000051.

---
 ChangeLog         |  6 ++++++
 generic/tkEvent.c | 13 ++++++++++++-
 2 files changed, 18 insertions(+), 1 deletion(-)

diff --git a/ChangeLog b/ChangeLog
index 630de3c..3290afe 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2004-10-26  Reinhard Max  <max@suse.de>
+
+	* generic/tkEvent.c (Tk_HandleEvent): Call XSetICFocus whenever
+	the window receives focus. This fixes bug #905830 but avoids
+	#1000051.
+	
 2004-10-20  Jeff Hobbs  <jeffh@ActiveState.com>
 
 	* win/tkWinWm.c (UpdateWrapper): pass SWP_NOOWNERZORDER to
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;
 	}
-- 
cgit v0.12