diff --git a/include/FramelessHelper/Quick/framelessquickhelper.h b/include/FramelessHelper/Quick/framelessquickhelper.h index 7016767..e6581dd 100644 --- a/include/FramelessHelper/Quick/framelessquickhelper.h +++ b/include/FramelessHelper/Quick/framelessquickhelper.h @@ -74,7 +74,9 @@ public Q_SLOTS: void setTitleBarItem(QQuickItem *value); void setSystemButton(QQuickItem *item, const QuickGlobal::SystemButtonType buttonType); void setHitTestVisible(QQuickItem *item, const bool visible = true); - void setHitTestVisible(const QRect &rect, const bool visible = true); + void setHitTestVisible_rect(const QRect &rect, const bool visible = true); + void setHitTestVisible_object(QObject *object, const bool visible = true); + void setHitTestVisible_item(QQuickItem *item, const bool visible = true); void showSystemMenu(const QPoint &pos); void windowStartSystemMove2(const QPoint &pos); diff --git a/include/FramelessHelper/Quick/private/framelessquickhelper_p.h b/include/FramelessHelper/Quick/private/framelessquickhelper_p.h index 0ce8dbc..9f32da6 100644 --- a/include/FramelessHelper/Quick/private/framelessquickhelper_p.h +++ b/include/FramelessHelper/Quick/private/framelessquickhelper_p.h @@ -59,6 +59,7 @@ public: void setSystemButton(QQuickItem *item, const QuickGlobal::SystemButtonType buttonType); void setHitTestVisible(QQuickItem *item, const bool visible = true); void setHitTestVisible(const QRect &rect, const bool visible = true); + void setHitTestVisible(QObject *object, const bool visible = true); void showSystemMenu(const QPoint &pos); void windowStartSystemMove2(const QPoint &pos); void windowStartSystemResize2(const Qt::Edges edges, const QPoint &pos); diff --git a/include/FramelessHelper/Widgets/framelesswidgetshelper.h b/include/FramelessHelper/Widgets/framelesswidgetshelper.h index 703ee1f..ff55777 100644 --- a/include/FramelessHelper/Widgets/framelesswidgetshelper.h +++ b/include/FramelessHelper/Widgets/framelesswidgetshelper.h @@ -68,6 +68,7 @@ public Q_SLOTS: void setSystemButton(QWidget *widget, const Global::SystemButtonType buttonType); void setHitTestVisible(QWidget *widget, const bool visible = true); void setHitTestVisible(const QRect &rect, const bool visible = true); + void setHitTestVisible(QObject *object, const bool visible = true); void showSystemMenu(const QPoint &pos); void windowStartSystemMove2(const QPoint &pos); diff --git a/include/FramelessHelper/Widgets/private/framelesswidgetshelper_p.h b/include/FramelessHelper/Widgets/private/framelesswidgetshelper_p.h index 660ce07..98de6eb 100644 --- a/include/FramelessHelper/Widgets/private/framelesswidgetshelper_p.h +++ b/include/FramelessHelper/Widgets/private/framelesswidgetshelper_p.h @@ -56,6 +56,7 @@ public: void setSystemButton(QWidget *widget, const Global::SystemButtonType buttonType); void setHitTestVisible(QWidget *widget, const bool visible = true); void setHitTestVisible(const QRect &rect, const bool visible = true); + void setHitTestVisible(QObject *object, const bool visible = true); void showSystemMenu(const QPoint &pos); void windowStartSystemMove2(const QPoint &pos); void windowStartSystemResize2(const Qt::Edges edges, const QPoint &pos); diff --git a/src/quick/framelessquickhelper.cpp b/src/quick/framelessquickhelper.cpp index 03e124e..32fee7e 100644 --- a/src/quick/framelessquickhelper.cpp +++ b/src/quick/framelessquickhelper.cpp @@ -333,6 +333,20 @@ void FramelessQuickHelperPrivate::setHitTestVisible(const QRect &rect, const boo } } +void FramelessQuickHelperPrivate::setHitTestVisible(QObject *object, const bool visible) +{ + Q_ASSERT(object); + if (!object) { + return; + } + const auto item = qobject_cast(object); + Q_ASSERT(item); + if (!item) { + return; + } + setHitTestVisible(item, visible); +} + void FramelessQuickHelperPrivate::showSystemMenu(const QPoint &pos) { #ifdef Q_OS_WINDOWS @@ -1017,15 +1031,10 @@ void FramelessQuickHelper::setSystemButton(QQuickItem *item, const QuickGlobal:: void FramelessQuickHelper::setHitTestVisible(QQuickItem *item, const bool visible) { - Q_ASSERT(item); - if (!item) { - return; - } - Q_D(FramelessQuickHelper); - d->setHitTestVisible(item, visible); + setHitTestVisible_item(item, visible); } -void FramelessQuickHelper::setHitTestVisible(const QRect &rect, const bool visible) +void FramelessQuickHelper::setHitTestVisible_rect(const QRect &rect, const bool visible) { Q_ASSERT(rect.isValid()); if (!rect.isValid()) { @@ -1035,6 +1044,26 @@ void FramelessQuickHelper::setHitTestVisible(const QRect &rect, const bool visib d->setHitTestVisible(rect, visible); } +void FramelessQuickHelper::setHitTestVisible_object(QObject *object, const bool visible) +{ + Q_ASSERT(object); + if (!object) { + return; + } + Q_D(FramelessQuickHelper); + d->setHitTestVisible(object, visible); +} + +void FramelessQuickHelper::setHitTestVisible_item(QQuickItem *item, const bool visible) +{ + Q_ASSERT(item); + if (!item) { + return; + } + Q_D(FramelessQuickHelper); + d->setHitTestVisible(item, visible); +} + void FramelessQuickHelper::showSystemMenu(const QPoint &pos) { Q_D(FramelessQuickHelper); diff --git a/src/quick/quickstandardtitlebar.cpp b/src/quick/quickstandardtitlebar.cpp index 410dadf..e3c4f9a 100644 --- a/src/quick/quickstandardtitlebar.cpp +++ b/src/quick/quickstandardtitlebar.cpp @@ -211,7 +211,7 @@ void QuickStandardTitleBar::setWindowIconVisible(const bool value) } else { labelAnchors->setLeft(QQuickItemPrivate::get(this)->left()); } - FramelessQuickHelper::get(this)->setHitTestVisible(windowIconRect(), windowIconVisible_real()); + FramelessQuickHelper::get(this)->setHitTestVisible_rect(windowIconRect(), windowIconVisible_real()); } QVariant QuickStandardTitleBar::windowIcon() const @@ -536,7 +536,7 @@ void QuickStandardTitleBar::itemChange(const ItemChange change, const ItemChange value.window->installEventFilter(this); // The window has changed, we need to re-add or re-remove the window icon rect to // the hit test visible whitelist. This is different with Qt Widgets. - FramelessQuickHelper::get(this)->setHitTestVisible(windowIconRect(), windowIconVisible_real()); + FramelessQuickHelper::get(this)->setHitTestVisible_rect(windowIconRect(), windowIconVisible_real()); } } diff --git a/src/widgets/framelesswidgetshelper.cpp b/src/widgets/framelesswidgetshelper.cpp index 02501af..1bfe14f 100644 --- a/src/widgets/framelesswidgetshelper.cpp +++ b/src/widgets/framelesswidgetshelper.cpp @@ -397,6 +397,20 @@ void FramelessWidgetsHelperPrivate::setHitTestVisible(const QRect &rect, const b } } +void FramelessWidgetsHelperPrivate::setHitTestVisible(QObject *object, const bool visible) +{ + Q_ASSERT(object); + if (!object) { + return; + } + const auto widget = qobject_cast(object); + Q_ASSERT(widget); + if (!widget) { + return; + } + setHitTestVisible(widget, visible); +} + void FramelessWidgetsHelperPrivate::attach() { QWidget * const window = findTopLevelWindow(); @@ -968,6 +982,16 @@ void FramelessWidgetsHelper::setHitTestVisible(const QRect &rect, const bool vis d->setHitTestVisible(rect, visible); } +void FramelessWidgetsHelper::setHitTestVisible(QObject *object, const bool visible) +{ + Q_ASSERT(object); + if (!object) { + return; + } + Q_D(FramelessWidgetsHelper); + d->setHitTestVisible(object, visible); +} + void FramelessWidgetsHelper::showSystemMenu(const QPoint &pos) { Q_D(FramelessWidgetsHelper);