diff options
Diffstat (limited to 'gtk')
| -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; | 
