From 716d738cc0a060a76d0dbe0b496f3adc89be3132 Mon Sep 17 00:00:00 2001 From: Hugo Pereira Da Costa Date: Thu, 17 Dec 2015 15:27:06 +0100 Subject: [PATCH] - better handling of custom property for isMenuTitle - added hasAlteredBackground property to track scrollbar background - properly render background behind scrollbars in widget whose background has been altered. fixed --- kstyle/breezepropertynames.cpp | 1 + kstyle/breezepropertynames.h | 2 +- kstyle/breezestyle.cpp | 41 ++++++++++++++++++++++++++++++++-- kstyle/breezestyle.h | 3 +++ 4 files changed, 44 insertions(+), 3 deletions(-) diff --git a/kstyle/breezepropertynames.cpp b/kstyle/breezepropertynames.cpp index 3bf18ecc..2c1ccb8d 100644 --- a/kstyle/breezepropertynames.cpp +++ b/kstyle/breezepropertynames.cpp @@ -30,5 +30,6 @@ namespace Breeze const char PropertyNames::sidePanelView[] = "_kde_side_panel_view"; const char PropertyNames::toolButtonAlignment[] = "_kde_toolButton_alignment"; const char PropertyNames::menuTitle[] = "_breeze_toolButton_menutitle"; + const char PropertyNames::alteredBackground[] = "_breeze_altered_background"; } diff --git a/kstyle/breezepropertynames.h b/kstyle/breezepropertynames.h index 42444b90..94a04085 100644 --- a/kstyle/breezepropertynames.h +++ b/kstyle/breezepropertynames.h @@ -26,7 +26,6 @@ namespace Breeze struct PropertyNames { - static const char noAnimations[]; static const char noWindowGrab[]; static const char netWMForceShadow[]; @@ -34,6 +33,7 @@ namespace Breeze static const char sidePanelView[]; static const char toolButtonAlignment[]; static const char menuTitle[]; + static const char alteredBackground[]; }; } diff --git a/kstyle/breezestyle.cpp b/kstyle/breezestyle.cpp index dfb22e7c..9d145d5b 100644 --- a/kstyle/breezestyle.cpp +++ b/kstyle/breezestyle.cpp @@ -1041,8 +1041,15 @@ namespace Breeze painter.setClipRegion( static_cast( event )->region() ); painter.setPen( Qt::NoPen ); - painter.setBrush( viewport->palette().color( viewport->backgroundRole() ) ); + // decide background color + const QPalette::ColorRole role( viewport->backgroundRole() ); + QColor background; + if( role == QPalette::Window && hasAlteredBackground( viewport ) ) background = _helper->frameBackgroundColor( viewport->palette() ); + else background = viewport->palette().color( role ); + painter.setBrush( background ); + + // render foreach( auto* child, children ) { painter.drawRect( child->geometry() ); } @@ -6816,8 +6823,13 @@ namespace Breeze //____________________________________________________________________ bool Style::isMenuTitle( const QWidget* widget ) const { + + // check widget if( !widget ) return false; - if( widget->property( PropertyNames::menuTitle ).toBool() ) return true; + + // check property + const QVariant property( widget->property( PropertyNames::menuTitle ) ); + if( property.isValid() ) return property.toBool(); // detect menu toolbuttons QWidget* parent = widget->parentWidget(); @@ -6832,8 +6844,33 @@ namespace Breeze } + const_cast(widget)->setProperty( PropertyNames::menuTitle, false ); return false; } + //____________________________________________________________________ + bool Style::hasAlteredBackground( const QWidget* widget ) const + { + + // check widget + if( !widget ) return false; + + // check property + const QVariant property( widget->property( PropertyNames::alteredBackground ) ); + if( property.isValid() ) return property.toBool(); + + // check if widget is of relevant type + bool hasAlteredBackground( false ); + if( const QGroupBox* groupBox = qobject_cast( widget ) ) hasAlteredBackground = !groupBox->isFlat(); + else if( const QTabWidget* tabWidget = qobject_cast( widget ) ) hasAlteredBackground = !tabWidget->documentMode(); + else if( qobject_cast( widget ) ) hasAlteredBackground = true; + else if( StyleConfigData::dockWidgetDrawFrame() && qobject_cast( widget ) ) hasAlteredBackground = true; + + if( widget->parentWidget() && !hasAlteredBackground ) hasAlteredBackground = this->hasAlteredBackground( widget->parentWidget() ); + const_cast(widget)->setProperty( PropertyNames::alteredBackground, hasAlteredBackground ); + return hasAlteredBackground; + + } + } diff --git a/kstyle/breezestyle.h b/kstyle/breezestyle.h index 76c8a3a0..701d57cd 100644 --- a/kstyle/breezestyle.h +++ b/kstyle/breezestyle.h @@ -457,6 +457,9 @@ namespace Breeze //* return true if passed widget is a menu title (KMenu::addTitle) bool isMenuTitle( const QWidget* ) const; + //* return true if passed widget is a menu title (KMenu::addTitle) + bool hasAlteredBackground( const QWidget* ) const; + private: //*@name scrollbar button types (for addLine and subLine )