diff options
Diffstat (limited to 'src/gui/accessible/linux/dbusconnection.cpp')
-rw-r--r-- | src/gui/accessible/linux/dbusconnection.cpp | 91 |
1 files changed, 34 insertions, 57 deletions
diff --git a/src/gui/accessible/linux/dbusconnection.cpp b/src/gui/accessible/linux/dbusconnection.cpp index 45ddc8e496..620575cc98 100644 --- a/src/gui/accessible/linux/dbusconnection.cpp +++ b/src/gui/accessible/linux/dbusconnection.cpp @@ -1,41 +1,5 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtGui module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2022 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 @@ -53,22 +17,32 @@ QT_BEGIN_NAMESPACE +using namespace Qt::StringLiterals; + /* note: do not change these to QStringLiteral; we are unloaded before QtDBus is done using the strings. */ -#define A11Y_SERVICE QLatin1String("org.a11y.Bus") -#define A11Y_PATH QLatin1String("/org/a11y/bus") +#define A11Y_SERVICE "org.a11y.Bus"_L1 +#define A11Y_PATH "/org/a11y/bus"_L1 /*! - \class DBusConnection + \class QAtSpiDBusConnection \internal \brief Connects to the accessibility dbus. This is usually a different bus from the session bus. */ -DBusConnection::DBusConnection(QObject *parent) +QAtSpiDBusConnection::QAtSpiDBusConnection(QObject *parent) : QObject(parent), m_a11yConnection(QString()), m_enabled(false) { + // If the bus is explicitly set via env var it overrides everything else. + QByteArray addressEnv = qgetenv("AT_SPI_BUS_ADDRESS"); + if (!addressEnv.isEmpty()) { + m_enabled = true; + connectA11yBus(QString::fromLocal8Bit(addressEnv)); + return; + } + // Start monitoring if "org.a11y.Bus" is registered as DBus service. QDBusConnection c = QDBusConnection::sessionBus(); if (!c.isConnected()) { @@ -82,15 +56,17 @@ DBusConnection::DBusConnection(QObject *parent) if (c.interface()->isServiceRegistered(A11Y_SERVICE)) serviceRegistered(); - // In addition try if there is an xatom exposing the bus address, this allows applications run as root to work - QString address = getAddressFromXCB(); - if (!address.isEmpty()) { - m_enabled = true; - connectA11yBus(address); + if (QGuiApplication::platformName().startsWith("xcb"_L1)) { + // In addition try if there is an xatom exposing the bus address, this allows applications run as root to work + QString address = getAddressFromXCB(); + if (!address.isEmpty()) { + m_enabled = true; + connectA11yBus(address); + } } } -QString DBusConnection::getAddressFromXCB() +QString QAtSpiDBusConnection::getAddressFromXCB() { QGuiApplication *app = qobject_cast<QGuiApplication *>(QCoreApplication::instance()); if (!app) @@ -109,7 +85,7 @@ QString DBusConnection::getAddressFromXCB() // We have the a11y registry on the session bus. // Subscribe to updates about a11y enabled state. // Find out the bus address -void DBusConnection::serviceRegistered() +void QAtSpiDBusConnection::serviceRegistered() { // listen to enabled changes QDBusConnection c = QDBusConnection::sessionBus(); @@ -128,9 +104,8 @@ void DBusConnection::serviceRegistered() emit enabledChanged(m_enabled); } else { QDBusConnection c = QDBusConnection::sessionBus(); - QDBusMessage m = QDBusMessage::createMethodCall(QLatin1String("org.a11y.Bus"), - QLatin1String("/org/a11y/bus"), - QLatin1String("org.a11y.Bus"), QLatin1String("GetAddress")); + QDBusMessage m = QDBusMessage::createMethodCall(A11Y_SERVICE, A11Y_PATH, A11Y_SERVICE, + "GetAddress"_L1); c.callWithCallback(m, this, SLOT(connectA11yBus(QString)), SLOT(dbusError(QDBusError))); } } @@ -138,24 +113,24 @@ void DBusConnection::serviceRegistered() // connect(a11yStatus, ); QtDbus doesn't support notifications for property changes yet } -void DBusConnection::serviceUnregistered() +void QAtSpiDBusConnection::serviceUnregistered() { emit enabledChanged(false); } -void DBusConnection::connectA11yBus(const QString &address) +void QAtSpiDBusConnection::connectA11yBus(const QString &address) { if (address.isEmpty()) { qWarning("Could not find Accessibility DBus address."); return; } - m_a11yConnection = QDBusConnection(QDBusConnection::connectToBus(address, QLatin1String("a11y"))); + m_a11yConnection = QDBusConnection(QDBusConnection::connectToBus(address, "a11y"_L1)); if (m_enabled) emit enabledChanged(true); } -void DBusConnection::dbusError(const QDBusError &error) +void QAtSpiDBusConnection::dbusError(const QDBusError &error) { qWarning() << "Accessibility encountered a DBus error:" << error; } @@ -164,9 +139,11 @@ void DBusConnection::dbusError(const QDBusError &error) Returns the DBus connection that got established. Or an invalid connection if not yet connected. */ -QDBusConnection DBusConnection::connection() const +QDBusConnection QAtSpiDBusConnection::connection() const { return m_a11yConnection; } QT_END_NAMESPACE + +#include "moc_dbusconnection_p.cpp" |