Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Williams2015-09-21 14:03:09 +0000
committerAlexander Kurtakov2015-09-23 07:21:05 +0000
commit81b32128f07db650bc1cc9e0cc9f1272b6fa65f6 (patch)
tree635bf5500e5bb4ddc377b2eef4688a1a943681d7
parent741a0c6c0568275cf69c249daf4041f8e8e2a19b (diff)
downloadeclipse.platform.swt-81b32128f07db650bc1cc9e0cc9f1272b6fa65f6.tar.gz
eclipse.platform.swt-81b32128f07db650bc1cc9e0cc9f1272b6fa65f6.tar.xz
eclipse.platform.swt-81b32128f07db650bc1cc9e0cc9f1272b6fa65f6.zip
Bug 392786: need to check senders ofOS.gdk_window_set_back_pixmap
This patch introduces version guards around Gtk2 code that has no Gtk3 API. In cases of Gtk3, the gdk_window_set_back_pixmap() is replaced with a call to gdk_window_set_background_pattern(). In cases where these replacements were made, the pattern/pixmap being set was null. This behaviour has not changed on Gtk3. Tested on Gtk3.16.6 and Gtk2.24 using Eclipse Neon M1. AllNonBrowser tests pass in Gtk2 and Gtk3. Change-Id: Ie316a3a360ea3f9481df39e0253ffb208f993de8 Signed-off-by: Eric Williams <ericwill@redhat.com>
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Composite.java8
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Control.java6
2 files changed, 12 insertions, 2 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Composite.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Composite.java
index f45c716ef3..90ba7ae91d 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Composite.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Composite.java
@@ -831,7 +831,13 @@ long /*int*/ gtk_realize (long /*int*/ widget) {
long /*int*/ result = super.gtk_realize (widget);
if ((style & SWT.NO_BACKGROUND) != 0) {
long /*int*/ window = gtk_widget_get_window (paintHandle ());
- if (window != 0) OS.gdk_window_set_back_pixmap (window, 0, false);
+ if (window != 0) {
+ if (OS.GTK3) {
+ OS.gdk_window_set_background_pattern(window, 0);
+ } else {
+ OS.gdk_window_set_back_pixmap (window, 0, false);
+ }
+ }
}
if (socketHandle != 0) {
embeddedHandle = OS.gtk_socket_get_id (socketHandle);
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 47b1002a28..15ed4a77db 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
@@ -4775,7 +4775,11 @@ public void setRedraw (boolean redraw) {
OS.GDK_BUTTON_MOTION_MASK | OS.GDK_BUTTON1_MOTION_MASK |
OS.GDK_BUTTON2_MOTION_MASK | OS.GDK_BUTTON3_MOTION_MASK;
OS.gdk_window_set_events (window, OS.gdk_window_get_events (window) & ~mouseMask);
- OS.gdk_window_set_back_pixmap (redrawWindow, 0, false);
+ if (OS.GTK3) {
+ OS.gdk_window_set_background_pattern(redrawWindow, 0);
+ } else {
+ OS.gdk_window_set_back_pixmap (redrawWindow, 0, false);
+ }
OS.gdk_window_show (redrawWindow);
}
}

Back to the top