[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[SCM] LibreOffice packaging repository branch, ubuntu-precise-3.5, updated. libreoffice_3.5.2_rc2-1-164-g10e447e



The following commit has been merged in the ubuntu-precise-3.5 branch:
commit 86f3637f98af14de7086fefb3d2796de37945eef
Author: Bjoern Michaelsen <bjoern.michaelsen@canonical.com>
Date:   Tue Jan 8 18:46:56 2013 +0100

    lp#1097360: crash when scrolling in multiselection in slide sorter

diff --git a/changelog b/changelog
index d94aa5b..0992f0e 100644
--- a/changelog
+++ b/changelog
@@ -1,6 +1,7 @@
 libreoffice (1:3.5.7-0ubuntu3) UNRELEASED; urgency=low
 
   * backport SdModule::GetSdOptions: Process /usr/lib64/libreoffice/program/soffice.bin was killed by signal 11 (SIGSEGV) (LP: #1097323)
+  * backport crash when scrolling in multiselection in slide sorter (LP: #1097360)
 
  -- Bjoern Michaelsen <bjoern.michaelsen@canonical.com>  Tue, 08 Jan 2013 17:09:36 +0100
 
diff --git a/patches/lp-1097560-rhbz-842292-crash-in-calling-callback-whose.diff b/patches/lp-1097560-rhbz-842292-crash-in-calling-callback-whose.diff
new file mode 100644
index 0000000..b90a240
--- /dev/null
+++ b/patches/lp-1097560-rhbz-842292-crash-in-calling-callback-whose.diff
@@ -0,0 +1,144 @@
+From 2e17c9e5811fc1e0802e8739c70db80fadca7b47 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
+Date: Wed, 22 Aug 2012 14:20:32 +0100
+Subject: [PATCH] Resolves: rhbz#842292 crash in calling callback whose
+ instance was deleted
+
+Change-Id: I4cc04d59f48b42cc105703daa9983dd7c9f7af62
+---
+ .../controller/SlsDragAndDropContext.cxx           |    6 +++--
+ .../slidesorter/controller/SlsScrollBarManager.cxx |    8 +++---
+ .../controller/SlsSelectionFunction.cxx            |   26 +++++++++++++++++---
+ .../inc/controller/SlsScrollBarManager.hxx         |    2 ++
+ 4 files changed, 33 insertions(+), 9 deletions(-)
+
+diff --git a/sd/source/ui/slidesorter/controller/SlsDragAndDropContext.cxx b/sd/source/ui/slidesorter/controller/SlsDragAndDropContext.cxx
+index b8234b5..c1bf497 100644
+--- a/sd/source/ui/slidesorter/controller/SlsDragAndDropContext.cxx
++++ b/sd/source/ui/slidesorter/controller/SlsDragAndDropContext.cxx
+@@ -100,11 +100,13 @@ void DragAndDropContext::UpdatePosition (
+     ::boost::shared_ptr<InsertionIndicatorHandler> pInsertionIndicatorHandler (
+         mpTargetSlideSorter->GetController().GetInsertionIndicatorHandler());
+ 
+-    if ( ! (bAllowAutoScroll
++    bool bDoAutoScroll = bAllowAutoScroll
+             && mpTargetSlideSorter->GetController().GetScrollBarManager().AutoScroll(
+                 rMousePosition,
+                 ::boost::bind(
+-                    &DragAndDropContext::UpdatePosition, this, rMousePosition, eMode, false))))
++                    &DragAndDropContext::UpdatePosition, this, rMousePosition, eMode, false));
++
++    if (!bDoAutoScroll)
+     {
+         pInsertionIndicatorHandler->UpdatePosition(aMouseModelPosition, eMode);
+ 
+diff --git a/sd/source/ui/slidesorter/controller/SlsScrollBarManager.cxx b/sd/source/ui/slidesorter/controller/SlsScrollBarManager.cxx
+index 7abd6e4..9410052 100644
+--- a/sd/source/ui/slidesorter/controller/SlsScrollBarManager.cxx
++++ b/sd/source/ui/slidesorter/controller/SlsScrollBarManager.cxx
+@@ -617,13 +617,15 @@ bool ScrollBarManager::RepeatAutoScroll (void)
+         }
+     }
+ 
+-    maAutoScrollFunctor = ::boost::function<void(void)>();
++    clearAutoScrollFunctor();
+     mbIsAutoScrollActive = false;
+     return false;
+ }
+ 
+-
+-
++void ScrollBarManager::clearAutoScrollFunctor()
++{
++    maAutoScrollFunctor = ::boost::function<void(void)>();
++}
+ 
+ IMPL_LINK(ScrollBarManager, AutoScrollTimeoutHandler, Timer *, EMPTYARG)
+ {
+diff --git a/sd/source/ui/slidesorter/controller/SlsSelectionFunction.cxx b/sd/source/ui/slidesorter/controller/SlsSelectionFunction.cxx
+index 605749c..7ec40f9 100644
+--- a/sd/source/ui/slidesorter/controller/SlsSelectionFunction.cxx
++++ b/sd/source/ui/slidesorter/controller/SlsSelectionFunction.cxx
+@@ -284,6 +284,7 @@ private:
+     SelectionMode meSelectionMode;
+     Point maSecondCorner;
+     Pointer maSavedPointer;
++    bool mbAutoScrollInstalled;
+     sal_Int32 mnAnchorIndex;
+     sal_Int32 mnSecondIndex;
+     view::ButtonBar::Lock maButtonBarLock;
+@@ -1574,6 +1575,7 @@ MultiSelectionModeHandler::MultiSelectionModeHandler (
+       meSelectionMode(SM_Normal),
+       maSecondCorner(rMouseModelPosition),
+       maSavedPointer(mrSlideSorter.GetContentWindow()->GetPointer()),
++      mbAutoScrollInstalled(false),
+       mnAnchorIndex(-1),
+       mnSecondIndex(-1),
+       maButtonBarLock(rSlideSorter)
+@@ -1594,6 +1596,12 @@ void MultiSelectionModeHandler::Initialize(const sal_uInt32 nEventCode)
+ 
+ MultiSelectionModeHandler::~MultiSelectionModeHandler (void)
+ {
++    if (mbAutoScrollInstalled)
++    {
++        //a call to this handler's MultiSelectionModeHandler::UpdatePosition
++        //may be still waiting to be called back
++        mrSlideSorter.GetController().GetScrollBarManager().clearAutoScrollFunctor();
++    }
+     mrSlideSorter.GetContentWindow()->SetPointer(maSavedPointer);
+ }
+ 
+@@ -1635,6 +1643,14 @@ void MultiSelectionModeHandler::ProcessEvent (
+ bool MultiSelectionModeHandler::ProcessButtonUpEvent (
+     SelectionFunction::EventDescriptor& rDescriptor)
+ {
++    if (mbAutoScrollInstalled)
++    {
++        //a call to this handler's MultiSelectionModeHandler::UpdatePosition
++        //may be still waiting to be called back
++        mrSlideSorter.GetController().GetScrollBarManager().clearAutoScrollFunctor();
++        mbAutoScrollInstalled = false;
++    }
++
+     if (Match(rDescriptor.mnEventCode, BUTTON_UP | LEFT_BUTTON | SINGLE_CLICK))
+     {
+         mrSelectionFunction.SwitchToNormalMode();
+@@ -1691,16 +1707,18 @@ void MultiSelectionModeHandler::UpdatePosition (
+     SharedSdWindow pWindow (mrSlideSorter.GetContentWindow());
+     const Point aMouseModelPosition (pWindow->PixelToLogic(rMousePosition));
+ 
+-    if ( ! (bAllowAutoScroll && mrSlideSorter.GetController().GetScrollBarManager().AutoScroll(
++    bool bDoAutoScroll = bAllowAutoScroll && mrSlideSorter.GetController().GetScrollBarManager().AutoScroll(
+         rMousePosition,
+         ::boost::bind(
+             &MultiSelectionModeHandler::UpdatePosition,
+             this,
+             rMousePosition,
+-            false))))
+-    {
++            false));
++
++    if (!bDoAutoScroll)
+         UpdateModelPosition(aMouseModelPosition);
+-    }
++
++    mbAutoScrollInstalled |= bDoAutoScroll;
+ }
+ 
+ 
+diff --git a/sd/source/ui/slidesorter/inc/controller/SlsScrollBarManager.hxx b/sd/source/ui/slidesorter/inc/controller/SlsScrollBarManager.hxx
+index 2ce5057..d8704d2 100644
+--- a/sd/source/ui/slidesorter/inc/controller/SlsScrollBarManager.hxx
++++ b/sd/source/ui/slidesorter/inc/controller/SlsScrollBarManager.hxx
+@@ -172,6 +172,8 @@ public:
+ 
+     void StopAutoScroll (void);
+ 
++    void clearAutoScrollFunctor();
++
+     enum Orientation { Orientation_Horizontal, Orientation_Vertical };
+     enum Unit { Unit_Pixel, Unit_Slide };
+     /** Scroll the slide sorter by setting the thumbs of the scroll bars and
+-- 
+1.7.10.4
+
diff --git a/patches/series b/patches/series
index eaee00c..b36211d 100644
--- a/patches/series
+++ b/patches/series
@@ -36,3 +36,4 @@ lp-527938-triple-paperbag-fix-service-name-again.diff
 lp-904212-add-missing-mimetypes-to-impress.desktop.diff
 improve-faux-bold-font.diff
 lp-1097323-rhbz-806663-SlideshowImpl-can-outlive-SdMod.diff
+lp-1097560-rhbz-842292-crash-in-calling-callback-whose.diff

-- 
LibreOffice packaging repository


Reply to: