diff options
author | Eric Williams | 2017-07-06 19:45:30 +0000 |
---|---|---|
committer | Eric Williams | 2017-07-06 20:52:23 +0000 |
commit | 4c26a2a551b3e1ab2cd1b7ee5fb43d4b6dfd5c43 (patch) | |
tree | 6d6fbb0777e79c562f0352903664be7b614f966c /bundles/org.eclipse.swt/Eclipse SWT/gtk/org | |
parent | 21604b776e61752285a33d08fe8affd26ec9c2bd (diff) | |
download | eclipse.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')
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)); |