diff options
author | Xi Yan | 2019-04-18 15:40:42 +0000 |
---|---|---|
committer | Xi Yan | 2019-04-18 15:40:42 +0000 |
commit | fd5818d4a10a19cf89c2431ac70f15047ca3453e (patch) | |
tree | 5c5de27a80c1da9b4f3cb045823c6823bdb52fe9 | |
parent | 08546b99776a5367212d4e738d60fcf5d96e49af (diff) | |
download | eclipse.platform.swt-fd5818d4a10a19cf89c2431ac70f15047ca3453e.tar.gz eclipse.platform.swt-fd5818d4a10a19cf89c2431ac70f15047ca3453e.tar.xz eclipse.platform.swt-fd5818d4a10a19cf89c2431ac70f15047ca3453e.zip |
Bug 540903 - [GTK4] Adapt to GtkClipboard changes
1) ifdef gdk_display_get_*_clipboard on GTK4
2) Replace gtk_clipboard_clear with gdk_clipboard_set_content(null)
Change-Id: I139b8606f01961c31adc56c08ad35c4abd1fb0bc
Signed-off-by: Xi Yan <xixiyan@redhat.com>
6 files changed, 45 insertions, 2 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/gtk/org/eclipse/swt/dnd/ClipboardProxy.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/gtk/org/eclipse/swt/dnd/ClipboardProxy.java index 197cc62103..5181782bf9 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/gtk/org/eclipse/swt/dnd/ClipboardProxy.java +++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/gtk/org/eclipse/swt/dnd/ClipboardProxy.java @@ -61,10 +61,18 @@ ClipboardProxy(Display display) { void clear (Clipboard owner, int clipboards) { if ((clipboards & DND.CLIPBOARD) != 0 && activeClipboard == owner) { - GTK.gtk_clipboard_clear(Clipboard.GTKCLIPBOARD); + gtk_gdk_clipboard_clear(Clipboard.GTKCLIPBOARD); } if ((clipboards & DND.SELECTION_CLIPBOARD) != 0 && activePrimaryClipboard == owner) { - GTK.gtk_clipboard_clear(Clipboard.GTKPRIMARYCLIPBOARD); + gtk_gdk_clipboard_clear(Clipboard.GTKPRIMARYCLIPBOARD); + } +} + +void gtk_gdk_clipboard_clear(long clipboard) { + if (GTK.GTK4) { + GDK.gdk_clipboard_set_content(clipboard, 0); + } else { + GTK.gtk_clipboard_clear(clipboard); } } 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 36b7018199..fc8e175759 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 @@ -368,6 +368,18 @@ JNIEXPORT void JNICALL GDK_NATIVE(_1gdk_1cairo_1set_1source_1window) } #endif +#ifndef NO__1gdk_1clipboard_1set_1content +JNIEXPORT jlong JNICALL GDK_NATIVE(_1gdk_1clipboard_1set_1content) + (JNIEnv *env, jclass that, jlong arg0, jlong arg1) +{ + jlong rc = 0; + GDK_NATIVE_ENTER(env, that, _1gdk_1clipboard_1set_1content_FUNC); + rc = (jlong)gdk_clipboard_set_content((GdkClipboard *)arg0, (GdkContentProvider *)arg1); + GDK_NATIVE_EXIT(env, that, _1gdk_1clipboard_1set_1content_FUNC); + return rc; +} +#endif + #ifndef NO__1gdk_1cursor_1new_1for_1display JNIEXPORT jlong JNICALL GDK_NATIVE(_1gdk_1cursor_1new_1for_1display) (JNIEnv *env, jclass that, jlong arg0, jlong arg1) diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os.h b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os.h index 99b1e5f6b5..98f86dd750 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os.h +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/library/os.h @@ -424,6 +424,11 @@ #define NO__1gdk_1surface_1invalidate_1region #define NO__1gdk_1event_1get_1surface +// No GdkClipboard on GTK3 +#define NO__1gdk_1clipboard_1set_1content +#define NO__1gdk_1display_1get_1clipboard +#define NO__1gdk_1display_1get_1primary_1clipboard + // No GtkSnapshot on GTK3 #define NO__1gtk_1snapshot_1append_1cairo #define NO__1gtk_1widget_1snapshot_1child 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 2960b9cca8..60c364f933 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 @@ -49,6 +49,7 @@ char * GDK_nativeFunctionNames[] = { "_1gdk_1cairo_1set_1source_1pixbuf", "_1gdk_1cairo_1set_1source_1rgba", "_1gdk_1cairo_1set_1source_1window", + "_1gdk_1clipboard_1set_1content", "_1gdk_1cursor_1new_1for_1display", "_1gdk_1cursor_1new_1from_1name__J_3B", "_1gdk_1cursor_1new_1from_1name___3BJ", 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 dedce921a3..63a4a35b38 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 @@ -59,6 +59,7 @@ typedef enum { _1gdk_1cairo_1set_1source_1pixbuf_FUNC, _1gdk_1cairo_1set_1source_1rgba_FUNC, _1gdk_1cairo_1set_1source_1window_FUNC, + _1gdk_1clipboard_1set_1content_FUNC, _1gdk_1cursor_1new_1for_1display_FUNC, _1gdk_1cursor_1new_1from_1name__J_3B_FUNC, _1gdk_1cursor_1new_1from_1name___3BJ_FUNC, diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/GDK.java b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/GDK.java index bc48b6dd97..62f8fc2ff8 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/GDK.java +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/gtk/org/eclipse/swt/internal/gtk/GDK.java @@ -775,6 +775,7 @@ public class GDK extends OS { * @param display cast=(GdkDisplay *) */ public static final native long _gdk_display_get_clipboard(long display); + /** [GTK4 only, if-def'd in os.h] */ public static final long gdk_display_get_clipboard(long display) { lock.lock(); try { @@ -787,6 +788,7 @@ public class GDK extends OS { * @param display cast=(GdkDisplay *) */ public static final native long _gdk_display_get_primary_clipboard(long display); + /** [GTK4 only, if-def'd in os.h] */ public static final long gdk_display_get_primary_clipboard(long display) { lock.lock(); try { @@ -1911,6 +1913,20 @@ public class GDK extends OS { } } /** + * @param clipboard cast=(GdkClipboard *) + * @param provider cast=(GdkContentProvider *) + */ + public static final native long _gdk_clipboard_set_content(long clipboard, long provider); + /** [GTK4 only, if-def'd in os.h] */ + public static final long gdk_clipboard_set_content(long clipboard, long provider) { + lock.lock(); + try { + return _gdk_clipboard_set_content(clipboard, provider); + } finally { + lock.unlock(); + } + } + /** * @method flags=dynamic * @param screen cast=(GdkScreen *) * @param monitor_num cast=(gint) |