summaryrefslogtreecommitdiff
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
commit389ab0aee390bc5532e9e1ba5b4f2035ac7d6d5e (patch)
tree429553690ceefc5e9feeb273792d8fbf5829461e
parentf5b0b5f07612dae214d8ded64dbe27510632367c (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.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 9efd94a83..15e65d7c9 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 12ba6f8ad..c0a90c930 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(),