~zsombi/ubuntu-ui-toolkit/listitemSelectModeBugs

« back to all changes in this revision

Viewing changes to src/Ubuntu/Components/plugin/ucabstractbutton.cpp

  • Committer: Zsombor Egri
  • Date: 2015-11-16 06:35:05 UTC
  • mfrom: (1664.1.1 listitemSelectModeBugs)
  • Revision ID: zsombor.egri@canonical.com-20151116063505-cwn2qfks7qzk10g9
re-sync

Show diffs side-by-side

added added

removed removed

Lines of Context:
52
52
    : UCActionItem(parent)
53
53
    , m_mouseArea(new QQuickMouseArea)
54
54
    , m_acceptEvents(true)
 
55
    , m_pressAndHoldConnected(false)
55
56
{
56
57
    setActiveFocusOnPress(true);
57
58
}
58
59
 
59
60
bool UCAbstractButton::isPressAndHoldConnected()
60
61
{
61
 
    static QMetaMethod method = QMetaMethod::fromSignal(&UCAbstractButton::pressAndHold);
62
 
    static int signalIdx = QMetaObjectPrivate::signalIndex(method);
63
 
    return QObjectPrivate::get(this)->isSignalConnected(signalIdx);
 
62
    IS_SIGNAL_CONNECTED(this, UCAbstractButton, pressAndHold, ());
64
63
}
65
64
 
66
65
void UCAbstractButton::classBegin()
82
81
{
83
82
    UCActionItem::componentComplete();
84
83
    // connect to the right slot, using macros so we get the proper slot
85
 
    connect(this, SIGNAL(clicked()), this, SLOT(trigger()));
 
84
    connect(m_mouseArea, SIGNAL(clicked(QQuickMouseEvent*)), this, SLOT(trigger()));
86
85
 
87
86
    // bind mouse area
88
87
    connect(m_mouseArea, &QQuickMouseArea::pressedChanged, this, &UCAbstractButton::pressedChanged);
89
88
    connect(m_mouseArea, &QQuickMouseArea::hoveredChanged, this, &UCAbstractButton::hoveredChanged);
90
89
    connect(m_mouseArea, SIGNAL(clicked(QQuickMouseEvent*)), this, SLOT(_q_mouseAreaClicked()));
91
 
    if (isPressAndHoldConnected()) {
92
 
        connect(m_mouseArea, SIGNAL(pressAndHold(QQuickMouseEvent*)), this, SLOT(_q_mouseAreaPressAndHold()));
 
90
    connect(m_mouseArea, SIGNAL(pressed(QQuickMouseEvent*)), this, SLOT(_q_mouseAreaPressed()));
 
91
}
 
92
 
 
93
// check the pressAndHold connection on runtime, as Connections
 
94
// may not be available on compoennt completion
 
95
void UCAbstractButton::_q_mouseAreaPressed()
 
96
{
 
97
    bool longPressConnected = isPressAndHoldConnected();
 
98
    if (longPressConnected && !m_pressAndHoldConnected) {
 
99
        // do not use UniqueConnection as that has huge impact on performance
 
100
        connect(m_mouseArea, SIGNAL(pressAndHold(QQuickMouseEvent*)),
 
101
                this, SLOT(_q_mouseAreaPressAndHold()));
 
102
        m_pressAndHoldConnected = true;
 
103
    } else if (!longPressConnected && m_pressAndHoldConnected) {
 
104
        disconnect(m_mouseArea, SIGNAL(pressAndHold(QQuickMouseEvent*)),
 
105
                   this, SLOT(_q_mouseAreaPressAndHold()));
 
106
        m_pressAndHoldConnected = false;
93
107
    }
94
108
}
95
109