diff --git a/src/framework/ui/view/abstractnavigation.cpp b/src/framework/ui/view/abstractnavigation.cpp index 88b5e13ea3682..49798d80ad298 100644 --- a/src/framework/ui/view/abstractnavigation.cpp +++ b/src/framework/ui/view/abstractnavigation.cpp @@ -287,9 +287,7 @@ void AbstractNavigation::setAccessible(AccessibleItem* accessible) void AbstractNavigation::setAccessibleParent(AccessibleItem* p) { - if (m_accessible) { - m_accessible->setAccessibleParent(p); - } + accessible()->setAccessibleParent(p); } bool AbstractNavigation::highlight() const diff --git a/src/framework/ui/view/navigationcontrol.cpp b/src/framework/ui/view/navigationcontrol.cpp index 5a784210cb646..f905f557e6674 100644 --- a/src/framework/ui/view/navigationcontrol.cpp +++ b/src/framework/ui/view/navigationcontrol.cpp @@ -38,7 +38,6 @@ NavigationControl::~NavigationControl() { if (m_panel) { m_panel->removeControl(this); - setAccessibleParent(nullptr); } } @@ -50,9 +49,8 @@ void NavigationControl::componentComplete() if (m_panel) { m_panel->componentComplete(); + AbstractNavigation::componentComplete(); } - - AbstractNavigation::componentComplete(); } QString NavigationControl::name() const @@ -161,14 +159,18 @@ void NavigationControl::setPanel(NavigationPanel* panel) m_panel = panel; + setAccessibleParent(m_panel ? m_panel->accessible() : nullptr); + if (m_panel) { m_panel->addControl(this); connect(m_panel, &NavigationPanel::destroyed, this, &NavigationControl::onPanelDestroyed); + + if (!isComponentCompleted()) { + AbstractNavigation::componentComplete(); + } } emit panelChanged(m_panel); - - setAccessibleParent(m_panel ? m_panel->accessible() : nullptr); } void NavigationControl::onPanelDestroyed() diff --git a/src/framework/ui/view/qmlaccessible.cpp b/src/framework/ui/view/qmlaccessible.cpp index 4b4797150b01f..71407b493f971 100644 --- a/src/framework/ui/view/qmlaccessible.cpp +++ b/src/framework/ui/view/qmlaccessible.cpp @@ -38,10 +38,6 @@ AccessibleItem::AccessibleItem(QObject* parent) AccessibleItem::~AccessibleItem() { - if (m_accessibleParent) { - m_accessibleParent->removeChild(this); - } - QList children = m_children; for (AccessibleItem* ch : children) { ch->setAccessibleParent(nullptr); @@ -51,6 +47,10 @@ AccessibleItem::~AccessibleItem() accessibilityController()->unreg(this); m_registred = false; } + + if (m_accessibleParent) { + m_accessibleParent->removeChild(this); + } } const IAccessible* AccessibleItem::accessibleParent() const @@ -501,10 +501,10 @@ void AccessibleItem::setAccessibleParent(AccessibleItem* p) if (m_accessibleParent) { m_accessibleParent->addChild(this); + m_accessiblePropertyChanged.send(IAccessible::Property::Parent, Val()); } emit accessiblePrnChanged(); - m_accessiblePropertyChanged.send(IAccessible::Property::Parent, Val()); } void AccessibleItem::setRole(MUAccessible::Role role) diff --git a/src/framework/ui/view/qmlaccessible.h b/src/framework/ui/view/qmlaccessible.h index 64bf65a626a30..6dea56c3b3e2f 100644 --- a/src/framework/ui/view/qmlaccessible.h +++ b/src/framework/ui/view/qmlaccessible.h @@ -98,7 +98,7 @@ class AccessibleItem : public QObject, public QQmlParserStatus, public accessibi Q_INTERFACES(QQmlParserStatus) - Inject accessibilityController = { this }; + Inject accessibilityController; public: STATE_PROPERTY(enabled, State::Enabled)