From a3b3545cabf1c52ce6c0a065dc415dc6fe97bf28 Mon Sep 17 00:00:00 2001 From: Eike Hein Date: Wed, 13 Feb 2013 12:59:55 +0100 Subject: [PATCH] Port sidebar delegate to KColorScheme. Certain KDE color schemes have Window Background and View Text not contrasting, which causes invisible icon labels when using QPalette::Text on QPalette::Base. An example is the default color scheme in openSUSE 12.3. Thanks to Will Stephenson for noticing. CCMAIL:wstephenson@kde.org It turns out that the Places sidebar in Dolphin suffers from the same bug, so a similar change should be done there. Frank? CCMAIL:frank78ac@googlemail.com --- ui/sidebar.cpp | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/ui/sidebar.cpp b/ui/sidebar.cpp index dbf66a9de..a73779d7e 100644 --- a/ui/sidebar.cpp +++ b/ui/sidebar.cpp @@ -29,6 +29,7 @@ #include #include #include +#include #include "settings.h" @@ -107,27 +108,32 @@ void SidebarDelegate::paint( QPainter *painter, const QStyleOptionViewItem &opti QColor foreColor; bool disabled = false; bool hover = false; + if ( !( option.state & QStyle::State_Enabled ) ) { - backBrush = option.palette.brush( QPalette::Disabled, QPalette::Base ); - foreColor = option.palette.color( QPalette::Disabled, QPalette::Text ); + KColorScheme colorScheme( QPalette::Disabled, KColorScheme::Window ); + backBrush = colorScheme.background(); + foreColor = colorScheme.foreground().color(); disabled = true; } else if ( option.state & ( QStyle::State_HasFocus | QStyle::State_Selected ) ) { - backBrush = option.palette.brush( QPalette::Highlight ); - foreColor = option.palette.color( QPalette::HighlightedText ); + KColorScheme colorScheme( option.palette.currentColorGroup(), KColorScheme::Selection ); + backBrush = colorScheme.background(); + foreColor = colorScheme.foreground().color(); } else if ( option.state & QStyle::State_MouseOver ) { - backBrush = option.palette.color( QPalette::Highlight ).light( 115 ); - foreColor = option.palette.color( QPalette::HighlightedText ); + KColorScheme colorScheme( option.palette.currentColorGroup(), KColorScheme::Selection ); + backBrush = colorScheme.background().color().light( 115 ); + foreColor = colorScheme.foreground().color(); hover = true; } else /*if ( option.state & QStyle::State_Enabled )*/ { - backBrush = option.palette.brush( QPalette::Base ); - foreColor = option.palette.color( QPalette::Text ); + KColorScheme colorScheme( option.palette.currentColorGroup(), KColorScheme::Window ); + backBrush = colorScheme.background(); + foreColor = colorScheme.foreground().color(); } QStyle *style = QApplication::style(); QStyleOptionViewItemV4 opt( option );