diff options
author | jan.nijtmans <nijtmans@users.sourceforge.net> | 2017-02-05 19:29:42 (GMT) |
---|---|---|
committer | jan.nijtmans <nijtmans@users.sourceforge.net> | 2017-02-05 19:29:42 (GMT) |
commit | 334a0cab800af743b3db1b6da0023918dfa89790 (patch) | |
tree | 58a8c6cedf1ca94af9229a8a2ac2783c1d26cb9e /generic/tkEvent.c | |
parent | e00820e69f4c9fe0fb91691c104ced37840a140d (diff) | |
parent | 6130ca3ef131a8459a378ee9e3fa67484d6fe178 (diff) | |
download | tk-334a0cab800af743b3db1b6da0023918dfa89790.zip tk-334a0cab800af743b3db1b6da0023918dfa89790.tar.gz tk-334a0cab800af743b3db1b6da0023918dfa89790.tar.bz2 |
Fix [7d967c68]: Tk application fault when ibud-daemon IME is restarted
Diffstat (limited to 'generic/tkEvent.c')
-rw-r--r-- | generic/tkEvent.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/generic/tkEvent.c b/generic/tkEvent.c index 95aeda1..d058e7c 100644 --- a/generic/tkEvent.c +++ b/generic/tkEvent.c @@ -356,6 +356,7 @@ CreateXIC( /* XCreateIC failed. */ return; } + winPtr->ximGeneration = dispPtr->ximGeneration; /* * Adjust the window's event mask if the IM requires it. @@ -1288,6 +1289,14 @@ Tk_HandleEvent( */ #ifdef TK_USE_INPUT_METHODS + /* + * If the XIC has been invalidated, it must be recreated. + */ + if (winPtr->dispPtr->ximGeneration != winPtr->ximGeneration) { + winPtr->flags &= ~TK_CHECKED_IC; + winPtr->inputContext = NULL; + } + if ((winPtr->dispPtr->flags & TK_DISPLAY_USE_IM)) { if (!(winPtr->flags & (TK_CHECKED_IC|TK_ALREADY_DEAD))) { winPtr->flags |= TK_CHECKED_IC; @@ -1295,7 +1304,9 @@ Tk_HandleEvent( CreateXIC(winPtr); } } - if (eventPtr->type == FocusIn && winPtr->inputContext != NULL) { + if ((eventPtr->type == FocusIn) && + (winPtr->dispPtr->inputMethod != NULL) && + (winPtr->inputContext != NULL)) { XSetICFocus(winPtr->inputContext); } } |