diff options
author | Caolán McNamara <caolanm@redhat.com> | 2011-04-14 14:16:39 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2011-04-14 14:25:34 +0100 |
commit | 36310c060512b8bd783c1c9873f7e9b03f070295 (patch) | |
tree | 3fced23769ab770f1e0d178bbc8858426ee32df5 | |
parent | c72dc8348e2a0802e0adb9c9a862feda764580fa (diff) |
fix accessibility crash
two different callbacks connected to the same destination where
that destination unset the callback id of one of the callbacks
(cherry picked from commit 0929504217c225358388c911d3f81d7626c7776c)
-rw-r--r-- | sd/source/ui/accessibility/AccessibleSlideSorterView.cxx | 14 | ||||
-rw-r--r-- | sd/source/ui/slidesorter/shell/SlideSorterViewShell.cxx | 3 |
2 files changed, 14 insertions, 3 deletions
diff --git a/sd/source/ui/accessibility/AccessibleSlideSorterView.cxx b/sd/source/ui/accessibility/AccessibleSlideSorterView.cxx index a4e6eae35faa..44476979b782 100644 --- a/sd/source/ui/accessibility/AccessibleSlideSorterView.cxx +++ b/sd/source/ui/accessibility/AccessibleSlideSorterView.cxx @@ -94,6 +94,7 @@ public: DECL_LINK(SelectionChangeListener, void*); DECL_LINK(BroadcastSelectionChange, void*); DECL_LINK(FocusChangeListener, void*); + DECL_LINK(VisibilityChangeListener, void*); DECL_LINK(UpdateChildrenCallback, void*); private: @@ -970,7 +971,7 @@ void AccessibleSlideSorterView::Implementation::ConnectListeners (void) mrSlideSorter.GetController().GetFocusManager().AddFocusChangeListener( LINK(this,AccessibleSlideSorterView::Implementation,FocusChangeListener)); mrSlideSorter.GetView().AddVisibilityChangeListener( - LINK(this,AccessibleSlideSorterView::Implementation,UpdateChildrenCallback)); + LINK(this,AccessibleSlideSorterView::Implementation,VisibilityChangeListener)); } @@ -983,7 +984,7 @@ void AccessibleSlideSorterView::Implementation::ReleaseListeners (void) mrSlideSorter.GetController().GetSelectionManager()->RemoveSelectionChangeListener( LINK(this,AccessibleSlideSorterView::Implementation,SelectionChangeListener)); mrSlideSorter.GetView().RemoveVisibilityChangeListener( - LINK(this,AccessibleSlideSorterView::Implementation,UpdateChildrenCallback)); + LINK(this,AccessibleSlideSorterView::Implementation,VisibilityChangeListener)); if (mpWindow != NULL) mpWindow->RemoveEventListener( @@ -1132,6 +1133,15 @@ IMPL_LINK(AccessibleSlideSorterView::Implementation, UpdateChildrenCallback, voi +IMPL_LINK(AccessibleSlideSorterView::Implementation, VisibilityChangeListener, void*, EMPTYARG ) +{ + UpdateChildren(); + return 1; +} + + + + } // end of namespace ::accessibility /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sd/source/ui/slidesorter/shell/SlideSorterViewShell.cxx b/sd/source/ui/slidesorter/shell/SlideSorterViewShell.cxx index 11c002c97d1f..7719008b3fe2 100644 --- a/sd/source/ui/slidesorter/shell/SlideSorterViewShell.cxx +++ b/sd/source/ui/slidesorter/shell/SlideSorterViewShell.cxx @@ -279,12 +279,13 @@ Reference<drawing::XDrawSubController> SlideSorterViewShell::CreateSubController ::com::sun::star::accessibility::XAccessible> SlideSorterViewShell::CreateAccessibleDocumentView (::sd::Window* pWindow) { - OSL_ASSERT(mpSlideSorter.get()!=NULL); // When the view is not set then the initialization is not yet complete // and we can not yet provide an accessibility object. if (mpView == NULL || mpSlideSorter.get() == NULL) return NULL; + OSL_ASSERT(mpSlideSorter.get()!=NULL); + ::accessibility::AccessibleSlideSorterView *pAccessibleView = new ::accessibility::AccessibleSlideSorterView( *mpSlideSorter.get(), |