~nick-dedekind/unity8/indicators.hint-interval

« back to all changes in this revision

Viewing changes to plugins/Utils/passthroughmousearea.cpp

  • Committer: Nick Dedekind
  • Date: 2014-03-10 09:34:27 UTC
  • Revision ID: nicholas.dedekind@gmail.com-20140310093427-11u13xlctqumqgbw
Fixed PassthroughMouseArea without area behind + Test

Show diffs side-by-side

added added

removed removed

Lines of Context:
48
48
            m_enabledEvents = true;
49
49
            return;
50
50
        }
 
51
 
51
52
        if (w->mouseGrabberItem() == this) {
52
53
            QQuickItem::ungrabMouse();
53
 
        }
54
 
 
55
 
        QMouseEvent ev(*event);
56
 
        QCoreApplication::sendEvent(w, &ev);
57
 
 
58
 
        m_passthroughGrabbed = NULL;
59
 
        QQuickItem* currentGrab = w->mouseGrabberItem();
60
 
        if (currentGrab != this) {
61
 
            m_passthroughGrabbed = currentGrab;
62
 
 
63
 
            connect(currentGrab, SIGNAL(clicked(QQuickMouseEvent*)), SIGNAL(clicked(QQuickMouseEvent*)));
64
 
            connect(currentGrab, SIGNAL(doubleClicked(QQuickMouseEvent*)), SIGNAL(doubleClicked(QQuickMouseEvent*)));
65
 
            connect(currentGrab, SIGNAL(pressAndHold(QQuickMouseEvent*)), SIGNAL(pressAndHold(QQuickMouseEvent*)));
66
 
 
67
 
            connect(currentGrab, SIGNAL(released(QQuickMouseEvent*)), SLOT(onReleased(QQuickMouseEvent*)));
68
 
            connect(currentGrab, SIGNAL(canceled()), SLOT(clearConnected()));
69
 
            connect(currentGrab, SIGNAL(canceled()), SIGNAL(canceled()));
 
54
 
 
55
            QMouseEvent ev(*event);
 
56
            QCoreApplication::sendEvent(w, &ev);
 
57
 
 
58
            m_passthroughGrabbed = NULL;
 
59
            QQuickItem* currentGrab = w->mouseGrabberItem();
 
60
            if (currentGrab && currentGrab != this) {
 
61
                m_passthroughGrabbed = currentGrab;
 
62
 
 
63
                if (currentGrab) {
 
64
                    connect(currentGrab, SIGNAL(clicked(QQuickMouseEvent*)), SIGNAL(clicked(QQuickMouseEvent*)));
 
65
                    connect(currentGrab, SIGNAL(doubleClicked(QQuickMouseEvent*)), SIGNAL(doubleClicked(QQuickMouseEvent*)));
 
66
                    connect(currentGrab, SIGNAL(pressAndHold(QQuickMouseEvent*)), SIGNAL(pressAndHold(QQuickMouseEvent*)));
 
67
 
 
68
                    connect(currentGrab, SIGNAL(released(QQuickMouseEvent*)), SLOT(onGrabbedReleased(QQuickMouseEvent*)));
 
69
                    connect(currentGrab, SIGNAL(canceled()), SLOT(clearConnected()));
 
70
                    connect(currentGrab, SIGNAL(canceled()), SIGNAL(canceled()));
 
71
                }
 
72
            } else if (!currentGrab) {
 
73
                // need to re-grab the mouse area
 
74
                QQuickMouseArea::grabMouse();
 
75
            }
70
76
        }
71
77
 
72
78
        m_enabledEvents = true;
73
79
    }
74
80
}
75
81
 
76
 
void PassthroughMouseArea::onReleased(QQuickMouseEvent* event)
 
82
void PassthroughMouseArea::onGrabbedReleased(QQuickMouseEvent* event)
77
83
{
 
84
    QQuickMouseArea::mouseUngrabEvent();
78
85
    Q_EMIT released(event);
79
86
 
80
87
    // Needs to be queued, otherwise we will miss the click event.
88
95
        m_passthroughGrabbed = NULL;
89
96
    }
90
97
}
 
98
 
 
99
void PassthroughMouseArea::mouseUngrabEvent()
 
100
{
 
101
    if (!m_enabledEvents) {
 
102
        return;
 
103
    }
 
104
    QQuickMouseArea::mouseUngrabEvent();
 
105
}