vcl/source/app/salvtables.cxx |   13 +++++++++++++
 1 file changed, 13 insertions(+)

New commits:
commit a93cd8a77777e9704617d82db2d421154de3ff92
Author:     Patrick Luby <plub...@libreoffice.org>
AuthorDate: Wed Jan 10 19:30:17 2024 -0500
Commit:     Patrick Luby <plub...@libreoffice.org>
CommitDate: Sun Jan 14 23:20:26 2024 +0100

    tdf#159089 dispose custom accessible here and unset for `m_xDrawingArea`
    
    rather than waiting for `m_xDrawingArea` to get disposed, to prevent
    unsafe use of the now potentially non-functional accessible until it
    gets disposed with the VclDrawingArea
    
    Change-Id: I5b8720ac4d5ed41cb1775b0142b17d198e9f036d
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/161903
    Tested-by: Jenkins
    Reviewed-by: Patrick Luby <plub...@libreoffice.org>
    (cherry picked from commit 244bd399732017615bab2c34c2b29d6a80d27ae9)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/162007
    Reviewed-by: Michael Weghorn <m.wegh...@posteo.de>
    Tested-by: Patrick Luby <plub...@libreoffice.org>

diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx
index 17e6435c3fc2..95beb907f6c0 100644
--- a/vcl/source/app/salvtables.cxx
+++ b/vcl/source/app/salvtables.cxx
@@ -6340,6 +6340,19 @@ SalInstanceDrawingArea::~SalInstanceDrawingArea()
     m_xDrawingArea->SetResizeHdl(Link<const Size&, void>());
     m_xDrawingArea->SetPaintHdl(
         Link<std::pair<vcl::RenderContext&, const tools::Rectangle&>, void>());
+
+    // tdf#159089 dispose custom accessible here and unset for `m_xDrawingArea`
+    // rather than waiting for `m_xDrawingArea` to get disposed, to prevent
+    // unsafe use of the now potentially non-functional accessible until it
+    // gets disposed with the VclDrawingArea
+    css::uno::Reference<css::accessibility::XAccessible> xAccessible
+        = m_xDrawingArea->GetAccessible();
+    css::uno::Reference<css::lang::XComponent> xComp(xAccessible, 
css::uno::UNO_QUERY);
+    if (xComp.is())
+    {
+        xComp->dispose();
+        m_xDrawingArea->SetAccessible(nullptr);
+    }
 }
 
 OutputDevice& SalInstanceDrawingArea::get_ref_device() { return 
*m_xDrawingArea->GetOutDev(); }

Reply via email to