diff options
5 files changed, 24 insertions, 1 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os.c b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os.c index fc8e175759..1848fb0348 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os.c +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os.c @@ -3653,6 +3653,18 @@ JNIEXPORT jboolean JNICALL GTK_NATIVE(_1GTK_1IS_1CONTAINER) } #endif +#ifndef NO__1GTK_1IS_1IM_1CONTEXT +JNIEXPORT jboolean JNICALL GTK_NATIVE(_1GTK_1IS_1IM_1CONTEXT) + (JNIEnv *env, jclass that, jlong arg0) +{ + jboolean rc = 0; + GTK_NATIVE_ENTER(env, that, _1GTK_1IS_1IM_1CONTEXT_FUNC); + rc = (jboolean)GTK_IS_IM_CONTEXT(arg0); + GTK_NATIVE_EXIT(env, that, _1GTK_1IS_1IM_1CONTEXT_FUNC); + return rc; +} +#endif + #ifndef NO__1GTK_1IS_1LABEL JNIEXPORT jboolean JNICALL GTK_NATIVE(_1GTK_1IS_1LABEL) (JNIEnv *env, jclass that, jlong arg0) diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_stats.c b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_stats.c index 60c364f933..ef46e89be3 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_stats.c +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_stats.c @@ -313,6 +313,7 @@ char * GTK_nativeFunctionNames[] = { "_1GTK_1IS_1CELL_1RENDERER_1TEXT", "_1GTK_1IS_1CELL_1RENDERER_1TOGGLE", "_1GTK_1IS_1CONTAINER", + "_1GTK_1IS_1IM_1CONTEXT", "_1GTK_1IS_1LABEL", "_1GTK_1IS_1MENU_1ITEM", "_1GTK_1IS_1PLUG", diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_stats.h b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_stats.h index 63a4a35b38..7e6d144d0b 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_stats.h +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os_stats.h @@ -311,6 +311,7 @@ typedef enum { _1GTK_1IS_1CELL_1RENDERER_1TEXT_FUNC, _1GTK_1IS_1CELL_1RENDERER_1TOGGLE_FUNC, _1GTK_1IS_1CONTAINER_FUNC, + _1GTK_1IS_1IM_1CONTEXT_FUNC, _1GTK_1IS_1LABEL_FUNC, _1GTK_1IS_1MENU_1ITEM_FUNC, _1GTK_1IS_1PLUG_FUNC, diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/GTK.java b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/GTK.java index 66c9cb1cb6..fa288104ba 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/GTK.java +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/GTK.java @@ -287,6 +287,15 @@ public class GTK extends OS { lock.unlock(); } } + public static final native boolean _GTK_IS_IM_CONTEXT(long obj); + public static final boolean GTK_IS_IM_CONTEXT(long obj) { + lock.lock(); + try { + return _GTK_IS_IM_CONTEXT(obj); + } finally { + lock.unlock(); + } + } public static final native boolean _GTK_IS_SCROLLED_WINDOW(long obj); public static final boolean GTK_IS_SCROLLED_WINDOW(long obj) { lock.lock(); diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Control.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Control.java index 0dda66274d..9e4d812c77 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Control.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Control.java @@ -4620,7 +4620,7 @@ void releaseWidget () { redrawSurface = 0; } else { long imHandle = imHandle (); - if (imHandle != 0) { + if (imHandle != 0 && GTK.GTK_IS_IM_CONTEXT(imHandle)) { GTK.gtk_im_context_reset (imHandle); GTK.gtk_im_context_set_client_window (imHandle, 0); } |