summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2017-07-24 21:32:30 +0100
committerCaolán McNamara <caolanm@redhat.com>2017-07-24 22:50:32 +0200
commitd30ae9c17ba51a55dd491f4c91712860b495f424 (patch)
tree95b2f09338caef577280b82a7ea2884eb13dba24
parentb6c3afdcbe66075f5a82d35ce8e403e7fe696174 (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/40379 Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
-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 7163ac888ede..52d102f2c42b 100644
--- a/sd/source/ui/slidesorter/controller/SlideSorterController.cxx
+++ b/sd/source/ui/slidesorter/controller/SlideSorterController.cxx
@@ -110,6 +110,7 @@ SlideSorterController::SlideSorterController (SlideSorter& rSlideSorter)
mpListener(),
mnModelChangeLockCount(0),
mbIsForcedRearrangePending(false),
+ mbContextMenuOpen(false),
mbPostModelChangePending(false),
maSelectionBeforeSwitch(),
mnCurrentPageBeforeSwitch(0),
@@ -382,7 +383,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())
@@ -547,9 +550,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 9a68255a09d1..60c6f58a9fe0 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 mbPostModelChangePending;