diff options
-rw-r--r-- | src/gui/kernel/qguiapplication.cpp | 17 | ||||
-rw-r--r-- | src/widgets/kernel/qwidget_qpa.cpp | 9 |
2 files changed, 17 insertions, 9 deletions
diff --git a/src/gui/kernel/qguiapplication.cpp b/src/gui/kernel/qguiapplication.cpp index 7e7997d7eb..84f22de322 100644 --- a/src/gui/kernel/qguiapplication.cpp +++ b/src/gui/kernel/qguiapplication.cpp @@ -2328,6 +2328,15 @@ static inline void applyCursor(const QList<QWindow *> &l, const QCursor &c) } } +static inline void applyWindowCursor(const QList<QWindow *> &l) +{ + for (int i = 0; i < l.size(); ++i) { + QWindow *w = l.at(i); + if (w->handle() && w->windowType() != Qt::Desktop) + applyCursor(w, w->cursor()); + } +} + /*! \fn void QGuiApplication::setOverrideCursor(const QCursor &cursor) @@ -2376,8 +2385,12 @@ void QGuiApplication::restoreOverrideCursor() if (qGuiApp->d_func()->cursor_list.isEmpty()) return; qGuiApp->d_func()->cursor_list.removeFirst(); - QCursor c(qGuiApp->d_func()->cursor_list.value(0, QCursor())); - applyCursor(QGuiApplicationPrivate::window_list, c); + if (qGuiApp->d_func()->cursor_list.size() > 0) { + QCursor c(qGuiApp->d_func()->cursor_list.value(0)); + applyCursor(QGuiApplicationPrivate::window_list, c); + } else { + applyWindowCursor(QGuiApplicationPrivate::window_list); + } } #endif// QT_NO_CURSOR diff --git a/src/widgets/kernel/qwidget_qpa.cpp b/src/widgets/kernel/qwidget_qpa.cpp index c6680eacec..86d8da254a 100644 --- a/src/widgets/kernel/qwidget_qpa.cpp +++ b/src/widgets/kernel/qwidget_qpa.cpp @@ -1064,9 +1064,7 @@ void QWidgetPrivate::setModal_sys() static inline void applyCursor(QWidget *w, QCursor c) { if (QWindow *window = w->windowHandle()) - if (const QScreen *screen = window->screen()) - if (QPlatformCursor *cursor = screen->handle()->cursor()) - cursor->changeCursor(&c, window); + window->setCursor(c); } void qt_qpa_set_cursor(QWidget *w, bool force) @@ -1097,10 +1095,7 @@ void qt_qpa_set_cursor(QWidget *w, bool force) return; if (w->isWindow() || w->testAttribute(Qt::WA_SetCursor)) { - QCursor *oc = QApplication::overrideCursor(); - if (oc) - applyCursor(nativeParent, *oc); - else if (w->isEnabled()) + if (w->isEnabled()) applyCursor(nativeParent, w->cursor()); else // Enforce the windows behavior of clearing the cursor on |