Bug 553099 - [GTK3] StyledText becomes black with Yaru theme (default on Ubuntu)

Tested on Ubuntu 18.10 using 'Bug548286_DumpSystemColors.sh', the only changes are:
	Yaru, COLOR_TEXT_DISABLED_BACKGROUND
	ARGB:00000000 -> ARGB:FFF5F6F7

	Yaru-dark, COLOR_TEXT_DISABLED_BACKGROUND
	ARGB:00000000 -> ARGB:FF353535

For reference:
/usr/share/themes/Yaru/gtk-3.0/gtk.css Line 296:
	entry:backdrop:disabled {
		background-color: transparent;
		border-color: rgba(186, 192, 199, 0.7);
		box-shadow: none;
		color: #c2c8ce; }

Change-Id: I59e4e8d2dc4b4d11531f2779ed17d00ec836fd82
Signed-off-by: Alexandr Miloslavskiy <alexandr.miloslavskiy@syntevo.com>
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Display.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Display.java
index 719ed72..bb54220 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Display.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Display.java
@@ -3201,14 +3201,23 @@
 }
 
 void initializeSystemColorsDisabled() {
+	/*
+	 * 'Yaru' theme on Ubuntu 18.10 defines background color for
+	 * 'entry:backdrop:disabled' as 'transparent', so parent window's color
+	 * will be used. However, SWT doesn't quite expect transparent colors.
+	 * The workaround is to use a temporary window as parent. GTK will blend
+	 * colors and return non-transparent result.
+	 */
+	long window = GTK.gtk_window_new (GTK.GTK_WINDOW_TOPLEVEL);
 	long entry = GTK.gtk_entry_new ();
-	OS.g_object_ref_sink(entry);
+	GTK.gtk_container_add (window, entry);
+
 	long context = GTK.gtk_widget_get_style_context (entry);
 
 	COLOR_WIDGET_DISABLED_FOREGROUND_RGBA = styleContextGetColor (context, GTK.GTK_STATE_FLAG_INSENSITIVE);
 	COLOR_TEXT_DISABLED_BACKGROUND_RGBA = styleContextEstimateBackgroundColor (context, GTK.GTK_STATE_FLAG_INSENSITIVE);
 
-	OS.g_object_unref(entry);
+	GTK.gtk_widget_destroy (window);
 }
 
 GdkRGBA styleContextGetColor(long context, int flag) {
diff --git a/tests/org.eclipse.swt.tests/ManualTests/org/eclipse/swt/tests/manual/Bug548286_DumpSystemColors.java b/tests/org.eclipse.swt.tests/ManualTests/org/eclipse/swt/tests/manual/Bug548286_DumpSystemColors.java
index c75bab8..396fdea 100644
--- a/tests/org.eclipse.swt.tests/ManualTests/org/eclipse/swt/tests/manual/Bug548286_DumpSystemColors.java
+++ b/tests/org.eclipse.swt.tests/ManualTests/org/eclipse/swt/tests/manual/Bug548286_DumpSystemColors.java
@@ -52,6 +52,8 @@
 		hmap.put(SWT.COLOR_TITLE_INACTIVE_BACKGROUND, "COLOR_TITLE_INACTIVE_BACKGROUND");
 		hmap.put(SWT.COLOR_TITLE_INACTIVE_BACKGROUND_GRADIENT, "COLOR_TITLE_INACTIVE_BACKGROUND_GRADIENT");
 		hmap.put(SWT.COLOR_LINK_FOREGROUND, "COLOR_LINK_FOREGROUND");
+		hmap.put(SWT.COLOR_WIDGET_DISABLED_FOREGROUND, "COLOR_WIDGET_DISABLED_FOREGROUND");
+		hmap.put(SWT.COLOR_TEXT_DISABLED_BACKGROUND, "COLOR_TEXT_DISABLED_BACKGROUND");
 
 		// Printing IDs instead of names gives more compact output
 		boolean printIDs = true;