diff options
author | Szymon Kłos <szymon.klos@collabora.com> | 2022-03-01 16:19:07 +0100 |
---|---|---|
committer | Szymon Kłos <szymon.klos@collabora.com> | 2022-03-14 16:19:54 +0100 |
commit | e9ddfd06fc706b4be2955c6aa462a41ec22bce93 (patch) | |
tree | bf8955a0a94fb70566e2b43cba46765d13358eb4 /vcl/jsdialog | |
parent | 06de346ffb712e43c9e1b9527a08c42349e78598 (diff) |
jsdialog: enable Accessibility Check dialog
- fix crash due to wrong type for label
- deduplicate widgets with the same id in one dialog/builder
- refresh on box reordering
Change-Id: I6993552342a3f139de40c3f87243bdf4e0617fc5
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/130797
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com>
Reviewed-by: Henry Castro <hcastro@collabora.com>
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/131120
Tested-by: Szymon Kłos <szymon.klos@collabora.com>
Reviewed-by: Szymon Kłos <szymon.klos@collabora.com>
Diffstat (limited to 'vcl/jsdialog')
-rw-r--r-- | vcl/jsdialog/enabled.cxx | 3 | ||||
-rw-r--r-- | vcl/jsdialog/jsdialogbuilder.cxx | 39 |
2 files changed, 35 insertions, 7 deletions
diff --git a/vcl/jsdialog/enabled.cxx b/vcl/jsdialog/enabled.cxx index 6de05a65c9eb..9aa8d19db108 100644 --- a/vcl/jsdialog/enabled.cxx +++ b/vcl/jsdialog/enabled.cxx @@ -54,7 +54,8 @@ bool isBuilderEnabled(std::u16string_view rUIFile, bool bMobile) || rUIFile == u"modules/scalc/ui/textimportcsv.ui" || rUIFile == u"xmlsec/ui/digitalsignaturesdialog.ui" || rUIFile == u"xmlsec/ui/viewcertdialog.ui" || rUIFile == u"xmlsec/ui/certgeneral.ui" - || rUIFile == u"xmlsec/ui/certpage.ui") + || rUIFile == u"xmlsec/ui/certpage.ui" || rUIFile == u"svx/ui/accessibilitycheckdialog.ui" + || rUIFile == u"svx/ui/accessibilitycheckentry.ui") { return true; } diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx index 693ddd6232c4..7ca9cceb16c9 100644 --- a/vcl/jsdialog/jsdialogbuilder.cxx +++ b/vcl/jsdialog/jsdialogbuilder.cxx @@ -704,10 +704,31 @@ void JSInstanceBuilder::InsertWindowToMap(const std::string& nWindowId) GetLOKWeldWidgetsMap().insert(std::map<std::string, WidgetMap>::value_type(nWindowId, map)); } -void JSInstanceBuilder::RememberWidget(const OString& id, weld::Widget* pWidget) +void JSInstanceBuilder::RememberWidget(OString sId, weld::Widget* pWidget) { - RememberWidget(getMapIdFromWindowId(), id, pWidget); - m_aRememberedWidgets.push_back(id.getStr()); + // do not use the same id for two widgets inside one builder + // exception is sidebar where we base our full invalidation on that "Panel" id sharing + if (m_sTypeOfJSON != "sidebar") + { + static std::atomic<unsigned long long int> nNotRepeatIndex = 0; + auto aWindowIt = GetLOKWeldWidgetsMap().find(getMapIdFromWindowId()); + if (aWindowIt != GetLOKWeldWidgetsMap().end()) + { + auto aWidgetIt = aWindowIt->second.find(sId); + if (aWidgetIt != aWindowIt->second.end()) + { + unsigned long long int nIndex = nNotRepeatIndex++; + // found duplicated it -> add some number to the id and apply to the widget + sId = sId + OString::number(nIndex); + SalInstanceWidget* pSalWidget = dynamic_cast<SalInstanceWidget*>(pWidget); + vcl::Window* pVclWidget = pSalWidget->getWidget(); + pVclWidget->set_id(pVclWidget->get_id() + OUString::number(nIndex)); + } + } + } + + RememberWidget(getMapIdFromWindowId(), sId, pWidget); + m_aRememberedWidgets.push_back(sId.getStr()); } void JSInstanceBuilder::RememberWidget(const std::string& nWindowId, const OString& id, @@ -825,7 +846,7 @@ std::unique_ptr<weld::Container> JSInstanceBuilder::weld_container(const OString std::unique_ptr<weld::Label> JSInstanceBuilder::weld_label(const OString& id) { - ::FixedText* pLabel = m_xBuilder->get<FixedText>(id); + Control* pLabel = m_xBuilder->get<Control>(id); auto pWeldWidget = std::make_unique<JSLabel>(this, pLabel, this, false); if (pWeldWidget) @@ -1158,9 +1179,9 @@ JSContainer::JSContainer(JSDialogSender* pSender, vcl::Window* pContainer, { } -JSLabel::JSLabel(JSDialogSender* pSender, FixedText* pLabel, SalInstanceBuilder* pBuilder, +JSLabel::JSLabel(JSDialogSender* pSender, Control* pLabel, SalInstanceBuilder* pBuilder, bool bTakeOwnership) - : JSWidget<SalInstanceLabel, FixedText>(pSender, pLabel, pBuilder, bTakeOwnership) + : JSWidget<SalInstanceLabel, Control>(pSender, pLabel, pBuilder, bTakeOwnership) { } @@ -1745,6 +1766,12 @@ JSBox::JSBox(JSDialogSender* pSender, VclBox* pBox, SalInstanceBuilder* pBuilder { } +void JSBox::reorder_child(weld::Widget* pWidget, int nNewPosition) +{ + SalInstanceBox::reorder_child(pWidget, nNewPosition); + sendUpdate(); +} + JSImage::JSImage(JSDialogSender* pSender, FixedImage* pImage, SalInstanceBuilder* pBuilder, bool bTakeOwnership) : JSWidget<SalInstanceImage, FixedImage>(pSender, pImage, pBuilder, bTakeOwnership) |