summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--examples/declarative/mouseregion/mouse.qml6
-rw-r--r--src/declarative/fx/qfxitem.cpp1
-rw-r--r--src/declarative/fx/qfxmouseregion.cpp48
-rw-r--r--src/declarative/fx/qfxmouseregion.h2
-rw-r--r--src/declarative/fx/qfxmouseregion_p.h3
5 files changed, 13 insertions, 47 deletions
diff --git a/examples/declarative/mouseregion/mouse.qml b/examples/declarative/mouseregion/mouse.qml
index 471874d..5ef484c 100644
--- a/examples/declarative/mouseregion/mouse.qml
+++ b/examples/declarative/mouseregion/mouse.qml
@@ -11,8 +11,8 @@ Rect {
onClicked: { print('click (x: ' + mouse.x + ' y: ' + mouse.y + ' wasHeld: ' + mouse.wasHeld + ')') }
onDoubleClicked: { print('double click (x: ' + mouse.x + ' y: ' + mouse.y + ')') }
onPressAndHold: { print('press and hold') }
- onExitedWhilePressed: { print('exiting while pressed') }
- onReenteredWhilePressed: { print('reentering while pressed') }
+ onEntered: { print('entered ' + pressed) }
+ onExited: { print('exited ' + pressed) }
anchors.fill: parent
}
}
@@ -30,8 +30,6 @@ Rect {
onClicked: { print('click' + '(wasHeld: ' + mouse.wasHeld + ')') }
onDoubleClicked: { print('double click') }
onPressAndHold: { print('press and hold') }
- onExitedWhilePressed: { print('exiting while pressed') }
- onReenteredWhilePressed: { print('reentering while pressed') }
anchors.fill: parent
}
}
diff --git a/src/declarative/fx/qfxitem.cpp b/src/declarative/fx/qfxitem.cpp
index 2433a83..c15685e 100644
--- a/src/declarative/fx/qfxitem.cpp
+++ b/src/declarative/fx/qfxitem.cpp
@@ -2465,6 +2465,7 @@ void QFxItem::setOptions(Options options, bool set)
setFlag(QGraphicsItem::ItemHasNoContents, !(d->options & HasContents));
setFiltersChildEvents(d->options & ChildMouseFilter);
setFlag(QGraphicsItem::ItemAcceptsInputMethod, (d->options & AcceptsInputMethods));
+ setAcceptHoverEvents(d->options & HoverEvents);
if ((old & MouseFilter) != (d->options & MouseFilter)) {
if (d->options & MouseFilter)
diff --git a/src/declarative/fx/qfxmouseregion.cpp b/src/declarative/fx/qfxmouseregion.cpp
index 38a0bd1..af16d4d 100644
--- a/src/declarative/fx/qfxmouseregion.cpp
+++ b/src/declarative/fx/qfxmouseregion.cpp
@@ -173,28 +173,12 @@ void QFxDrag::setYmax(int m)
\qmlsignal MouseRegion::onEntered
This handler is called when the mouse enters the mouse region.
-
- \warning This handler is not yet implemented.
*/
/*!
\qmlsignal MouseRegion::onExited
This handler is called when the mouse exists the mouse region.
-
- \warning This handler is not yet implemented.
-*/
-
-/*!
- \qmlsignal MouseRegion::onReenteredWhilePressed
-
- This handler is called when the mouse reenters the mouse region while pressed.
-*/
-
-/*!
- \qmlsignal MouseRegion::onExitedWhilePressed
-
- This handler is called when the mouse exists the mouse region while pressed.
*/
/*!
@@ -322,10 +306,6 @@ void QFxMouseRegion::mousePressEvent(QGraphicsSceneMouseEvent *event)
if (!d->absorb)
QFxItem::mousePressEvent(event);
else {
- if (!d->inside) {
- d->inside = true;
- emit hoveredChanged();
- }
d->longPress = false;
d->saveEvent(event);
d->dragX = drag()->axis().contains(QLatin1String("x"));
@@ -352,17 +332,13 @@ void QFxMouseRegion::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
d->saveEvent(event);
// ### we should skip this if these signals aren't used
+ // ### can GV handle this for us?
const QRect &bounds = itemBoundingRect();
bool contains = bounds.contains(d->lastPos.toPoint());
- if (d->inside && !contains) {
- d->inside = false;
- emit hoveredChanged();
- emit exitedWhilePressed();
- } else if (!d->inside && contains) {
- d->inside = true;
- emit hoveredChanged();
- emit reenteredWhilePressed();
- }
+ if (d->hovered && !contains)
+ setHovered(false);
+ else if (!d->hovered && contains)
+ setHovered(true);
if (drag()->target()) {
if (!d->moved) {
@@ -424,8 +400,6 @@ void QFxMouseRegion::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
else {
d->saveEvent(event);
setPressed(false);
- //d->inside = false;
- //emit hoveredChanged();
event->accept();
}
}
@@ -436,8 +410,6 @@ void QFxMouseRegion::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
if (!d->absorb)
QFxItem::mouseDoubleClickEvent(event);
else {
- //d->inside = true;
- //emit hoveredChanged();
d->saveEvent(event);
setPressed(true);
QFxMouseEvent me(d->lastPos.x(), d->lastPos.y(), d->lastButton, d->lastButtons, d->lastModifiers, true, false);
@@ -453,7 +425,6 @@ void QFxMouseRegion::hoverEnterEvent(QGraphicsSceneHoverEvent *event)
QFxItem::hoverEnterEvent(event);
else {
setHovered(true);
- emit entered();
}
}
@@ -464,7 +435,6 @@ void QFxMouseRegion::hoverLeaveEvent(QGraphicsSceneHoverEvent *event)
QFxItem::hoverLeaveEvent(event);
else {
setHovered(false);
- emit exited();
}
}
@@ -475,7 +445,6 @@ void QFxMouseRegion::mouseUngrabEvent()
// if our mouse grab has been removed (probably by Flickable), fix our
// state
d->pressed = false;
- //d->inside = false;
setKeepMouseGrab(false);
emit pressedChanged();
//emit hoveredChanged();
@@ -487,7 +456,7 @@ void QFxMouseRegion::timerEvent(QTimerEvent *event)
Q_D(QFxMouseRegion);
if (event->timerId() == d->pressAndHoldTimer.timerId()) {
d->pressAndHoldTimer.stop();
- if (d->pressed && d->dragged == false && d->inside == true) {
+ if (d->pressed && d->dragged == false && d->hovered == true) {
d->longPress = true;
QFxMouseEvent me(d->lastPos.x(), d->lastPos.y(), d->lastButton, d->lastButtons, d->lastModifiers, false, d->longPress);
emit pressAndHold(&me);
@@ -504,7 +473,7 @@ void QFxMouseRegion::timerEvent(QTimerEvent *event)
bool QFxMouseRegion::hovered()
{
Q_D(QFxMouseRegion);
- return d->hovered || d->inside;
+ return d->hovered;
}
/*!
@@ -523,13 +492,14 @@ void QFxMouseRegion::setHovered(bool h)
if (d->hovered != h) {
d->hovered = h;
emit hoveredChanged();
+ d->hovered ? emit entered() : emit exited();
}
}
void QFxMouseRegion::setPressed(bool p)
{
Q_D(QFxMouseRegion);
- bool isclick = d->pressed == true && p == false && d->dragged == false && d->inside == true;
+ bool isclick = d->pressed == true && p == false && d->dragged == false && d->hovered == true;
if (d->pressed != p) {
d->pressed = p;
diff --git a/src/declarative/fx/qfxmouseregion.h b/src/declarative/fx/qfxmouseregion.h
index 224dd54..47929be 100644
--- a/src/declarative/fx/qfxmouseregion.h
+++ b/src/declarative/fx/qfxmouseregion.h
@@ -129,8 +129,6 @@ Q_SIGNALS:
void doubleClicked(QFxMouseEvent *mouse);
void entered();
void exited();
- void exitedWhilePressed();
- void reenteredWhilePressed();
protected:
void mousePressEvent(QGraphicsSceneMouseEvent *event);
diff --git a/src/declarative/fx/qfxmouseregion_p.h b/src/declarative/fx/qfxmouseregion_p.h
index ad0866f..a41f32a 100644
--- a/src/declarative/fx/qfxmouseregion_p.h
+++ b/src/declarative/fx/qfxmouseregion_p.h
@@ -66,7 +66,7 @@ class QFxMouseRegionPrivate : public QFxItemPrivate
public:
QFxMouseRegionPrivate()
- : absorb(true), hovered(false), inside(true), pressed(false), longPress(false), drag(0)
+ : absorb(true), hovered(false), pressed(false), longPress(false), drag(0)
{
}
@@ -86,7 +86,6 @@ public:
bool absorb : 1;
bool hovered : 1;
- bool inside : 1;
bool pressed : 1;
bool longPress : 1;
bool moved : 1;