Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Williams2017-07-06 19:45:30 +0000
committerEric Williams2017-07-06 20:52:23 +0000
commit4c26a2a551b3e1ab2cd1b7ee5fb43d4b6dfd5c43 (patch)
tree6d6fbb0777e79c562f0352903664be7b614f966c /bundles/org.eclipse.swt/Eclipse SWT/gtk/org
parent21604b776e61752285a33d08fe8affd26ec9c2bd (diff)
downloadeclipse.platform.swt-4c26a2a551b3e1ab2cd1b7ee5fb43d4b6dfd5c43.tar.gz
eclipse.platform.swt-4c26a2a551b3e1ab2cd1b7ee5fb43d4b6dfd5c43.tar.xz
eclipse.platform.swt-4c26a2a551b3e1ab2cd1b7ee5fb43d4b6dfd5c43.zip
Bug 519321: [GTK3] Preferences window sometimes has white background
In Control.setBackgroundGdkRGBA(): if the incoming GdkRGBA is null, then the background color needs to be reset to COLOR_WIDGET_BACKGROUND. On GTK3.16+ there is an automatic check with GTK CSS to set incoming GdkRGBA's as COLOR_WIDGET_BACKGROUND if they are null. Setting a null GdkRGBA using GtkStyleContext machinery resets the current color to its previous value, which now (after bug 477950) could sometimes be transparent. This is what was causing the bug. The fix is to set incoming GdkRGBA's that are null to COLOR_WIDGET_BACKGROUND. Of course not every widget uses COLOR_WIDGET_BACKGROUND as the default, so it's been overriden in those places. This ensures GTK3.14 and below still works correctly when setBackground(null) is called. Change-Id: Ib635be9ed61edf8c8e602fe3e27dd8c418210b12 Signed-off-by: Eric Williams <ericwill@redhat.com>
Diffstat (limited to 'bundles/org.eclipse.swt/Eclipse SWT/gtk/org')
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Combo.java5
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Control.java7
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/DateTime.java4
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/List.java5
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Spinner.java5
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Table.java5
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Text.java5
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Tree.java5
8 files changed, 41 insertions, 0 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Combo.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Combo.java
index c02166e33c..6927e6f490 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Combo.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Combo.java
@@ -538,6 +538,11 @@ public void cut () {
}
@Override
+GdkRGBA defaultBackground () {
+ return display.getSystemColor(SWT.COLOR_LIST_BACKGROUND).handleRGBA;
+}
+
+@Override
void deregister () {
super.deregister ();
if (buttonHandle != 0) display.removeWidget (buttonHandle);
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 6812617ec9..1c5652c8e3 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
@@ -135,6 +135,11 @@ Font defaultFont () {
return display.getSystemFont ();
}
+GdkRGBA defaultBackground () {
+ assert OS.GTK3 : "GTK3 code was run by GTK2";
+ return display.getSystemColor(SWT.COLOR_WIDGET_BACKGROUND).handleRGBA;
+}
+
@Override
void deregister () {
super.deregister ();
@@ -4556,6 +4561,8 @@ void setBackgroundGdkRGBA (long /*int*/ handle, GdkRGBA rgba) {
Control control = findBackgroundControl();
if (control == null) control = this;
rgba = control == this ? null : control.getBackgroundGdkRGBA();
+ } else {
+ rgba = defaultBackground ();
}
} else {
backgroundAlpha = (int) (rgba.alpha * 255);
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/DateTime.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/DateTime.java
index 6f44df521c..b71a106de6 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/DateTime.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/DateTime.java
@@ -1864,6 +1864,10 @@ void register () {
if (textEntryHandle != 0) display.addWidget (textEntryHandle, this);
}
+@Override
+GdkRGBA defaultBackground () {
+ return display.getSystemColor(SWT.COLOR_LIST_BACKGROUND).handleRGBA;
+}
@Override
void deregister () {
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/List.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/List.java
index 048656a637..bdbf74231f 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/List.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/List.java
@@ -283,6 +283,11 @@ Point computeSizeInPixels (int wHint, int hHint, boolean changed) {
}
@Override
+GdkRGBA defaultBackground () {
+ return display.getSystemColor(SWT.COLOR_LIST_BACKGROUND).handleRGBA;
+}
+
+@Override
void deregister() {
super.deregister ();
display.removeWidget (OS.gtk_tree_view_get_selection (handle));
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Spinner.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Spinner.java
index 5c1e98481f..3ca9cf264b 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Spinner.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Spinner.java
@@ -366,6 +366,11 @@ public void cut () {
}
@Override
+GdkRGBA defaultBackground () {
+ return display.getSystemColor(SWT.COLOR_LIST_BACKGROUND).handleRGBA;
+}
+
+@Override
void deregister () {
super.deregister ();
long /*int*/ imContext = imContext ();
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Table.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Table.java
index ef6d0f185c..a30efa44a7 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Table.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Table.java
@@ -900,6 +900,11 @@ int applyThemeBackground () {
}
@Override
+GdkRGBA defaultBackground () {
+ return display.getSystemColor(SWT.COLOR_LIST_BACKGROUND).handleRGBA;
+}
+
+@Override
void deregister () {
super.deregister ();
display.removeWidget (OS.gtk_tree_view_get_selection (handle));
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Text.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Text.java
index bbd8e78e1a..9173a53cf1 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Text.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Text.java
@@ -751,6 +751,11 @@ char [] deprocessText (char [] text, int start, int end) {
}
@Override
+GdkRGBA defaultBackground () {
+ return display.getSystemColor(SWT.COLOR_LIST_BACKGROUND).handleRGBA;
+}
+
+@Override
void deregister () {
super.deregister ();
if (bufferHandle != 0) display.removeWidget (bufferHandle);
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Tree.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Tree.java
index 7de8a27327..602ad3fe5f 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Tree.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Tree.java
@@ -1005,6 +1005,11 @@ void createWidget (int index) {
}
@Override
+GdkRGBA defaultBackground () {
+ return display.getSystemColor(SWT.COLOR_LIST_BACKGROUND).handleRGBA;
+}
+
+@Override
void deregister () {
super.deregister ();
display.removeWidget (OS.gtk_tree_view_get_selection (handle));

Back to the top