diff options
| author | Zufu Liu <unknown> | 2020-03-21 08:32:27 +1100 |
|---|---|---|
| committer | Zufu Liu <unknown> | 2020-03-21 08:32:27 +1100 |
| commit | c9ca7bac14143646467d66b7f7f3af7489c5cfb9 (patch) | |
| tree | 296ce73ca9a407a5ff5bef8280e2eb0626ec667f | |
| parent | 820fe962369e812beee37ce223ade43dbb2eb575 (diff) | |
| download | scintilla-mirror-c9ca7bac14143646467d66b7f7f3af7489c5cfb9.tar.gz | |
Backport: Bug [#2149]. Enable windowed IME on Wayland by setting as transient for main.
Backport of changeset 8016:b99cb7ebefbe.
| -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 30c7b4387..2d8a4b847 100755 --- a/gtk/ScintillaGTK.cxx +++ b/gtk/ScintillaGTK.cxx @@ -154,6 +154,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), @@ -253,6 +254,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)); @@ -262,6 +265,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); @@ -433,18 +437,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 ed2513a3f..1c955345e 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; |
