Commit 9ca80216 authored by Michael Hutchison's avatar Michael Hutchison Committed by John Ralls

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>
parent e67d0119
......@@ -210,10 +210,41 @@ quartz_filter_keypress (GtkIMContext *context,
return retval;
}
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
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment