From 96fd421e9f161a101734cb91141d1d056d29e10a Mon Sep 17 00:00:00 2001 From: Michail Vourlakos Date: Fri, 25 Dec 2020 01:14:11 +0200 Subject: [PATCH] sinked events:various fixes --disable sinked events when parabolic effect is enabled. It needs to be rethought how this could work properly with parabolic effect. --- app/view/padding.cpp | 5 ++ app/view/padding.h | 3 + app/view/view.cpp | 77 +++++++++---------- .../package/contents/ui/VisibilityManager.qml | 12 ++- .../package/contents/ui/applet/AppletItem.qml | 5 ++ .../contents/ui/applet/ItemWrapper.qml | 7 +- 6 files changed, 61 insertions(+), 48 deletions(-) diff --git a/app/view/padding.cpp b/app/view/padding.cpp index 2a4e268d1..24abe2bdd 100644 --- a/app/view/padding.cpp +++ b/app/view/padding.cpp @@ -96,5 +96,10 @@ void Padding::setRight(int rightpad) emit paddingsChanged(); } +QMargins Padding::margins() const +{ + return QMargins(m_left, m_top, m_right, m_bottom); +} + } } diff --git a/app/view/padding.h b/app/view/padding.h index 22b579982..73520cf95 100644 --- a/app/view/padding.h +++ b/app/view/padding.h @@ -21,6 +21,7 @@ #define PADDING_H // Qt +#include #include @@ -54,6 +55,8 @@ public: int right() const; void setRight(int rightpad); + QMargins margins() const; + signals: void paddingsChanged(); diff --git a/app/view/view.cpp b/app/view/view.cpp index 31920d64e..d5e69b9b5 100644 --- a/app/view/view.cpp +++ b/app/view/view.cpp @@ -1337,6 +1337,8 @@ void View::setInterfacesGraphicObj(Latte::Interfaces *ifaces) bool View::event(QEvent *e) { + QEvent *adjustedevent = e; + if (!m_inDelete) { emit eventTriggered(e); @@ -1355,12 +1357,13 @@ bool View::event(QEvent *e) if (auto de = static_cast(e)) { //! adjust event by taking into account paddings - if (m_padding && !m_padding->isEmpty() && !containmentContainsPosition(de->pos())) { + if (m_padding + && !m_padding->isEmpty() + && !containmentContainsPosition(de->pos())) { auto de2 = new QDragEnterEvent(positionAdjustedForContainment(de->pos()).toPoint(), de->possibleActions(), de->mimeData(), de->mouseButtons(), de->keyboardModifiers()); - QCoreApplication::postEvent(this, de2); - return true; + adjustedevent = de2; } } break; @@ -1372,12 +1375,13 @@ bool View::event(QEvent *e) case QEvent::DragMove: if (auto de = static_cast(e)) { //! adjust event by taking into account paddings - if (m_padding && !m_padding->isEmpty() && !containmentContainsPosition(de->pos())) { + if (m_padding + && !m_padding->isEmpty() + && !containmentContainsPosition(de->pos())) { auto de2 = new QDragMoveEvent(positionAdjustedForContainment(de->pos()).toPoint(), de->possibleActions(), de->mimeData(), de->mouseButtons(), de->keyboardModifiers()); - QCoreApplication::postEvent(this, de2); - return true; + adjustedevent = de2; } } break; @@ -1387,12 +1391,13 @@ bool View::event(QEvent *e) if (auto de = static_cast(e)) { //! adjust event by taking into account paddings - if (m_padding && !m_padding->isEmpty() && !containmentContainsPosition(de->pos())) { + if (m_padding + && !m_padding->isEmpty() + && !containmentContainsPosition(de->pos())) { auto de2 = new QDropEvent(positionAdjustedForContainment(de->pos()).toPoint(), de->possibleActions(), de->mimeData(), de->mouseButtons(), de->keyboardModifiers()); - QCoreApplication::postEvent(this, de2); - return true; + adjustedevent = de2; } } @@ -1402,7 +1407,8 @@ bool View::event(QEvent *e) if (auto me = dynamic_cast(e)) { //! adjust event by taking into account paddings - if (m_padding && !m_padding->isEmpty() + if (m_padding + && !m_padding->isEmpty() && m_positioner && m_positioner->isCursorInsideView() /*dont break drags when cursor is outside*/ && !containmentContainsPosition(me->windowPos())) { auto me2 = new QMouseEvent(me->type(), @@ -1411,8 +1417,8 @@ bool View::event(QEvent *e) positionAdjustedForContainment(me->windowPos()) + position(), me->button(), me->buttons(), me->modifiers()); - QCoreApplication::postEvent(this, me2); - return true; + qDebug() << "adjusted sinked move..."; + adjustedevent = me2; } } break; @@ -1422,17 +1428,18 @@ bool View::event(QEvent *e) emit mousePressed(me->pos(), me->button()); //! adjust event by taking into account paddings - if (m_padding && !m_padding->isEmpty() + if (m_padding + && !m_padding->isEmpty() && m_positioner && m_positioner->isCursorInsideView() /*dont break drags when cursor is outside*/ && !containmentContainsPosition(me->windowPos())) { + qDebug() << "adjusted sinked pressed..."; auto me2 = new QMouseEvent(me->type(), positionAdjustedForContainment(me->windowPos()), positionAdjustedForContainment(me->windowPos()), positionAdjustedForContainment(me->windowPos()) + position(), me->button(), me->buttons(), me->modifiers()); - QCoreApplication::postEvent(this, me2); - return true; + adjustedevent = me2; } } break; @@ -1442,7 +1449,8 @@ bool View::event(QEvent *e) emit mouseReleased(me->pos(), me->button()); //! adjust event by taking into account paddings - if (m_padding && !m_padding->isEmpty() + if (m_padding + && !m_padding->isEmpty() && m_positioner && m_positioner->isCursorInsideView() /*dont break drags when cursor is outside*/ && !containmentContainsPosition(me->windowPos())) { auto me2 = new QMouseEvent(me->type(), @@ -1451,8 +1459,7 @@ bool View::event(QEvent *e) positionAdjustedForContainment(me->windowPos()) + position(), me->button(), me->buttons(), me->modifiers()); - QCoreApplication::postEvent(this, me2); - return true; + adjustedevent = me2; } } break; @@ -1501,14 +1508,15 @@ bool View::event(QEvent *e) emit wheelScrolled(pos, we->angleDelta(), we->buttons()); //! adjust event by taking into account paddings - if (m_padding && !m_padding->isEmpty() && !containmentContainsPosition(pos)) { + if (m_padding + && !m_padding->isEmpty() + && !containmentContainsPosition(pos)) { auto we2 = new QWheelEvent(positionAdjustedForContainment(pos), positionAdjustedForContainment(pos) + position(), we->pixelDelta(), we->angleDelta(), we->angleDelta().y(), we->orientation(), we->buttons(), we->modifiers(), we->phase()); - QCoreApplication::postEvent(this, we2); - return true; + adjustedevent = we2; } } break; @@ -1517,7 +1525,7 @@ bool View::event(QEvent *e) } } - return ContainmentView::event(e); + return ContainmentView::event(adjustedevent); } bool View::containmentContainsPosition(const QPointF &point) const @@ -1526,16 +1534,8 @@ bool View::containmentContainsPosition(const QPointF &point) const return false; } - QQuickItem *containmentItem = containment()->property("_plasma_graphicObject").value(); - - if (!containmentItem) { - return false; - } - - return QRectF( - containmentItem->mapToScene(QPoint(m_padding->left(),m_padding->top())), - QSizeF(containmentItem->width()-m_padding->left()-m_padding->right(), - containmentItem->height()-m_padding->top()-m_padding->bottom())).contains(point); + QRectF local= m_localGeometry - m_padding->margins(); + return local.contains(point); } QPointF View::positionAdjustedForContainment(const QPointF &point) const @@ -1544,16 +1544,9 @@ QPointF View::positionAdjustedForContainment(const QPointF &point) const return point; } - QQuickItem *containmentItem = containment()->property("_plasma_graphicObject").value(); - - if (!containmentItem) { - return point; - } - - QRectF containmentRect(containmentItem->mapToScene(QPoint(0,0)), QSizeF(containmentItem->width(), containmentItem->height())); - - return QPointF(qBound(containmentRect.left() + m_padding->left(), point.x(), containmentRect.right() - m_padding->right()), - qBound(containmentRect.top() + m_padding->top(), point.y(), containmentRect.bottom() - m_padding->bottom())); + QRectF local = m_localGeometry - m_padding->margins(); + return QPointF(qBound(local.left(), point.x(), local.right()), + qBound(local.top(), point.y(), local.bottom())); } diff --git a/containment/package/contents/ui/VisibilityManager.qml b/containment/package/contents/ui/VisibilityManager.qml index a5d65bd1a..59d4b1816 100644 --- a/containment/package/contents/ui/VisibilityManager.qml +++ b/containment/package/contents/ui/VisibilityManager.qml @@ -220,28 +220,32 @@ Item{ target: latteView.padding property: "top" when: latteView - value: plasmoid.location === PlasmaCore.Types.TopEdge ? metrics.margin.screenEdge : 0 + value: plasmoid.formFactor === PlasmaCore.Types.Vertical && !parabolic.isEnabled ? + background.paddings.top + Math.abs(metrics.padding.length) : 0 } Binding{ target: latteView.padding property: "bottom" when: latteView - value: plasmoid.location === PlasmaCore.Types.BottomEdge ? metrics.margin.screenEdge : 0 + value: plasmoid.formFactor === PlasmaCore.Types.Vertical && !parabolic.isEnabled ? + background.paddings.bottom + Math.abs(metrics.padding.length) : 0 } Binding{ target: latteView.padding property: "left" when: latteView - value: plasmoid.location === PlasmaCore.Types.LeftEdge ? metrics.margin.screenEdge : 0 + value: plasmoid.formFactor === PlasmaCore.Types.Horizontal && !parabolic.isEnabled ? + background.paddings.left + Math.abs(metrics.padding.length) : 0 } Binding{ target: latteView.padding property: "right" when: latteView - value: plasmoid.location === PlasmaCore.Types.RightEdge ? metrics.margin.screenEdge : 0 + value: plasmoid.formFactor === PlasmaCore.Types.Horizontal && !parabolic.isEnabled ? + background.paddings.right + Math.abs(metrics.padding.length) : 0 } //! View::Effects bindings diff --git a/containment/package/contents/ui/applet/AppletItem.qml b/containment/package/contents/ui/applet/AppletItem.qml index 42cead7ca..6dd1d5a9f 100644 --- a/containment/package/contents/ui/applet/AppletItem.qml +++ b/containment/package/contents/ui/applet/AppletItem.qml @@ -657,6 +657,11 @@ Item { var local = appletItem.mapFromItem(root, pos.x, pos.y); appletItem.mousePressed(local.x, local.y, button); + + if (button === Qt.LeftButton && parabolic.isEnabled) { + /*Hack, until the sinked events plasma approach works propertly with parabolic effect*/ + appletItem.activateAppletForNeutralAreas(local); + } } } diff --git a/containment/package/contents/ui/applet/ItemWrapper.qml b/containment/package/contents/ui/applet/ItemWrapper.qml index 8cf67cdf6..6928a0cf7 100644 --- a/containment/package/contents/ui/applet/ItemWrapper.qml +++ b/containment/package/contents/ui/applet/ItemWrapper.qml @@ -98,7 +98,10 @@ Item{ property int marginsThickness: appletItem.metrics.totals.thicknessEdges property int marginsLength: 0 //Fitt's Law, through Binding to avoid Binding loops - property int localLengthMargins: isSeparator || !communicator.requires.lengthMarginsEnabled || isInternalViewSplitter ? 0 : appletItem.lengthAppletFullMargins + property int localLengthMargins: isSeparator + || !communicator.requires.lengthMarginsEnabled + || isInternalViewSplitter + ? 0 : appletItem.lengthAppletFullMargins property int edgeLengthMargins: edgeLengthMarginsDisabled ? 0 : appletItem.lengthAppletPadding * 2 property real scaledLength: zoomScaleLength * (layoutLength + marginsLength) @@ -174,7 +177,7 @@ Item{ } } - onAppletMinimumLengthChanged: { + onAppletMinimumLengthChanged: { if(zoomScale === 1) { appletItem.updateParabolicEffectIsSupported(); }