[gtk+] Bug 705182 Reset Cocoa IME state when immodule is reset
- From: John Ralls <jralls src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] Bug 705182 Reset Cocoa IME state when immodule is reset
- Date: Thu, 15 Aug 2013 17:06:02 +0000 (UTC)
commit 9ca802161ec6387419d160f21fe477008a567477
Author: Michael Hutchison <m j hutchison gmail com>
Date: Thu Aug 15 09:44:02 2013 -0700
Bug 705182 Reset Cocoa IME state when immodule is reset
Commits the pre-edit string on receipt of focus_out and reset
commands.
Patch refinements by Cody Russell <bratsche gnome org> and
Ek Kato <ek kato gmail com>
modules/input/imquartz.c | 34 ++++++++++++++++++++++++++++++++++
1 files changed, 34 insertions(+), 0 deletions(-)
---
diff --git a/modules/input/imquartz.c b/modules/input/imquartz.c
index 61ad914..9e42d8f 100644
--- a/modules/input/imquartz.c
+++ b/modules/input/imquartz.c
@@ -211,9 +211,40 @@ quartz_filter_keypress (GtkIMContext *context,
}
static void
+discard_preedit (GtkIMContext *context)
+{
+ GtkIMContextQuartz *qc = GTK_IM_CONTEXT_QUARTZ (context);
+
+ if (!qc->client_window)
+ return;
+
+ NSView *nsview = gdk_quartz_window_get_nsview (qc->client_window);
+ if (!nsview)
+ return;
+
+ if (GDK_IS_WINDOW (nsview))
+ return;
+
+ /* reset any partial input for this NSView */
+ [(GdkQuartzView *)nsview unmarkText];
+ NSInputManager *currentInputManager = [NSInputManager currentInputManager];
+ [currentInputManager markedTextAbandoned:nsview];
+
+ if (qc->preedit_str)
+ {
+ g_signal_emit_by_name (context, "commit", qc->preedit_str);
+
+ g_free (qc->preedit_str);
+ qc->preedit_str = NULL;
+ g_signal_emit_by_name (context, "preedit_changed");
+ }
+}
+
+static void
quartz_reset (GtkIMContext *context)
{
GTK_NOTE (MISC, g_print ("quartz_reset\n"));
+ discard_preedit (context);
}
static void
@@ -242,6 +273,9 @@ quartz_focus_out (GtkIMContext *context)
GtkIMContextQuartz *qc = GTK_IM_CONTEXT_QUARTZ (context);
qc->focused = FALSE;
+
+ /* Commit any partially built strings or it'll mess up other GTK+ widgets in the window */
+ discard_preedit (context);
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]