52
52
: UCActionItem(parent)
53
53
, m_mouseArea(new QQuickMouseArea)
54
54
, m_acceptEvents(true)
55
, m_pressAndHoldConnected(false)
56
57
setActiveFocusOnPress(true);
59
60
bool UCAbstractButton::isPressAndHoldConnected()
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, ());
66
65
void UCAbstractButton::classBegin()
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()));
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()));
93
// check the pressAndHold connection on runtime, as Connections
94
// may not be available on compoennt completion
95
void UCAbstractButton::_q_mouseAreaPressed()
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;