You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
99 lines
2.5 KiB
99 lines
2.5 KiB
/* |
|
KWin - the KDE window manager |
|
This file is part of the KDE project. |
|
|
|
SPDX-FileCopyrightText: 2020 Vlad Zahorodnii <vlad.zahorodnii@kde.org> |
|
|
|
SPDX-License-Identifier: GPL-2.0-or-later |
|
*/ |
|
|
|
#include "accessibilityintegration.h" |
|
|
|
using namespace QAccessibleClient; // Whatever, sue me... |
|
|
|
namespace KWin |
|
{ |
|
|
|
ZoomAccessibilityIntegration::ZoomAccessibilityIntegration(QObject *parent) |
|
: QObject(parent) |
|
{ |
|
} |
|
|
|
void ZoomAccessibilityIntegration::setFocusTrackingEnabled(bool enabled) |
|
{ |
|
if (m_isFocusTrackingEnabled == enabled) { |
|
return; |
|
} |
|
m_isFocusTrackingEnabled = enabled; |
|
updateAccessibilityRegistry(); |
|
} |
|
|
|
bool ZoomAccessibilityIntegration::isFocusTrackingEnabled() const |
|
{ |
|
return m_isFocusTrackingEnabled; |
|
} |
|
|
|
void ZoomAccessibilityIntegration::setTextCaretTrackingEnabled(bool enabled) |
|
{ |
|
if (m_isTextCaretTrackingEnabled == enabled) { |
|
return; |
|
} |
|
m_isTextCaretTrackingEnabled = enabled; |
|
updateAccessibilityRegistry(); |
|
} |
|
|
|
bool ZoomAccessibilityIntegration::isTextCaretTrackingEnabled() const |
|
{ |
|
return m_isTextCaretTrackingEnabled; |
|
} |
|
|
|
void ZoomAccessibilityIntegration::updateAccessibilityRegistry() |
|
{ |
|
Registry::EventListeners eventListeners = Registry::NoEventListeners; |
|
|
|
if (isTextCaretTrackingEnabled()) { |
|
eventListeners |= Registry::TextCaretMoved; |
|
} |
|
if (isFocusTrackingEnabled()) { |
|
eventListeners |= Registry::Focus; |
|
} |
|
|
|
if (eventListeners == Registry::NoEventListeners) { |
|
destroyAccessibilityRegistry(); |
|
return; |
|
} |
|
if (!m_accessibilityRegistry) { |
|
createAccessibilityRegistry(); |
|
} |
|
|
|
m_accessibilityRegistry->subscribeEventListeners(eventListeners); |
|
} |
|
|
|
void ZoomAccessibilityIntegration::createAccessibilityRegistry() |
|
{ |
|
m_accessibilityRegistry = new Registry(this); |
|
|
|
connect(m_accessibilityRegistry, &Registry::textCaretMoved, |
|
this, &ZoomAccessibilityIntegration::slotFocusChanged); |
|
connect(m_accessibilityRegistry, &Registry::focusChanged, |
|
this, &ZoomAccessibilityIntegration::slotFocusChanged); |
|
} |
|
|
|
void ZoomAccessibilityIntegration::destroyAccessibilityRegistry() |
|
{ |
|
if (!m_accessibilityRegistry) { |
|
return; |
|
} |
|
|
|
disconnect(m_accessibilityRegistry, nullptr, this, nullptr); |
|
|
|
m_accessibilityRegistry->deleteLater(); |
|
m_accessibilityRegistry = nullptr; |
|
} |
|
|
|
void ZoomAccessibilityIntegration::slotFocusChanged(const AccessibleObject &object) |
|
{ |
|
emit focusPointChanged(object.focusPoint()); |
|
} |
|
|
|
} // namespace KWin
|
|
|