aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@qt.io>2017-04-04 16:18:39 +0200
committerJ-P Nurmi <jpnurmi@qt.io>2017-04-05 07:34:21 +0000
commited64115cbf11a758a9cacd2bd34f3af5603f73b7 (patch)
treeaee8d02bf8503499b579d3521d50728ea2d93c79 /src
parent0704f76d4793929b79a1fefd6c9f83ac69e70307 (diff)
Set explicit cursors on all interactive controls
For example, if you have a floating button on top of a text editor, hovering the button must change the cursor from the editor's ibeam cursor to an arrow cursor. This applies to all interactive controls that call setAcceptedMouseButtons(). If a control blocks mouse events, it should not use some random cursor from another control underneath. Task-number: QTBUG-59629 Change-Id: I8a6ae306bbc76a9b22377361cb19cf9c3a872d31 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/imports/calendar/qquickmonthgrid.cpp3
-rw-r--r--src/quicktemplates2/qquickabstractbutton.cpp6
-rw-r--r--src/quicktemplates2/qquickcombobox.cpp12
-rw-r--r--src/quicktemplates2/qquickdial.cpp3
-rw-r--r--src/quicktemplates2/qquickoverlay.cpp3
-rw-r--r--src/quicktemplates2/qquickpage.cpp3
-rw-r--r--src/quicktemplates2/qquickpageindicator.cpp12
-rw-r--r--src/quicktemplates2/qquickpane.cpp6
-rw-r--r--src/quicktemplates2/qquickrangeslider.cpp5
-rw-r--r--src/quicktemplates2/qquickscrollbar.cpp13
-rw-r--r--src/quicktemplates2/qquickslider.cpp3
-rw-r--r--src/quicktemplates2/qquickspinbox.cpp17
12 files changed, 82 insertions, 4 deletions
diff --git a/src/imports/calendar/qquickmonthgrid.cpp b/src/imports/calendar/qquickmonthgrid.cpp
index 5eb0798c..9621f49a 100644
--- a/src/imports/calendar/qquickmonthgrid.cpp
+++ b/src/imports/calendar/qquickmonthgrid.cpp
@@ -195,6 +195,9 @@ QQuickMonthGrid::QQuickMonthGrid(QQuickItem *parent) :
setFlag(ItemIsFocusScope);
setActiveFocusOnTab(true);
setAcceptedMouseButtons(Qt::LeftButton);
+#if QT_CONFIG(cursor)
+ setCursor(Qt::ArrowCursor);
+#endif
d->model = new QQuickMonthModel(this);
d->source = QVariant::fromValue(d->model);
diff --git a/src/quicktemplates2/qquickabstractbutton.cpp b/src/quicktemplates2/qquickabstractbutton.cpp
index 225ab9ab..7c2ced66 100644
--- a/src/quicktemplates2/qquickabstractbutton.cpp
+++ b/src/quicktemplates2/qquickabstractbutton.cpp
@@ -308,6 +308,9 @@ QQuickAbstractButton::QQuickAbstractButton(QQuickItem *parent)
setActiveFocusOnTab(true);
setFocusPolicy(Qt::StrongFocus);
setAcceptedMouseButtons(Qt::LeftButton);
+#if QT_CONFIG(cursor)
+ setCursor(Qt::ArrowCursor);
+#endif
}
QQuickAbstractButton::QQuickAbstractButton(QQuickAbstractButtonPrivate &dd, QQuickItem *parent)
@@ -316,6 +319,9 @@ QQuickAbstractButton::QQuickAbstractButton(QQuickAbstractButtonPrivate &dd, QQui
setActiveFocusOnTab(true);
setFocusPolicy(Qt::StrongFocus);
setAcceptedMouseButtons(Qt::LeftButton);
+#if QT_CONFIG(cursor)
+ setCursor(Qt::ArrowCursor);
+#endif
}
QQuickAbstractButton::~QQuickAbstractButton()
diff --git a/src/quicktemplates2/qquickcombobox.cpp b/src/quicktemplates2/qquickcombobox.cpp
index 786db55b..85c577b4 100644
--- a/src/quicktemplates2/qquickcombobox.cpp
+++ b/src/quicktemplates2/qquickcombobox.cpp
@@ -628,6 +628,9 @@ QQuickComboBox::QQuickComboBox(QQuickItem *parent)
setFocusPolicy(Qt::StrongFocus);
setFlag(QQuickItem::ItemIsFocusScope);
setAcceptedMouseButtons(Qt::LeftButton);
+#if QT_CONFIG(cursor)
+ setCursor(Qt::ArrowCursor);
+#endif
setInputMethodHints(Qt::ImhNoPredictiveText);
}
@@ -737,12 +740,18 @@ void QQuickComboBox::setEditable(bool editable)
QObjectPrivate::connect(input, &QQuickTextInput::textChanged, d, &QQuickComboBoxPrivate::updateEditText);
QObjectPrivate::connect(input, &QQuickTextInput::accepted, d, &QQuickComboBoxPrivate::acceptInput);
}
+#if QT_CONFIG(cursor)
+ d->contentItem->setCursor(Qt::IBeamCursor);
+#endif
} else {
d->contentItem->removeEventFilter(this);
if (QQuickTextInput *input = qobject_cast<QQuickTextInput *>(d->contentItem)) {
QObjectPrivate::disconnect(input, &QQuickTextInput::textChanged, d, &QQuickComboBoxPrivate::updateEditText);
QObjectPrivate::disconnect(input, &QQuickTextInput::accepted, d, &QQuickComboBoxPrivate::acceptInput);
}
+#if QT_CONFIG(cursor)
+ d->contentItem->unsetCursor();
+#endif
}
}
@@ -1542,6 +1551,9 @@ void QQuickComboBox::contentItemChange(QQuickItem *newItem, QQuickItem *oldItem)
connect(newInput, &QQuickTextInput::inputMethodComposingChanged, this, &QQuickComboBox::inputMethodComposingChanged);
connect(newInput, &QQuickTextInput::acceptableInputChanged, this, &QQuickComboBox::acceptableInputChanged);
}
+#if QT_CONFIG(cursor)
+ newItem->setCursor(Qt::IBeamCursor);
+#endif
}
}
diff --git a/src/quicktemplates2/qquickdial.cpp b/src/quicktemplates2/qquickdial.cpp
index 24a8df01..c7fbdc80 100644
--- a/src/quicktemplates2/qquickdial.cpp
+++ b/src/quicktemplates2/qquickdial.cpp
@@ -260,6 +260,9 @@ QQuickDial::QQuickDial(QQuickItem *parent)
{
setActiveFocusOnTab(true);
setAcceptedMouseButtons(Qt::LeftButton);
+#if QT_CONFIG(cursor)
+ setCursor(Qt::ArrowCursor);
+#endif
}
/*!
diff --git a/src/quicktemplates2/qquickoverlay.cpp b/src/quicktemplates2/qquickoverlay.cpp
index c72979ae..d31186cd 100644
--- a/src/quicktemplates2/qquickoverlay.cpp
+++ b/src/quicktemplates2/qquickoverlay.cpp
@@ -97,6 +97,9 @@ static QQuickItem *createDimmer(QQmlComponent *component, QQuickPopup *popup, QQ
item->setZ(popup->z());
if (popup->isModal()) {
item->setAcceptedMouseButtons(Qt::AllButtons);
+#if QT_CONFIG(cursor)
+ item->setCursor(Qt::ArrowCursor);
+#endif
#if QT_CONFIG(quicktemplates2_hover)
// TODO: switch to QStyleHints::useHoverEffects in Qt 5.8
item->setAcceptHoverEvents(true);
diff --git a/src/quicktemplates2/qquickpage.cpp b/src/quicktemplates2/qquickpage.cpp
index 701916b6..6b0b3a38 100644
--- a/src/quicktemplates2/qquickpage.cpp
+++ b/src/quicktemplates2/qquickpage.cpp
@@ -117,6 +117,9 @@ QQuickPage::QQuickPage(QQuickItem *parent)
Q_D(QQuickPage);
setFlag(ItemIsFocusScope);
setAcceptedMouseButtons(Qt::AllButtons);
+#if QT_CONFIG(cursor)
+ setCursor(Qt::ArrowCursor);
+#endif
d->layout.reset(new QQuickPageLayout(this));
}
diff --git a/src/quicktemplates2/qquickpageindicator.cpp b/src/quicktemplates2/qquickpageindicator.cpp
index 92b6c0c0..b4c9c14c 100644
--- a/src/quicktemplates2/qquickpageindicator.cpp
+++ b/src/quicktemplates2/qquickpageindicator.cpp
@@ -247,7 +247,17 @@ void QQuickPageIndicator::setInteractive(bool interactive)
return;
d->interactive = interactive;
- setAcceptedMouseButtons(interactive ? Qt::LeftButton : Qt::NoButton);
+ if (interactive) {
+ setAcceptedMouseButtons(Qt::LeftButton);
+#if QT_CONFIG(cursor)
+ setCursor(Qt::ArrowCursor);
+#endif
+ } else {
+ setAcceptedMouseButtons(Qt::NoButton);
+#if QT_CONFIG(cursor)
+ unsetCursor();
+#endif
+ }
emit interactiveChanged();
}
diff --git a/src/quicktemplates2/qquickpane.cpp b/src/quicktemplates2/qquickpane.cpp
index 6cb81316..efa85e0c 100644
--- a/src/quicktemplates2/qquickpane.cpp
+++ b/src/quicktemplates2/qquickpane.cpp
@@ -123,6 +123,9 @@ QQuickPane::QQuickPane(QQuickItem *parent)
{
setFlag(QQuickItem::ItemIsFocusScope);
setAcceptedMouseButtons(Qt::AllButtons);
+#if QT_CONFIG(cursor)
+ setCursor(Qt::ArrowCursor);
+#endif
}
QQuickPane::QQuickPane(QQuickPanePrivate &dd, QQuickItem *parent)
@@ -130,6 +133,9 @@ QQuickPane::QQuickPane(QQuickPanePrivate &dd, QQuickItem *parent)
{
setFlag(QQuickItem::ItemIsFocusScope);
setAcceptedMouseButtons(Qt::AllButtons);
+#if QT_CONFIG(cursor)
+ setCursor(Qt::ArrowCursor);
+#endif
}
/*!
diff --git a/src/quicktemplates2/qquickrangeslider.cpp b/src/quicktemplates2/qquickrangeslider.cpp
index 1c74f9ee..2d3c464f 100644
--- a/src/quicktemplates2/qquickrangeslider.cpp
+++ b/src/quicktemplates2/qquickrangeslider.cpp
@@ -521,8 +521,11 @@ QQuickRangeSlider::QQuickRangeSlider(QQuickItem *parent)
d->first = new QQuickRangeSliderNode(0.0, this);
d->second = new QQuickRangeSliderNode(1.0, this);
- setAcceptedMouseButtons(Qt::LeftButton);
setFlag(QQuickItem::ItemIsFocusScope);
+ setAcceptedMouseButtons(Qt::LeftButton);
+#if QT_CONFIG(cursor)
+ setCursor(Qt::ArrowCursor);
+#endif
}
/*!
diff --git a/src/quicktemplates2/qquickscrollbar.cpp b/src/quicktemplates2/qquickscrollbar.cpp
index 8f4337ae..cb5c0001 100644
--- a/src/quicktemplates2/qquickscrollbar.cpp
+++ b/src/quicktemplates2/qquickscrollbar.cpp
@@ -196,9 +196,18 @@ void QQuickScrollBarPrivate::setInteractive(bool enabled)
return;
interactive = enabled;
- q->setAcceptedMouseButtons(interactive ? Qt::LeftButton : Qt::NoButton);
- if (!interactive)
+ if (interactive) {
+ q->setAcceptedMouseButtons(Qt::LeftButton);
+#if QT_CONFIG(cursor)
+ q->setCursor(Qt::ArrowCursor);
+#endif
+ } else {
+ q->setAcceptedMouseButtons(Qt::NoButton);
+#if QT_CONFIG(cursor)
+ q->unsetCursor();
+#endif
q->ungrabMouse();
+ }
emit q->interactiveChanged();
}
diff --git a/src/quicktemplates2/qquickslider.cpp b/src/quicktemplates2/qquickslider.cpp
index 266f883f..fbf9755d 100644
--- a/src/quicktemplates2/qquickslider.cpp
+++ b/src/quicktemplates2/qquickslider.cpp
@@ -243,6 +243,9 @@ QQuickSlider::QQuickSlider(QQuickItem *parent)
setActiveFocusOnTab(true);
setFocusPolicy(Qt::StrongFocus);
setAcceptedMouseButtons(Qt::LeftButton);
+#if QT_CONFIG(cursor)
+ setCursor(Qt::ArrowCursor);
+#endif
}
/*!
diff --git a/src/quicktemplates2/qquickspinbox.cpp b/src/quicktemplates2/qquickspinbox.cpp
index 657102c3..b70366ea 100644
--- a/src/quicktemplates2/qquickspinbox.cpp
+++ b/src/quicktemplates2/qquickspinbox.cpp
@@ -351,6 +351,9 @@ QQuickSpinBox::QQuickSpinBox(QQuickItem *parent)
setFlag(ItemIsFocusScope);
setFiltersChildMouseEvents(true);
setAcceptedMouseButtons(Qt::LeftButton);
+#if QT_CONFIG(cursor)
+ setCursor(Qt::ArrowCursor);
+#endif
}
/*!
@@ -470,6 +473,15 @@ void QQuickSpinBox::setEditable(bool editable)
if (d->editable == editable)
return;
+#if QT_CONFIG(cursor)
+ if (d->contentItem) {
+ if (editable)
+ d->contentItem->setCursor(Qt::IBeamCursor);
+ else
+ d->contentItem->unsetCursor();
+ }
+#endif
+
d->editable = editable;
emit editableChanged();
}
@@ -905,11 +917,16 @@ void QQuickSpinBox::itemChange(ItemChange change, const ItemChangeData &value)
void QQuickSpinBox::contentItemChange(QQuickItem *newItem, QQuickItem *oldItem)
{
+ Q_D(QQuickSpinBox);
if (QQuickTextInput *oldInput = qobject_cast<QQuickTextInput *>(oldItem))
disconnect(oldInput, &QQuickTextInput::inputMethodComposingChanged, this, &QQuickSpinBox::inputMethodComposingChanged);
if (newItem) {
newItem->setActiveFocusOnTab(true);
+#if QT_CONFIG(cursor)
+ if (d->editable)
+ newItem->setCursor(Qt::IBeamCursor);
+#endif
if (QQuickTextInput *newInput = qobject_cast<QQuickTextInput *>(newItem))
connect(newInput, &QQuickTextInput::inputMethodComposingChanged, this, &QQuickSpinBox::inputMethodComposingChanged);