From 3c55ec6a2585db4a137011b3bb4ebcc63aa62ff8 Mon Sep 17 00:00:00 2001 From: Marco Martin Date: Thu, 11 Oct 2012 21:09:14 +0200 Subject: [PATCH] manage buttons even if they are under applet shadow --- private/applethandle.cpp | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/private/applethandle.cpp b/private/applethandle.cpp index 845b6efbf..a24728f08 100644 --- a/private/applethandle.cpp +++ b/private/applethandle.cpp @@ -865,6 +865,41 @@ bool AppletHandle::sceneEventFilter(QGraphicsItem *watched, QEvent *event) { if (watched == m_applet && event->type() == QEvent::GraphicsSceneHoverLeave) { hoverLeaveEvent(static_cast(event)); + } else if (watched == m_applet && event->type() == QEvent::GraphicsSceneMousePress) { + QGraphicsSceneMouseEvent *me = static_cast(event); + + QPointF pos = mapFromScene(me->scenePos()); + if (m_applet->contentsRect().contains(pos)) { + return false; + } + + me->setPos(pos); + mousePressEvent(me); + return true; + } else if (watched == m_applet && event->type() == QEvent::GraphicsSceneMouseRelease) { + if (m_pressedButton == NoButton) { + return false; + } + + QGraphicsSceneMouseEvent *me = static_cast(event); + + QPointF pos = mapFromScene(me->scenePos()); + me->setPos(pos); + mouseReleaseEvent(me); + return true; + } else if (watched == m_applet && event->type() == QEvent::GraphicsSceneMouseMove) { + if (m_pressedButton == NoButton) { + return false; + } + + QGraphicsSceneMouseEvent *me = static_cast(event); + + QPointF pos = mapFromScene(me->scenePos()); + + + me->setPos(pos); + mouseMoveEvent(me); + return true; } return false;