qml: Wire up some events for DockWidget

Some events like QEvent::Show, Hide and Close are for QWidget only,
so we have to synthetize them, as KDDW expects them
This commit is contained in:
Sergio Martins
2020-08-02 12:15:26 +01:00
parent 1df0e6d6dd
commit 197a0abb7e
3 changed files with 21 additions and 11 deletions

View File

@@ -13,6 +13,8 @@
#include <Config.h>
#include <QQuickItem>
#include <QCloseEvent>
/**
* @file
* @brief Represents a dock widget.
@@ -62,8 +64,7 @@ void DockWidgetQuick::setWidget(const QString &qmlFilename)
DockWidgetBase::setWidget(adapter);
}
/* TODO_QUICK
bool DockWidget::event(QEvent *e)
bool DockWidgetQuick::event(QEvent *e)
{
if (e->type() == QEvent::ParentChange) {
onParentChanged();
@@ -71,13 +72,9 @@ bool DockWidget::event(QEvent *e)
onShown(e->spontaneous());
} else if (e->type() == QEvent::Hide) {
onHidden(e->spontaneous());
} else if (e->type() == QEvent::Close) {
onClosed(static_cast<QCloseEvent*>(e));
}
return QWidget::event(e);
return DockWidgetBase::event(e);
}
void DockWidget::closeEvent(QCloseEvent *e)
{
onClosed(e);
}
*/

View File

@@ -54,6 +54,9 @@ public:
/// Similar to DockWidgetBase::setWidget(QQuickItem*)
void setWidget(const QString &qmlFilename);
protected:
bool event(QEvent *e) override;
private:
class Private;
Private *const d;

View File

@@ -66,10 +66,20 @@ void QWidgetAdapter::itemChange(QQuickItem::ItemChange change, const QQuickItem:
{
QQuickItem::itemChange(change, data);
if (change == QQuickItem::ItemParentHasChanged) {
// Emulate the QWidget behaviour as QQuickItem doesn't emit parentChange event.
// Emulate the QWidget behaviour as QQuickItem doesn't receive some QEvents.
switch (change) {
case QQuickItem::ItemVisibleHasChanged: {
QEvent ev(QEvent::ParentChange);
event(&ev);
break;
}
case QQuickItem::ItemParentHasChanged: {
QEvent ev(isVisible() ? QEvent::Show : QEvent::Hide);
event(&ev);
break;
}
default:
break;
}
}