summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOliver Eftevaag <[email protected]>2025-03-25 13:32:43 +0100
committerOliver Eftevaag <[email protected]>2025-05-07 22:22:49 +0200
commitd8ac4cd8692e77c85ac8c6bcfa0a1556c7a72ee9 (patch)
tree254966c24ea43db05b3278bf3d65e6a85ac87e4e
parente808b38d4bb894f42b7dfe52f1ef67a0d48c23ff (diff)
Add constant property QStyleHints::accessibility
This property bundles together accessibility settings that can be used by styles to change how they draw different widgets and/or controls. The only property that it contains currently is contrastPreference. This property can be used to determine if the user has enabled a high contrast setting on the platform that the Qt application is running on. We might add more *accessibility* settings, like color blind hints, to QAccessibilityHints in the future. [ChangeLog][Gui][QStyleHints] Added class QAccessibilityHints, which can be accessed from QStyleHints. This singleton contains a single property contrastPreference which can be used to determine if the platform has enabled a high contrast setting or not. More accessibility settings might be added to QAccessibilityHints in the future. Task-number: QTBUG-133595 Change-Id: I93c6be81d29f65058eeda00328f4d9e966921de6 Reviewed-by: Morten Johan Sørvig <[email protected]>
-rw-r--r--src/gui/CMakeLists.txt1
-rw-r--r--src/gui/kernel/qaccessibilityhints.cpp61
-rw-r--r--src/gui/kernel/qaccessibilityhints.h30
-rw-r--r--src/gui/kernel/qaccessibilityhints_p.h37
-rw-r--r--src/gui/kernel/qguiapplication.cpp8
-rw-r--r--src/gui/kernel/qstylehints.cpp37
-rw-r--r--src/gui/kernel/qstylehints.h4
-rw-r--r--src/gui/kernel/qstylehints_p.h5
8 files changed, 176 insertions, 7 deletions
diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt
index 0c61640bcbb..ba77cb1cccc 100644
--- a/src/gui/CMakeLists.txt
+++ b/src/gui/CMakeLists.txt
@@ -90,6 +90,7 @@ qt_internal_add_module(Gui
image/qppmhandler.cpp image/qppmhandler_p.h
image/qxbmhandler.cpp image/qxbmhandler_p.h
image/qxpmhandler.cpp image/qxpmhandler_p.h
+ kernel/qaccessibilityhints.cpp kernel/qaccessibilityhints.h kernel/qaccessibilityhints_p.h
kernel/qclipboard.cpp kernel/qclipboard.h
kernel/qcursor.cpp kernel/qcursor.h kernel/qcursor_p.h
kernel/qeventpoint.cpp kernel/qeventpoint.h kernel/qeventpoint_p.h
diff --git a/src/gui/kernel/qaccessibilityhints.cpp b/src/gui/kernel/qaccessibilityhints.cpp
new file mode 100644
index 00000000000..0d072550004
--- /dev/null
+++ b/src/gui/kernel/qaccessibilityhints.cpp
@@ -0,0 +1,61 @@
+// Copyright (C) 2025 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#include "qaccessibilityhints.h"
+#include "qaccessibilityhints_p.h"
+
+QT_BEGIN_NAMESPACE
+
+void QAccessibilityHintsPrivate::updateContrastPreference(Qt::ContrastPreference contrastPreference)
+{
+ if (m_contrastPreference == contrastPreference)
+ return;
+ m_contrastPreference = contrastPreference;
+
+ Q_Q(QAccessibilityHints);
+ emit q->contrastPreferenceChanged(contrastPreference);
+}
+
+QAccessibilityHintsPrivate *QAccessibilityHintsPrivate::get(QAccessibilityHints *q)
+{
+ Q_ASSERT(q);
+ return q->d_func();
+}
+
+/*!
+ \class QAccessibilityHints
+ \since 6.10
+ \brief The QAccessibilityHints class contains platform specific accessibility hints and settings.
+ \inmodule QtGui
+
+ This class bundles together platform specific accessibility settings, and can be accessed from
+ \l QStyleHints::accessibility.
+
+ \sa QStyleHints
+*/
+
+QAccessibilityHints::QAccessibilityHints(QObject *parent)
+ : QObject(*(new QAccessibilityHintsPrivate), parent)
+{}
+
+/*!
+ \property QAccessibilityHints::contrastPreference
+ \brief The contrast mode set by the system.
+
+ This property can be used by the application to determine what contrast settings the system
+ is currently using.
+
+ Qt styles use this property in order to adjust palette colors and outlines.
+
+ \sa Qt::ColorScheme, QGuiApplication::palette(), QEvent::PaletteChange
+ \since 6.10
+*/
+Qt::ContrastPreference QAccessibilityHints::contrastPreference() const
+{
+ Q_D(const QAccessibilityHints);
+ return d->m_contrastPreference;
+}
+
+QT_END_NAMESPACE
+
+#include "moc_qaccessibilityhints.cpp"
diff --git a/src/gui/kernel/qaccessibilityhints.h b/src/gui/kernel/qaccessibilityhints.h
new file mode 100644
index 00000000000..c0d5908a23f
--- /dev/null
+++ b/src/gui/kernel/qaccessibilityhints.h
@@ -0,0 +1,30 @@
+// Copyright (C) 2025 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#ifndef QACCESSIBILITYHINTS_H
+#define QACCESSIBILITYHINTS_H
+
+#include <QtGui/qtguiglobal.h>
+#include <QtCore/qobject.h>
+
+QT_BEGIN_NAMESPACE
+
+class QAccessibilityHintsPrivate;
+
+class Q_GUI_EXPORT QAccessibilityHints : public QObject
+{
+ Q_OBJECT
+ Q_DECLARE_PRIVATE(QAccessibilityHints)
+ Q_PROPERTY(Qt::ContrastPreference contrastPreference READ contrastPreference NOTIFY contrastPreferenceChanged FINAL REVISION(6, 10))
+
+public:
+ explicit QAccessibilityHints(QObject *parent = nullptr);
+ Qt::ContrastPreference contrastPreference() const;
+
+Q_SIGNALS:
+ void contrastPreferenceChanged(Qt::ContrastPreference contrastPreference);
+};
+
+QT_END_NAMESPACE
+
+#endif // QACCESSIBILITYHINTS_H
diff --git a/src/gui/kernel/qaccessibilityhints_p.h b/src/gui/kernel/qaccessibilityhints_p.h
new file mode 100644
index 00000000000..49033f7aa11
--- /dev/null
+++ b/src/gui/kernel/qaccessibilityhints_p.h
@@ -0,0 +1,37 @@
+// Copyright (C) 2025 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#ifndef QACCESSIBILITYHINTS_P_H
+#define QACCESSIBILITYHINTS_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include "qaccessibilityhints.h"
+
+#include <QtCore/private/qobject_p.h>
+
+QT_BEGIN_NAMESPACE
+
+class QAccessibilityHintsPrivate : public QObjectPrivate
+{
+ Q_DECLARE_PUBLIC(QAccessibilityHints)
+public:
+ void updateContrastPreference(Qt::ContrastPreference contrastPreference);
+
+ static QAccessibilityHintsPrivate *get(QAccessibilityHints *q);
+private:
+ Qt::ContrastPreference m_contrastPreference = Qt::ContrastPreference::NoPreference;
+};
+
+QT_END_NAMESPACE
+
+#endif // QACCESSIBILITYHINTS_P_H
diff --git a/src/gui/kernel/qguiapplication.cpp b/src/gui/kernel/qguiapplication.cpp
index 3630537de26..3a494d6406a 100644
--- a/src/gui/kernel/qguiapplication.cpp
+++ b/src/gui/kernel/qguiapplication.cpp
@@ -1589,8 +1589,7 @@ void QGuiApplicationPrivate::createPlatformIntegration()
Q_UNUSED(platformExplicitlySelected);
init_platform(QLatin1StringView(platformName), platformPluginPath, platformThemeName, argc, argv);
- if (const QPlatformTheme *theme = platformTheme())
- QStyleHintsPrivate::get(QGuiApplication::styleHints())->updateColorScheme(theme->colorScheme());
+ QStyleHintsPrivate::get(QGuiApplication::styleHints())->update(platformTheme());
if (!icon.isEmpty())
forcedWindowIcon = QDir::isAbsolutePath(icon) ? QIcon(icon) : QIcon::fromTheme(icon);
@@ -2820,10 +2819,7 @@ void QGuiApplicationPrivate::processThemeChanged(QWindowSystemInterfacePrivate::
void QGuiApplicationPrivate::handleThemeChanged()
{
- const auto newColorScheme = platformTheme() ? platformTheme()->colorScheme()
- : Qt::ColorScheme::Unknown;
- QStyleHintsPrivate::get(QGuiApplication::styleHints())->updateColorScheme(newColorScheme);
-
+ QStyleHintsPrivate::get(QGuiApplication::styleHints())->update(platformTheme());
updatePalette();
QIconLoader::instance()->updateSystemTheme();
diff --git a/src/gui/kernel/qstylehints.cpp b/src/gui/kernel/qstylehints.cpp
index 174aa10be23..677567865f1 100644
--- a/src/gui/kernel/qstylehints.cpp
+++ b/src/gui/kernel/qstylehints.cpp
@@ -1,6 +1,7 @@
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+#include "qaccessibilityhints_p.h"
#include <qstylehints.h>
#include "qstylehints_p.h"
#include <qpa/qplatformintegration.h>
@@ -179,6 +180,22 @@ void QStyleHints::setColorScheme(Qt::ColorScheme scheme)
/*!
+ \property QStyleHints::accessibility
+ \brief The application's accessibility hints.
+
+ The accessibility hints encapsulates platform dependent accessibility settings
+ such as whether the user wishes the application to be in high contrast or not.
+
+ \sa QAccessibilityHints
+ \since 6.10
+*/
+const QAccessibilityHints *QStyleHints::accessibility() const
+{
+ Q_D(const QStyleHints);
+ return d->accessibilityHints();
+}
+
+/*!
Sets the \a mousePressAndHoldInterval.
\internal
\sa mousePressAndHoldInterval()
@@ -705,6 +722,26 @@ void QStyleHintsPrivate::updateColorScheme(Qt::ColorScheme colorScheme)
emit q->colorSchemeChanged(colorScheme);
}
+/*!
+ \internal
+
+ Helper function that updates the style hints when the theme changes
+*/
+void QStyleHintsPrivate::update(const QPlatformTheme *theme)
+{
+ Q_ASSERT(theme);
+ updateColorScheme(theme->colorScheme());
+ QAccessibilityHintsPrivate::get(accessibilityHints())->updateContrastPreference(theme->contrastPreference());
+}
+
+QAccessibilityHints *QStyleHintsPrivate::accessibilityHints() const
+{
+ Q_Q(const QStyleHints);
+ if (!m_accessibilityHints)
+ const_cast<QStyleHintsPrivate *>(this)->m_accessibilityHints = new QAccessibilityHints(const_cast<QStyleHints*>(q));
+ return m_accessibilityHints;
+}
+
QStyleHintsPrivate *QStyleHintsPrivate::get(QStyleHints *q)
{
Q_ASSERT(q);
diff --git a/src/gui/kernel/qstylehints.h b/src/gui/kernel/qstylehints.h
index 0f68f544ac6..31b8eea6f6d 100644
--- a/src/gui/kernel/qstylehints.h
+++ b/src/gui/kernel/qstylehints.h
@@ -9,9 +9,9 @@
QT_BEGIN_NAMESPACE
-
class QPlatformIntegration;
class QStyleHintsPrivate;
+class QAccessibilityHints;
class Q_GUI_EXPORT QStyleHints : public QObject
{
@@ -57,6 +57,7 @@ class Q_GUI_EXPORT QStyleHints : public QObject
Q_PROPERTY(Qt::ColorScheme colorScheme READ colorScheme WRITE setColorScheme
RESET unsetColorScheme NOTIFY colorSchemeChanged FINAL)
Q_PROPERTY(bool menuSelectionWraps READ menuSelectionWraps STORED false CONSTANT FINAL REVISION(6, 10))
+ Q_PROPERTY(const QAccessibilityHints* accessibility READ accessibility CONSTANT FINAL REVISION(6, 10))
public:
void setMouseDoubleClickInterval(int mouseDoubleClickInterval);
@@ -103,6 +104,7 @@ public:
Qt::ColorScheme colorScheme() const;
void setColorScheme(Qt::ColorScheme scheme);
void unsetColorScheme() { setColorScheme(Qt::ColorScheme::Unknown); }
+ const QAccessibilityHints* accessibility() const;
Q_SIGNALS:
void cursorFlashTimeChanged(int cursorFlashTime);
diff --git a/src/gui/kernel/qstylehints_p.h b/src/gui/kernel/qstylehints_p.h
index 497bf95cbf4..e4949fbeee9 100644
--- a/src/gui/kernel/qstylehints_p.h
+++ b/src/gui/kernel/qstylehints_p.h
@@ -19,6 +19,7 @@
#include <QPalette>
#include <private/qguiapplication_p.h>
#include "qstylehints.h"
+#include "qaccessibilityhints.h"
QT_BEGIN_NAMESPACE
@@ -43,11 +44,15 @@ public:
Qt::ColorScheme colorScheme() const { return m_colorScheme; }
void updateColorScheme(Qt::ColorScheme colorScheme);
+ void update(const QPlatformTheme *theme);
+
+ QAccessibilityHints *accessibilityHints() const;
static QStyleHintsPrivate *get(QStyleHints *q);
private:
Qt::ColorScheme m_colorScheme = Qt::ColorScheme::Unknown;
+ QAccessibilityHints* m_accessibilityHints = nullptr;
};
QT_END_NAMESPACE