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 | c09ea9018b0ccf2d3909715071184fcb5852c649 (patch) | |
tree | e81a8c9ad382cb99a5387e4678cb1df6a5cab792 | |
parent | b8ae8869f9e5d7e92bf8148887fc23662649149a (diff) | |
download | scintilla-mirror-c09ea9018b0ccf2d3909715071184fcb5852c649.tar.gz |
Bug [#2149]. Enable windowed IME on Wayland by setting as transient for main.
-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; |