diff options
author | Markus Keller <markus_keller@ch.ibm.com> | 2012-10-22 18:53:59 +0200 |
---|---|---|
committer | Markus Keller <markus_keller@ch.ibm.com> | 2012-10-22 18:53:59 +0200 |
commit | 4d7c12dd6a4904cb398f87337e928a23b40052cc (patch) | |
tree | 742ab39bc7dc2c28e73708595c7bbb8a9a36ee8a /bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Widget.java | |
parent | 696a1204ff8dba220d9de477698bf409a32468b6 (diff) | |
download | eclipse.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.java | 23 |
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); } |