summaryrefslogtreecommitdiff
path: root/sd/source
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2011-04-14 14:16:39 +0100
committerCaolán McNamara <caolanm@redhat.com>2011-04-14 14:25:34 +0100
commit36310c060512b8bd783c1c9873f7e9b03f070295 (patch)
tree3fced23769ab770f1e0d178bbc8858426ee32df5 /sd/source
parentc72dc8348e2a0802e0adb9c9a862feda764580fa (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.cxx14
-rw-r--r--sd/source/ui/slidesorter/shell/SlideSorterViewShell.cxx3
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(),