055eeb4
From 716d35d30c1f639a04515188fedd89bb3aaf12bc Mon Sep 17 00:00:00 2001
055eeb4
From: Sami Wagiaalla
055eeb4
Date: Mon, 15 Sep 2014 11:51:44 -0400
055eeb4
Subject: Bug 444143 - [GTK3] Reset selected background color in Table
055eeb4
055eeb4
When setBackgroundColor is called for Table it results in
055eeb4
a call to gtk_widget_override_background_color with the flag
055eeb4
GTK_STATE_FLAG_NORMAL which overrides the color for selected
055eeb4
items' background despite the flag. Therefore the selected item
055eeb4
color must be reset to the default.
055eeb4
055eeb4
Change-Id: Iab3cad4e01cf87cca04e536fdea8991c818d0336
055eeb4
Signed-off-by: Sami Wagiaalla <swagiaal@redhat.com>
055eeb4
055eeb4
diff --git a/eclipse.platform.swt/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Table.java b/eclipse.platform.swt/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Table.java
055eeb4
index 96493c6..2558fd1 100644
055eeb4
--- a/eclipse.platform.swt/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Table.java	
055eeb4
+++ b/eclipse.platform.swt/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Table.java	
055eeb4
@@ -11,12 +11,28 @@
055eeb4
 package org.eclipse.swt.widgets;
055eeb4
 
055eeb4
 
055eeb4
-import org.eclipse.swt.*;
055eeb4
-import org.eclipse.swt.internal.*;
055eeb4
-import org.eclipse.swt.internal.cairo.*;
055eeb4
-import org.eclipse.swt.internal.gtk.*;
055eeb4
-import org.eclipse.swt.graphics.*;
055eeb4
-import org.eclipse.swt.events.*;
055eeb4
+import org.eclipse.swt.SWT;
055eeb4
+import org.eclipse.swt.SWTException;
055eeb4
+import org.eclipse.swt.events.SelectionEvent;
055eeb4
+import org.eclipse.swt.events.SelectionListener;
055eeb4
+import org.eclipse.swt.graphics.Color;
055eeb4
+import org.eclipse.swt.graphics.Font;
055eeb4
+import org.eclipse.swt.graphics.GC;
055eeb4
+import org.eclipse.swt.graphics.Image;
055eeb4
+import org.eclipse.swt.graphics.Point;
055eeb4
+import org.eclipse.swt.graphics.Rectangle;
055eeb4
+import org.eclipse.swt.internal.Converter;
055eeb4
+import org.eclipse.swt.internal.ImageList;
055eeb4
+import org.eclipse.swt.internal.cairo.Cairo;
055eeb4
+import org.eclipse.swt.internal.gtk.GdkColor;
055eeb4
+import org.eclipse.swt.internal.gtk.GdkEventButton;
055eeb4
+import org.eclipse.swt.internal.gtk.GdkEventExpose;
055eeb4
+import org.eclipse.swt.internal.gtk.GdkRGBA;
055eeb4
+import org.eclipse.swt.internal.gtk.GdkRectangle;
055eeb4
+import org.eclipse.swt.internal.gtk.GtkAllocation;
055eeb4
+import org.eclipse.swt.internal.gtk.GtkCellRendererClass;
055eeb4
+import org.eclipse.swt.internal.gtk.GtkRequisition;
055eeb4
+import org.eclipse.swt.internal.gtk.OS;
055eeb4
 
055eeb4
 /** 
055eeb4
  * Instances of this class implement a selectable user interface
055eeb4
@@ -3006,6 +3022,17 @@ void setBackgroundColor (GdkColor color) {
055eeb4
 	super.setBackgroundColor (color);
055eeb4
 	if (!OS.GTK3) {
055eeb4
 		OS.gtk_widget_modify_base (handle, 0, color);
055eeb4
+	} else {
055eeb4
+		// Setting the background color overrides the selected background color
055eeb4
+		// so we have to reset it the default.
055eeb4
+		GdkColor defaultColor = getDisplay().COLOR_LIST_SELECTION;
055eeb4
+		GdkRGBA selectedBackground = new GdkRGBA ();
055eeb4
+		selectedBackground.alpha = 1;
055eeb4
+		selectedBackground.red = (defaultColor.red & 0xFFFF) / (float)0xFFFF;
055eeb4
+		selectedBackground.green = (defaultColor.green & 0xFFFF) / (float)0xFFFF;
055eeb4
+		selectedBackground.blue = (defaultColor.blue & 0xFFFF) / (float)0xFFFF;
055eeb4
+
055eeb4
+		OS.gtk_widget_override_background_color (handle, OS.GTK_STATE_FLAG_SELECTED, selectedBackground);
055eeb4
 	}
055eeb4
 }
055eeb4
 
055eeb4
diff --git a/eclipse.platform.swt/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Tree.java b/eclipse.platform.swt/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Tree.java
055eeb4
index 2a40869..4603cff 100644
055eeb4
--- a/eclipse.platform.swt/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Tree.java	
055eeb4
+++ b/eclipse.platform.swt/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Tree.java	
055eeb4
@@ -3038,6 +3038,17 @@ void setBackgroundColor (GdkColor color) {
055eeb4
 	super.setBackgroundColor (color);
055eeb4
 	if (!OS.GTK3) {
055eeb4
 		OS.gtk_widget_modify_base (handle, 0, color);
055eeb4
+	} else {
055eeb4
+		// Setting the background color overrides the selected background color
055eeb4
+		// so we have to reset it the default.
055eeb4
+		GdkColor defaultColor = getDisplay().COLOR_LIST_SELECTION;
055eeb4
+		GdkRGBA selectedBackground = new GdkRGBA ();
055eeb4
+		selectedBackground.alpha = 1;
055eeb4
+		selectedBackground.red = (defaultColor.red & 0xFFFF) / (float)0xFFFF;
055eeb4
+		selectedBackground.green = (defaultColor.green & 0xFFFF) / (float)0xFFFF;
055eeb4
+		selectedBackground.blue = (defaultColor.blue & 0xFFFF) / (float)0xFFFF;
055eeb4
+
055eeb4
+		OS.gtk_widget_override_background_color (handle, OS.GTK_STATE_FLAG_SELECTED, selectedBackground);
055eeb4
 	}
055eeb4
 }
055eeb4
 
055eeb4
-- 
055eeb4
cgit v0.10.1-9-gd18e
055eeb4