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 <plubius@libreoffice.org>
(cherry picked from commit 244bd399732017615bab2c34c2b29d6a80d27ae9)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/162007
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
Tested-by: Patrick Luby <plubius@libreoffice.org>
diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx
index 17e6435..95beb90 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(); }