summaryrefslogtreecommitdiffstats
path: root/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Widget.java
diff options
context:
space:
mode:
authorMarkus Keller <markus_keller@ch.ibm.com>2012-10-22 18:53:59 +0200
committerMarkus Keller <markus_keller@ch.ibm.com>2012-10-22 18:53:59 +0200
commit4d7c12dd6a4904cb398f87337e928a23b40052cc (patch)
tree742ab39bc7dc2c28e73708595c7bbb8a9a36ee8a /bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Widget.java
parent696a1204ff8dba220d9de477698bf409a32468b6 (diff)
downloadeclipse.platform.swt-4d7c12dd6a4904cb398f87337e928a23b40052cc.tar.gz
eclipse.platform.swt-4d7c12dd6a4904cb398f87337e928a23b40052cc.tar.xz
eclipse.platform.swt-4d7c12dd6a4904cb398f87337e928a23b40052cc.zip
Bug 361373: StyledCellLabelProvider on Ubuntu: Wrong text color for selected, unfocused table and tree items
Diffstat (limited to 'bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Widget.java')
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Widget.java23
1 files changed, 23 insertions, 0 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Widget.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Widget.java
index 510e85de66..a59942af31 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Widget.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Widget.java
@@ -1556,17 +1556,35 @@ public void setData (String key, Object value) {
}
void setForegroundColor (long /*int*/ handle, GdkColor color) {
+ setForegroundColor (handle, color, true);
+}
+
+void setForegroundColor (long /*int*/ handle, GdkColor color, boolean setStateActive) {
+ /*
+ * Feature in GTK. When the widget doesn't have focus, then
+ * gtk_default_draw_flat_box () changes the background color state_type
+ * to GTK_STATE_ACTIVE. Widgets whose background is drawn using
+ * gtk_paint_flat_box or gtk_default_draw_flat_box have to pass false for
+ * setStateActive.
+ */
long /*int*/ style = OS.gtk_widget_get_modifier_style (handle);
OS.gtk_rc_style_set_fg (style, OS.GTK_STATE_NORMAL, color);
+ if (setStateActive) OS.gtk_rc_style_set_fg (style, OS.GTK_STATE_ACTIVE, color);
OS.gtk_rc_style_set_fg (style, OS.GTK_STATE_PRELIGHT, color);
int flags = OS.gtk_rc_style_get_color_flags (style, OS.GTK_STATE_NORMAL);
flags = (color == null) ? flags & ~OS.GTK_RC_FG: flags | OS.GTK_RC_FG;
OS.gtk_rc_style_set_color_flags (style, OS.GTK_STATE_NORMAL, flags);
+ if (setStateActive) {
+ flags = OS.gtk_rc_style_get_color_flags (style, OS.GTK_STATE_ACTIVE);
+ flags = (color == null) ? flags & ~OS.GTK_RC_FG: flags | OS.GTK_RC_FG;
+ OS.gtk_rc_style_set_color_flags (style, OS.GTK_STATE_ACTIVE, flags);
+ }
flags = OS.gtk_rc_style_get_color_flags (style, OS.GTK_STATE_PRELIGHT);
flags = (color == null) ? flags & ~OS.GTK_RC_FG: flags | OS.GTK_RC_FG;
OS.gtk_rc_style_set_color_flags (style, OS.GTK_STATE_PRELIGHT, flags);
OS.gtk_rc_style_set_text (style, OS.GTK_STATE_NORMAL, color);
+ if (setStateActive) OS.gtk_rc_style_set_text (style, OS.GTK_STATE_ACTIVE, color);
OS.gtk_rc_style_set_text (style, OS.GTK_STATE_PRELIGHT, color);
flags = OS.gtk_rc_style_get_color_flags (style, OS.GTK_STATE_NORMAL);
flags = (color == null) ? flags & ~OS.GTK_RC_TEXT: flags | OS.GTK_RC_TEXT;
@@ -1574,6 +1592,11 @@ void setForegroundColor (long /*int*/ handle, GdkColor color) {
flags = OS.gtk_rc_style_get_color_flags (style, OS.GTK_STATE_PRELIGHT);
flags = (color == null) ? flags & ~OS.GTK_RC_TEXT: flags | OS.GTK_RC_TEXT;
OS.gtk_rc_style_set_color_flags (style, OS.GTK_STATE_PRELIGHT, flags);
+ if (setStateActive) {
+ flags = OS.gtk_rc_style_get_color_flags (style, OS.GTK_STATE_ACTIVE);
+ flags = (color == null) ? flags & ~OS.GTK_RC_TEXT: flags | OS.GTK_RC_TEXT;
+ OS.gtk_rc_style_set_color_flags (style, OS.GTK_STATE_ACTIVE, flags);
+ }
modifyStyle (handle, style);
}