Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 5 additions & 6 deletions framework/accessibility/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -24,16 +24,19 @@ target_sources(muse_accessibility PRIVATE
accessibilitymodule.cpp
accessibilitymodule.h
iaccessible.h
iaccessibleapprootobject.h
iaccessibilitycontroller.h
iaccessibilityconfiguration.h
iaccessibilitycontextconfiguration.h
iqaccessibleinterfaceregister.h

api/accessibilityapi.cpp
api/accessibilityapi.h

internal/accessibilitycontroller.cpp
internal/accessibilitycontroller.h
internal/accessibleapprootobject.cpp
internal/accessibleapprootobject.h
internal/accessibleapprootinterface.cpp
internal/accessibleapprootinterface.h
internal/accessibleobject.cpp
internal/accessibleobject.h
internal/accessiblestub.cpp
Expand All @@ -42,10 +45,6 @@ target_sources(muse_accessibility PRIVATE
internal/accessibleiteminterface.h
internal/accessiblewindowinterface.cpp
internal/accessiblewindowinterface.h
internal/accessibilityconfiguration.cpp
internal/accessibilityconfiguration.h
internal/accessibilitycontextconfiguration.cpp
internal/accessibilitycontextconfiguration.h
internal/qaccessibleinterfaceregister.cpp
internal/qaccessibleinterfaceregister.h
)
Expand Down
37 changes: 27 additions & 10 deletions framework/accessibility/accessibilitymodule.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,16 @@
*/
#include "accessibilitymodule.h"

#include <QAccessible>

#include "modularity/ioc.h"

#include "iaccessibleapprootobject.h"
#include "internal/accessibilitycontroller.h"
#include "internal/accessibilityconfiguration.h"
#include "internal/accessibilitycontextconfiguration.h"
#include "internal/accessibleapprootobject.h"
#include "internal/accessiblestub.h"
#include "internal/qaccessibleinterfaceregister.h"
#include "iqaccessibleinterfaceregister.h"

#include "global/api/iapiregister.h"
#include "api/accessibilityapi.h"
Expand All @@ -43,20 +47,17 @@ std::string AccessibilityModule::moduleName() const

void AccessibilityModule::registerExports()
{
m_configuration = std::make_shared<AccessibilityConfiguration>();

globalIoc()->registerExport<IAccessibilityConfiguration>(mname, m_configuration);
globalIoc()->registerExport<IQAccessibleInterfaceRegister>(mname, new QAccessibleInterfaceRegister());
globalIoc()->registerExport<IAccessibleAppRootObject>(mname, new AccessibleAppRootObject());
}

void AccessibilityModule::resolveImports()
{
auto accr = globalIoc()->resolve<IQAccessibleInterfaceRegister>(mname);
if (accr) {
#ifndef Q_OS_LINUX // https://github.com/musescore/MuseScore/pull/32258#issuecomment-3972545361
accr->registerInterfaceGetter("QQuickWindow", AccessibilityController::accessibleInterface);
#endif
accr->registerInterfaceGetter("muse::accessibility::AccessibleObject", AccessibleObject::accessibleInterface);
accr->registerInterfaceGetter("muse::accessibility::AccessibleAppRootObject", AccessibleAppRootObject::accessibleInterface);
}
}

Expand All @@ -70,9 +71,27 @@ void AccessibilityModule::registerApi()
}
}

static QAccessibleInterface* accessibleFactory(const QString& classname, QObject* object)
{
auto accr = globalIoc()->resolve<IQAccessibleInterfaceRegister>("accessibility");
if (accr) {
auto interfaceGetter = accr->interfaceGetter(classname);
if (interfaceGetter) {
return interfaceGetter(object);
}
}

return AccessibleStub::accessibleInterface(object);
}

void AccessibilityModule::onInit(const IApplication::RunMode&)
{
m_configuration->init();
QAccessible::installFactory(accessibleFactory);

auto appRoot = globalIoc()->resolve<IAccessibleAppRootObject>(mname);
if (appRoot) {
appRoot->init();
}
}

IContextSetup* AccessibilityModule::newContext(const muse::modularity::ContextPtr& ctx) const
Expand All @@ -87,8 +106,6 @@ void AccessibilityContext::registerExports()
// It probably needs to be split into two separate classes.
m_controller = std::make_shared<AccessibilityController>(iocContext());
ioc()->registerExport<IAccessibilityController>(mname, m_controller);

ioc()->registerExport<IAccessibilityContextConfiguration>(mname, new AccessibilityContextConfiguration(iocContext()));
}

void AccessibilityContext::onPreInit(const IApplication::RunMode&)
Expand Down
4 changes: 0 additions & 4 deletions framework/accessibility/accessibilitymodule.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@
#include "modularity/imodulesetup.h"

namespace muse::accessibility {
class AccessibilityConfiguration;
class AccessibilityController;
class AccessibilityModule : public modularity::IModuleSetup
{
Expand All @@ -42,9 +41,6 @@ class AccessibilityModule : public modularity::IModuleSetup
void onInit(const IApplication::RunMode& mode) override;

modularity::IContextSetup* newContext(const muse::modularity::ContextPtr& ctx) const override;

private:
std::shared_ptr<AccessibilityConfiguration> m_configuration;
};

class AccessibilityContext : public modularity::IContextSetup
Expand Down
35 changes: 0 additions & 35 deletions framework/accessibility/iaccessibilityconfiguration.h

This file was deleted.

37 changes: 0 additions & 37 deletions framework/accessibility/iaccessibilitycontextconfiguration.h

This file was deleted.

2 changes: 2 additions & 0 deletions framework/accessibility/iaccessibilitycontroller.h
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,8 @@ class IAccessibilityController : MODULE_CONTEXT_INTERFACE
virtual bool needToVoicePanelInfo() const = 0;
virtual QString currentPanelAccessibleName() const = 0;

virtual bool isEnabled() const = 0;

virtual void setIgnoreQtAccessibilityEvents(bool ignore) = 0;
};
}
Expand Down
53 changes: 53 additions & 0 deletions framework/accessibility/iaccessibleapprootobject.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
/*
* SPDX-License-Identifier: GPL-3.0-only
* MuseScore-Studio-CLA-applies
*
* MuseScore Studio
* Music Composition & Notation
*
* Copyright (C) 2026 MuseScore Limited
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 3 as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
#pragma once

#include "modularity/imoduleinterface.h"

class QAccessibleInterface;
class QObject;
class QWindow;

namespace muse::accessibility {
class AccessibleObject;

class IAccessibleAppRootObject : MODULE_GLOBAL_INTERFACE
{
INTERFACE_ID(IAccessibleAppRootObject)
public:
virtual ~IAccessibleAppRootObject() = default;

virtual void init() = 0;

virtual QObject* asQObject() = 0;

virtual void registerWindow(QWindow* window, AccessibleObject* windowRoot) = 0;
virtual void unregisterWindow(QWindow* window) = 0;

virtual int windowCount() const = 0;
virtual QWindow* windowAt(int index) const = 0;
virtual AccessibleObject* windowRoot(QWindow* window) const = 0;
virtual QAccessibleInterface* windowIface(int index) const = 0;

virtual bool isAccessibilityActive() const = 0;
};
}
74 changes: 0 additions & 74 deletions framework/accessibility/internal/accessibilityconfiguration.cpp

This file was deleted.

41 changes: 0 additions & 41 deletions framework/accessibility/internal/accessibilityconfiguration.h

This file was deleted.

Loading