diff --git a/kstyle/breezestyle.cpp b/kstyle/breezestyle.cpp index dd78ce67..051e6f7c 100644 --- a/kstyle/breezestyle.cpp +++ b/kstyle/breezestyle.cpp @@ -272,6 +272,7 @@ namespace Breeze } else if( qobject_cast( widget ) ) { widget->setAutoFillBackground( false ); + addEventFilter( widget ); } else if( qobject_cast( widget ) ) { @@ -877,8 +878,8 @@ namespace Breeze bool Style::eventFilter( QObject *object, QEvent *event ) { - // dock widgets if( QDockWidget* dockWidget = qobject_cast( object ) ) { return eventFilterDockWidget( dockWidget, event ); } + else if( QMdiSubWindow* subWindow = qobject_cast( object ) ) { return eventFilterMdiSubWindow( subWindow, event ); } // cast to QWidget QWidget *widget = static_cast( object ); @@ -908,6 +909,41 @@ namespace Breeze } + //____________________________________________________________________________ + bool Style::eventFilterMdiSubWindow( QMdiSubWindow* subWindow, QEvent* event ) + { + + if( event->type() == QEvent::Paint ) + { + QPainter painter( subWindow ); + QPaintEvent* paintEvent( static_cast( event ) ); + painter.setClipRegion( paintEvent->region() ); + + const QRect rect( subWindow->rect() ); + const QColor background( subWindow->palette().color( QPalette::Window ) ); + + if( subWindow->isMaximized() ) + { + + // full painting + painter.setPen( Qt::NoPen ); + painter.setBrush( background ); + painter.drawRect( rect ); + + } else { + + // framed painting + _helper->renderMenuFrame( &painter, rect, background, QColor() ); + + } + + } + + // continue with normal painting + return false; + + } + //_________________________________________________________ bool Style::eventFilterComboBoxContainer( QWidget* widget, QEvent* event ) { @@ -2386,9 +2422,9 @@ namespace Breeze const State state( option->state ); const bool selected( state & State_Selected ); - const QColor background( palette.color( QPalette::Window ) ); + // render frame outline const QColor outline( _helper->frameOutlineColor( palette, false, selected ) ); - _helper->renderMenuFrame( painter, rect, background, outline ); + _helper->renderMenuFrame( painter, rect, QColor(), outline ); return true; diff --git a/kstyle/breezestyle.h b/kstyle/breezestyle.h index c127fa47..60a1eae0 100644 --- a/kstyle/breezestyle.h +++ b/kstyle/breezestyle.h @@ -30,6 +30,7 @@ #include #include #include +#include #include #include #include @@ -137,8 +138,9 @@ namespace Breeze //@{ virtual bool eventFilter(QObject *, QEvent *); - bool eventFilterDockWidget( QDockWidget*, QEvent* ); bool eventFilterComboBoxContainer( QWidget*, QEvent* ); + bool eventFilterDockWidget( QDockWidget*, QEvent* ); + bool eventFilterMdiSubWindow( QMdiSubWindow*, QEvent* ); //! install event filter to object, in a unique way void addEventFilter( QObject* object )