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