summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2017-07-24 21:32:30 +0100
committerAndras Timar <andras.timar@collabora.com>2017-07-31 12:03:56 +0200
commite587e2c473e1726f8bf8acc570b1e31cf00389e5 (patch)
treee423b3ee5cddaf2a1b2d09a211d6f82d9d40a10f
parentcf960d36a97609178f5e72abf71b803f0d14404e (diff)
don't jump back to selected slide on right click context menu
i.e. two many slides to fit in slide sorter panel, so scroll bar, select slide one, scroll to the end and right click between slides (or anywhere that isn't a slide) and without this fix the sorter jumps back to make the selected slide 1 visible. The right click menu will offer "new slide", choosing that will insert a slide at the point that was originally clicked, not at the point it was scrolled back to losing focus trigger a (dubious looking) callback to jump to the selected slide, so disable it while context menu is up Change-Id: Ie42bf158258cc38c9b7cfda7672f24d2ac8bfa11 Reviewed-on: https://gerrit.libreoffice.org/40383 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Michael Stahl <mstahl@redhat.com> (cherry picked from commit 5e0b0be9b34343070b422c8a1cef1671c51f5773)
-rw-r--r--sd/source/ui/slidesorter/controller/SlideSorterController.cxx14
-rw-r--r--sd/source/ui/slidesorter/inc/controller/SlideSorterController.hxx1
2 files changed, 12 insertions, 3 deletions
diff --git a/sd/source/ui/slidesorter/controller/SlideSorterController.cxx b/sd/source/ui/slidesorter/controller/SlideSorterController.cxx
index 1fa0e030875c..49a83aa59503 100644
--- a/sd/source/ui/slidesorter/controller/SlideSorterController.cxx
+++ b/sd/source/ui/slidesorter/controller/SlideSorterController.cxx
@@ -111,6 +111,7 @@ SlideSorterController::SlideSorterController (SlideSorter& rSlideSorter)
mpListener(),
mnModelChangeLockCount(0),
mbIsForcedRearrangePending(false),
+ mbContextMenuOpen(false),
mbPreModelChangeDone(false),
mbPostModelChangePending(false),
maSelectionBeforeSwitch(),
@@ -386,7 +387,9 @@ bool SlideSorterController::Command (
SfxDispatcher* pDispatcher = pViewShell->GetDispatcher();
if (pDispatcher != nullptr)
{
+ mbContextMenuOpen = true;
pDispatcher->ExecutePopup( aPopupId, pWindow, &aMenuLocation );
+ mbContextMenuOpen = false;
mrSlideSorter.GetView().UpdatePageUnderMouse();
::rtl::Reference<SelectionFunction> pFunction(GetCurrentSelectionFunction());
if (pFunction.is())
@@ -553,9 +556,14 @@ IMPL_LINK(SlideSorterController, WindowEventHandler, VclWindowEvent&, rEvent, vo
GetFocusManager().HideFocus();
mrView.GetToolTip().Hide();
- // Select the current slide so that it is properly
- // visualized when the focus is moved to the edit view.
- GetPageSelector().SelectPage(GetCurrentSlideManager()->GetCurrentSlide());
+ //don't scroll back to the selected slide when we lose
+ //focus due to a temporary active context menu
+ if (!mbContextMenuOpen)
+ {
+ // Select the current slide so that it is properly
+ // visualized when the focus is moved to the edit view.
+ GetPageSelector().SelectPage(GetCurrentSlideManager()->GetCurrentSlide());
+ }
}
break;
diff --git a/sd/source/ui/slidesorter/inc/controller/SlideSorterController.hxx b/sd/source/ui/slidesorter/inc/controller/SlideSorterController.hxx
index 80f981cfe23c..b66785e3a2f3 100644
--- a/sd/source/ui/slidesorter/inc/controller/SlideSorterController.hxx
+++ b/sd/source/ui/slidesorter/inc/controller/SlideSorterController.hxx
@@ -240,6 +240,7 @@ private:
int mnModelChangeLockCount;
bool mbIsForcedRearrangePending;
+ bool mbContextMenuOpen;
bool mbPreModelChangeDone;
bool mbPostModelChangePending;