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 /sd/source | |
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)
Diffstat (limited to 'sd/source')
-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(), |