summaryrefslogtreecommitdiff
path: root/sfx2/source
diff options
context:
space:
mode:
authorMike Kaganski <mike.kaganski@collabora.com>2022-07-19 17:20:17 +0300
committerMike Kaganski <mike.kaganski@collabora.com>2022-07-28 14:22:37 +0200
commit84681c019ebbe358aa41deab73da902e44efee3d (patch)
tree7dfafd81c8f246c7bc3a0d4949a3a6e339f4d6fc /sfx2/source
parentd41ed86f59f7e5bd922bbe90a63f39289c1acbeb (diff)
lok: Properly update sidebar context in Math
Change-Id: I830c0d9bdeaa6340283eafc3e91251d02602d7aa Reviewed-on: https://gerrit.libreoffice.org/c/core/+/137247 Tested-by: Jenkins Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com> Reviewed-on: https://gerrit.libreoffice.org/c/core/+/137546 Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com>
Diffstat (limited to 'sfx2/source')
-rw-r--r--sfx2/source/sidebar/SidebarController.cxx35
1 files changed, 23 insertions, 12 deletions
diff --git a/sfx2/source/sidebar/SidebarController.cxx b/sfx2/source/sidebar/SidebarController.cxx
index 8c5af648d2ff..22d48cc90bf0 100644
--- a/sfx2/source/sidebar/SidebarController.cxx
+++ b/sfx2/source/sidebar/SidebarController.cxx
@@ -122,6 +122,7 @@ SidebarController::SidebarController (
const ::std::vector<TabBar::DeckMenuData>& rMenuData) { return this->ShowPopupMenu(rMainMenu, rSubMenu, rMenuData); },
this)),
maCurrentContext(OUString(), OUString()),
+ maRequestedContext(OUString(), OUString()),
mnRequestedForceFlags(SwitchFlag_NoForce),
mbMinimumSidebarWidth(officecfg::Office::UI::Sidebar::General::MinimumWidth::get()),
msCurrentDeckId(gsDefaultDeckId),
@@ -145,7 +146,7 @@ rtl::Reference<SidebarController> SidebarController::create(SidebarDockingWindow
rtl::Reference<SidebarController> instance(new SidebarController(pParentWindow, pViewFrame));
const css::uno::Reference<css::frame::XFrame>& rxFrame = pViewFrame->GetFrame().GetFrameInterface();
- registerSidebarForFrame(instance.get(), rxFrame->getController());
+ instance->registerSidebarForFrame(rxFrame->getController());
rxFrame->addFrameActionListener(instance);
// Listen for window events.
instance->mpParentWindow->AddEventListener(LINK(instance.get(), SidebarController, WindowEventHandler));
@@ -192,27 +193,27 @@ SidebarController* SidebarController::GetSidebarControllerForFrame (
return dynamic_cast<SidebarController*>(xListener.get());
}
-void SidebarController::registerSidebarForFrame(SidebarController* pController, const css::uno::Reference<css::frame::XController>& xController)
+void SidebarController::registerSidebarForFrame(const css::uno::Reference<css::frame::XController>& xController)
{
// Listen for context change events.
css::uno::Reference<css::ui::XContextChangeEventMultiplexer> xMultiplexer (
css::ui::ContextChangeEventMultiplexer::get(
::comphelper::getProcessComponentContext()));
xMultiplexer->addContextChangeEventListener(
- static_cast<css::ui::XContextChangeEventListener*>(pController),
+ static_cast<css::ui::XContextChangeEventListener*>(this),
xController);
}
-void SidebarController::unregisterSidebarForFrame(SidebarController* pController, const css::uno::Reference<css::frame::XController>& xController)
+void SidebarController::unregisterSidebarForFrame(const css::uno::Reference<css::frame::XController>& xController)
{
- pController->saveDeckState();
- pController->disposeDecks();
+ saveDeckState();
+ disposeDecks();
css::uno::Reference<css::ui::XContextChangeEventMultiplexer> xMultiplexer (
css::ui::ContextChangeEventMultiplexer::get(
::comphelper::getProcessComponentContext()));
xMultiplexer->removeContextChangeEventListener(
- static_cast<css::ui::XContextChangeEventListener*>(pController),
+ static_cast<css::ui::XContextChangeEventListener*>(this),
xController);
}
@@ -330,7 +331,7 @@ void SAL_CALL SidebarController::disposing()
if (!xController.is())
xController = mxCurrentController;
- unregisterSidebarForFrame(this, xController);
+ unregisterSidebarForFrame(xController);
}
void SAL_CALL SidebarController::notifyContextChangeEvent (const css::ui::ContextChangeEventObject& rEvent)
@@ -550,6 +551,8 @@ void SidebarController::UpdateConfigurations()
(maCurrentContext.msApplication != maRequestedContext.msApplication))
{
OUString sLastActiveDeck = mpResourceManager->GetLastActiveDeck( maRequestedContext );
+ if (comphelper::LibreOfficeKit::isActive() && sLastActiveDeck == "PropertyDeck" && maRequestedContext.msApplication == "com.sun.star.formula.FormulaProperties")
+ sLastActiveDeck = "ElementsDeck"; // Manual override for lok
if (!sLastActiveDeck.isEmpty())
msCurrentDeckId = sLastActiveDeck;
}
@@ -1590,9 +1593,9 @@ void SidebarController::frameAction(const css::frame::FrameActionEvent& rEvent)
if (rEvent.Frame == mxFrame)
{
if (rEvent.Action == css::frame::FrameAction_COMPONENT_DETACHING)
- unregisterSidebarForFrame(this, mxFrame->getController());
+ unregisterSidebarForFrame(mxFrame->getController());
else if (rEvent.Action == css::frame::FrameAction_COMPONENT_REATTACHED)
- registerSidebarForFrame(this, mxFrame->getController());
+ registerSidebarForFrame(mxFrame->getController());
}
}
@@ -1608,10 +1611,18 @@ void SidebarController::saveDeckState()
}
}
+static bool isChartOrMathContext(const Context& context)
+{
+ return context.msApplication == "com.sun.star.chart2.ChartDocument"
+ || context.msApplication == "com.sun.star.formula.FormulaProperties";
+}
+
bool SidebarController::hasChartOrMathContextCurrently() const
{
- return GetCurrentContext().msApplication == "com.sun.star.chart2.ChartDocument"
- || GetCurrentContext().msApplication == "com.sun.star.formula.FormulaProperties";
+ if ((maRequestedContext != maCurrentContext) && isChartOrMathContext(maRequestedContext))
+ return true; // We are not yet changed, but in the process
+
+ return isChartOrMathContext(maCurrentContext);
}
sfx2::sidebar::SidebarController* SidebarController::GetSidebarControllerForView(const SfxViewShell* pViewShell)