From ce765ec6105a0a3d68bad454b498411f032eb7ca Mon Sep 17 00:00:00 2001 From: "Aaron J. Seigo" Date: Thu, 15 Nov 2007 03:35:12 +0000 Subject: [PATCH] better button mouse interaction; patch by Jason Stubbs CCMAIL:jasonstubbs@gmail.com svn path=/trunk/KDE/kdebase/workspace/libs/plasma/; revision=736872 --- widgets/pushbutton.cpp | 30 ++++++++++++++++++++++-------- widgets/pushbutton.h | 1 + 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/widgets/pushbutton.cpp b/widgets/pushbutton.cpp index 122279cbb..0b28865a3 100644 --- a/widgets/pushbutton.cpp +++ b/widgets/pushbutton.cpp @@ -26,6 +26,7 @@ #include #include #include +#include #include #include #include @@ -250,22 +251,35 @@ void PushButton::mousePressEvent(QGraphicsSceneMouseEvent *event) update(); } +void PushButton::mouseMoveEvent(QGraphicsSceneMouseEvent *event) +{ + event->accept(); + if (sceneBoundingRect().contains(event->scenePos())) { + if (d->state == Private::Released && scene()->mouseGrabberItem() == this) { + d->state = Private::Pressed; + update(); + } + } else { + if (d->state == Private::Pressed) { + d->state = Private::Released; + update(); + } + } +} + void PushButton::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) { event->accept(); if (d->state == Private::Pressed) { d->state = Private::Released; + emit clicked(); - if (sceneBoundingRect().contains(event->scenePos())) { - emit clicked(); - - if (d->checkable) { - d->checked = ! d->checked; - emit toggled(d->checked); - } + if (d->checkable) { + d->checked = ! d->checked; + emit toggled(d->checked); } + update(); } - update(); } QSizeF PushButton::minimumSize() const diff --git a/widgets/pushbutton.h b/widgets/pushbutton.h index 2043a3180..99f31b674 100644 --- a/widgets/pushbutton.h +++ b/widgets/pushbutton.h @@ -178,6 +178,7 @@ Q_SIGNALS: protected: void mousePressEvent(QGraphicsSceneMouseEvent *event); + void mouseMoveEvent(QGraphicsSceneMouseEvent *event); void mouseReleaseEvent(QGraphicsSceneMouseEvent *event); void paintWidget(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);