diff --git a/examples/gallery/main.cpp b/examples/gallery/main.cpp index 611c620f..b1770191 100644 --- a/examples/gallery/main.cpp +++ b/examples/gallery/main.cpp @@ -62,6 +62,8 @@ namespace Drawer( QQuickItem* parent = nullptr ) : QskDrawer( parent ) { + setOverlay( false ); + auto box = new QskLinearBox( Qt::Vertical, this ); box->setSection( QskAspect::Header ); @@ -261,11 +263,11 @@ namespace connect( header, &Header::enabledToggled, tabView, &TabView::setPagesEnabled ); - auto drawer = new Drawer( this ); + auto drawer = new Drawer( tabView ); drawer->setEdge( Qt::RightEdge ); connect( header, &Header::drawerRequested, - drawer, &QskPopup::open ); + drawer, &QskPopup::toggle ); setHeader( header ); setBody( tabView ); diff --git a/playground/drawer/main.cpp b/playground/drawer/main.cpp index e5261f24..2f8c85c1 100644 --- a/playground/drawer/main.cpp +++ b/playground/drawer/main.cpp @@ -28,7 +28,7 @@ namespace #endif setEdge( edge ); - setOverlay( true ); + setOverlay( false ); auto content = new QskControl( this ); content->setObjectName( "Content" ); diff --git a/src/controls/QskControl.cpp b/src/controls/QskControl.cpp index a293882b..9b3d5113 100644 --- a/src/controls/QskControl.cpp +++ b/src/controls/QskControl.cpp @@ -915,10 +915,16 @@ void QskControl::itemChange( QQuickItem::ItemChange change, break; } case QQuickItem::ItemChildAddedChange: + case QQuickItem::ItemChildRemovedChange: { - if ( autoLayoutChildren() && qskIsAdjustableByLayout( value.item ) ) - polish(); + if ( autoLayoutChildren() ) + { + if ( qskIsVisibleToLayout( value.item ) ) + resetImplicitSize(); + if ( qskIsAdjustableByLayout( value.item ) ) + polish(); + } break; } case QQuickItem::ItemActiveFocusHasChanged: diff --git a/src/controls/QskDrawer.cpp b/src/controls/QskDrawer.cpp index 8965337d..c29c1c12 100644 --- a/src/controls/QskDrawer.cpp +++ b/src/controls/QskDrawer.cpp @@ -218,7 +218,6 @@ QskDrawer::QskDrawer( QQuickItem* parentItem ) setZ( 1 ); #endif - setOverlay( true ); setPolishOnResize( true ); setPopupFlag( PopupFlag::CloseOnPressOutside, true ); @@ -399,6 +398,17 @@ void QskDrawer::itemChange( QQuickItem::ItemChange change, switch( static_cast< int >( change ) ) { + case QQuickItem::ItemChildAddedChange: + case QQuickItem::ItemChildRemovedChange: + { + if ( qskIsVisibleToLayout( value.item ) ) + resetImplicitSize(); + + if ( qskIsAdjustableByLayout( value.item ) ) + polish(); + + break; + } case QQuickItem::ItemParentHasChanged: { if ( parentItem() ) diff --git a/src/controls/QskPopup.cpp b/src/controls/QskPopup.cpp index c3292083..50714836 100644 --- a/src/controls/QskPopup.cpp +++ b/src/controls/QskPopup.cpp @@ -196,6 +196,11 @@ void QskPopup::close() setOpen( false ); } +void QskPopup::toggle() +{ + setOpen( !isOpen() ); +} + void QskPopup::setOpen( bool on ) { if ( on == isOpen() ) diff --git a/src/controls/QskPopup.h b/src/controls/QskPopup.h index 8beaed80..b2c99c7d 100644 --- a/src/controls/QskPopup.h +++ b/src/controls/QskPopup.h @@ -72,6 +72,8 @@ class QSK_EXPORT QskPopup : public QskControl public Q_SLOTS: void open(); void close(); + void toggle(); + void setOpen( bool ); Q_SIGNALS: