diff options
-rwxr-xr-x | gtk/ScintillaGTK.cxx | 14 | ||||
-rwxr-xr-x | gtk/ScintillaGTK.h | 1 |
2 files changed, 13 insertions, 2 deletions
diff --git a/gtk/ScintillaGTK.cxx b/gtk/ScintillaGTK.cxx index 260566fe0..40045e4fc 100755 --- a/gtk/ScintillaGTK.cxx +++ b/gtk/ScintillaGTK.cxx @@ -155,6 +155,7 @@ ScintillaGTK::ScintillaGTK(_ScintillaObject *sci_) : lastKey(0), rectangularSelectionModifier(SCMOD_CTRL), parentClass(nullptr), atomSought(nullptr), + preeditInitialized(false), im_context(nullptr), lastNonCommonScript(PANGO_SCRIPT_INVALID_CODE), lastWheelMouseTime(0), @@ -254,6 +255,8 @@ void ScintillaGTK::RealizeThis(GtkWidget *widget) { gdk_window_show(widget->window); UnRefCursor(cursor); #endif + + preeditInitialized = false; gtk_widget_realize(PWidget(wPreedit)); gtk_widget_realize(PWidget(wPreeditDraw)); @@ -263,6 +266,7 @@ void ScintillaGTK::RealizeThis(GtkWidget *widget) { g_signal_connect(G_OBJECT(im_context), "preedit_changed", G_CALLBACK(PreeditChanged), this); gtk_im_context_set_client_window(im_context, WindowFromWidget(widget)); + GtkWidget *widtxt = PWidget(wText); // // No code inside the G_OBJECT macro g_signal_connect_after(G_OBJECT(widtxt), "style_set", G_CALLBACK(ScintillaGTK::StyleSetText), nullptr); @@ -434,18 +438,24 @@ public: gint ScintillaGTK::FocusInThis(GtkWidget *) { try { SetFocusState(true); + if (im_context) { + gtk_im_context_focus_in(im_context); PreEditString pes(im_context); if (PWidget(wPreedit)) { + if (!preeditInitialized) { + GtkWidget *top = gtk_widget_get_toplevel(PWidget(wMain)); + gtk_window_set_transient_for(GTK_WINDOW(PWidget(wPreedit)), GTK_WINDOW(top)); + preeditInitialized = true; + } + if (strlen(pes.str) > 0) { gtk_widget_show(PWidget(wPreedit)); } else { gtk_widget_hide(PWidget(wPreedit)); } } - gtk_im_context_focus_in(im_context); } - } catch (...) { errorStatus = SC_STATUS_FAILURE; } diff --git a/gtk/ScintillaGTK.h b/gtk/ScintillaGTK.h index 06d0d080d..f70c285eb 100755 --- a/gtk/ScintillaGTK.h +++ b/gtk/ScintillaGTK.h @@ -46,6 +46,7 @@ class ScintillaGTK : public ScintillaBase { CLIPFORMAT cfColumnSelect; #endif + bool preeditInitialized; Window wPreedit; Window wPreeditDraw; GtkIMContext *im_context; |