Kaydet (Commit) 5f345e3a authored tarafından Michael Stahl's avatar Michael Stahl Kaydeden (comit) Eike Rathke

tdf#108838 accessibility: fix horrible memory leak in AccessibleTabBarBase

Reproducing tdf#108833 failed because applying the Master Page takes
> 2 hours; the time is spent calling vcl::Window listeners, of which
there were some 39525 after a couple minutes, almost all of which
AccessibleTabBarBase.

AccessibleTabBarBase::WindowEventListener() has an inverted condition
that suppresses the event that is generated from TabBar::Clear()
and thus when DrawViewShell::ResetActualPage() calls Clear() no
AccessibleTabBarPage is removed but then the InsertPage() calls create
duplicate objects that again register as listeners.

The condition is obviously inverted given the CVS commit message:

1.2.88.1
log
@#135353# do not pass VCLEVENT_TABBAR_PAGEREMOVED (all) to objects other than AccessibleTabBarPageList
@
text
a69 8

        if( ( pWinEvent->GetId() == VCLEVENT_TABBAR_PAGEREMOVED ) &&
            ( (sal_uInt16)(sal_IntPtr) pWinEvent->GetData() == TAB_PAGE_NOTFOUND ) &&
            ( dynamic_cast< AccessibleTabBarPageList *> (this) != NULL ) )
        {
            return 0;
        }

Change-Id: I2a3b86bbd0f0251a966f41b316a3b313517df24f
(cherry picked from commit b2b08544)
Reviewed-on: https://gerrit.libreoffice.org/39416Tested-by: 's avatarJenkins <ci@libreoffice.org>
Reviewed-by: 's avatarNoel Grandin <noel.grandin@collabora.co.uk>
Reviewed-by: 's avatarEike Rathke <erack@redhat.com>
üst 665491f7
...@@ -50,7 +50,7 @@ IMPL_LINK( AccessibleTabBarBase, WindowEventListener, VclWindowEvent&, rEvent, v ...@@ -50,7 +50,7 @@ IMPL_LINK( AccessibleTabBarBase, WindowEventListener, VclWindowEvent&, rEvent, v
if( ( rEvent.GetId() == VCLEVENT_TABBAR_PAGEREMOVED ) && if( ( rEvent.GetId() == VCLEVENT_TABBAR_PAGEREMOVED ) &&
( (sal_uInt16)reinterpret_cast<sal_IntPtr>(rEvent.GetData()) == TabBar::PAGE_NOT_FOUND ) && ( (sal_uInt16)reinterpret_cast<sal_IntPtr>(rEvent.GetData()) == TabBar::PAGE_NOT_FOUND ) &&
( dynamic_cast< AccessibleTabBarPageList *> (this) != nullptr ) ) (dynamic_cast<AccessibleTabBarPageList *>(this) == nullptr))
{ {
return; return;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment