diff options
author | Vlad Zahorodnii <vlad.zahorodnii@kde.org> | 2022-12-23 15:30:22 +0200 |
---|---|---|
committer | Vlad Zahorodnii <vlad.zahorodnii@kde.org> | 2023-01-03 16:08:27 +0200 |
commit | 1c25db5e3f23d48e330170f41b94fbd532932b02 (patch) | |
tree | 9012298c3d57f98977627321c03edc987ecdf2d2 /src/client/qwaylandinputdevice.cpp | |
parent | e5510b2b043c40a1ba615c3c9756a0f4c15e037f (diff) | |
download | qtwayland-1c25db5e3f23d48e330170f41b94fbd532932b02.tar.gz |
Client: Port to QPlatformTheme::{MouseCursorTheme,MouseCursorSize}
It allows the platform theme to specify the preferred cursor theme and
cursor size without resorting to hacks such as setting XCURSOR_THEME and
XCURSOR_SIZE environment variables.
Pick-to: 6.5
Change-Id: I9e44f9c6dddbb5d730f8ac092f2c11fdbccf8d27
Reviewed-by: Liang Qi <liang.qi@qt.io>
Diffstat (limited to 'src/client/qwaylandinputdevice.cpp')
-rw-r--r-- | src/client/qwaylandinputdevice.cpp | 33 |
1 files changed, 17 insertions, 16 deletions
diff --git a/src/client/qwaylandinputdevice.cpp b/src/client/qwaylandinputdevice.cpp index 724243cc..30f19757 100644 --- a/src/client/qwaylandinputdevice.cpp +++ b/src/client/qwaylandinputdevice.cpp @@ -36,6 +36,7 @@ #include <QtGui/private/qguiapplication_p.h> #include <qpa/qplatformwindow.h> #include <qpa/qplatforminputcontext.h> +#include <qpa/qplatformtheme.h> #include <QDebug> #include <unistd.h> @@ -229,19 +230,6 @@ private: QPoint m_hotspot; }; -QString QWaylandInputDevice::Pointer::cursorThemeName() const -{ - static QString themeName = qEnvironmentVariable("XCURSOR_THEME", QStringLiteral("default")); - return themeName; -} - -int QWaylandInputDevice::Pointer::cursorSize() const -{ - constexpr int defaultCursorSize = 24; - static const int xCursorSize = qEnvironmentVariableIntValue("XCURSOR_SIZE"); - return xCursorSize > 0 ? xCursorSize : defaultCursorSize; -} - int QWaylandInputDevice::Pointer::idealCursorScale() const { if (seat()->mQDisplay->compositor()->version() < 3) { @@ -258,17 +246,30 @@ int QWaylandInputDevice::Pointer::idealCursorScale() const void QWaylandInputDevice::Pointer::updateCursorTheme() { + QString cursorThemeName; + QSize cursorSize; + + if (const QPlatformTheme *platformTheme = QGuiApplicationPrivate::platformTheme()) { + cursorThemeName = platformTheme->themeHint(QPlatformTheme::MouseCursorTheme).toString(); + cursorSize = platformTheme->themeHint(QPlatformTheme::MouseCursorSize).toSize(); + } + + if (cursorThemeName.isEmpty()) + cursorThemeName = QStringLiteral("default"); + if (cursorSize.isEmpty()) + cursorSize = QSize(24, 24); + int scale = idealCursorScale(); - int pixelSize = cursorSize() * scale; + int pixelSize = cursorSize.width() * scale; auto *display = seat()->mQDisplay; - mCursor.theme = display->loadCursorTheme(cursorThemeName(), pixelSize); + mCursor.theme = display->loadCursorTheme(cursorThemeName, pixelSize); if (!mCursor.theme) return; // A warning has already been printed in loadCursorTheme if (auto *arrow = mCursor.theme->cursor(Qt::ArrowCursor)) { int arrowPixelSize = qMax(arrow->images[0]->width, arrow->images[0]->height); // Not all cursor themes are square - while (scale > 1 && arrowPixelSize / scale < cursorSize()) + while (scale > 1 && arrowPixelSize / scale < cursorSize.width()) --scale; } else { qCWarning(lcQpaWayland) << "Cursor theme does not support the arrow cursor"; |