include/sfx2/viewsh.hxx | 2 ++ sc/source/ui/inc/tabvwsh.hxx | 2 ++ sc/source/ui/view/tabvwshc.cxx | 5 +++++ sd/source/ui/inc/ViewShellBase.hxx | 2 ++ sd/source/ui/view/ViewShellBase.cxx | 12 ++++++++++++ sfx2/source/appl/appserv.cxx | 20 ++++++++++++++++++-- sfx2/source/view/viewsh.cxx | 6 ++++++ sw/inc/view.hxx | 2 ++ sw/inc/viewopt.hxx | 2 +- sw/source/core/view/vnew.cxx | 17 ++++++++++++++++- sw/source/uibase/uiview/viewprt.cxx | 14 ++++++++++++++ 11 files changed, 80 insertions(+), 4 deletions(-)
New commits: commit 884fd220d0025a92510d3ff4710c8c517c8f271e Author: Paris Oplopoios <paris.oplopo...@collabora.com> AuthorDate: Mon Jul 3 19:00:59 2023 +0300 Commit: Paris Oplopoios <parisop...@gmail.com> CommitDate: Tue Jul 4 22:12:16 2023 +0200 Make sure views get new themes on .uno:ChangeTheme It would be that sometimes .uno:ChangeTheme would not load the new scheme because it was using EditableConfig::GetCurrentSchemeName which uses a static name - normally great except for when you need different views to have different color schemes in tiled rendering Change-Id: I5b149bd1a4776337f76753c6de98d5386a899d34 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/153939 Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com> Reviewed-by: Paris Oplopoios <parisop...@gmail.com> diff --git a/include/sfx2/viewsh.hxx b/include/sfx2/viewsh.hxx index 2435caa52a47..78f75b7067dd 100644 --- a/include/sfx2/viewsh.hxx +++ b/include/sfx2/viewsh.hxx @@ -409,6 +409,8 @@ public: virtual vcl::Window* GetEditWindowForActiveOLEObj() const override; /// Get a color config color from this view virtual ::Color GetColorConfigColor(svtools::ColorConfigEntry nColorType) const; + /// Get the color scheme name of this view + virtual OUString GetColorConfigName() const; /// Set the LibreOfficeKit language of this view. void SetLOKLanguageTag(const OUString& rBcp47LanguageTag); diff --git a/sc/source/ui/inc/tabvwsh.hxx b/sc/source/ui/inc/tabvwsh.hxx index ee3edd020def..d32f664b5536 100644 --- a/sc/source/ui/inc/tabvwsh.hxx +++ b/sc/source/ui/inc/tabvwsh.hxx @@ -395,6 +395,8 @@ public: void NotifyCursor(SfxViewShell* pViewShell) const override; /// See SfxViewShell::GetColorConfigColor(). ::Color GetColorConfigColor(svtools::ColorConfigEntry nColorType) const override; + /// See SfxViewShell::GetColorConfigName(). + OUString GetColorConfigName() const override; /// Emits a LOK_CALLBACK_INVALIDATE_HEADER for all views whose current tab is equal to nCurrentTabIndex static void notifyAllViewsHeaderInvalidation(const SfxViewShell* pForViewShell, HeaderType eHeaderType, SCTAB nCurrentTabIndex); static bool isAnyEditViewInRange(const SfxViewShell* pForViewShell, bool bColumns, SCCOLROW nStart, SCCOLROW nEnd); diff --git a/sc/source/ui/view/tabvwshc.cxx b/sc/source/ui/view/tabvwshc.cxx index 3b50da7114cb..517a00c8f2e1 100644 --- a/sc/source/ui/view/tabvwshc.cxx +++ b/sc/source/ui/view/tabvwshc.cxx @@ -516,6 +516,11 @@ void ScTabViewShell::NotifyCursor(SfxViewShell* pOtherShell) const return {}; } +OUString ScTabViewShell::GetColorConfigName() const +{ + return GetViewData().GetOptions().GetColorSchemeName(); +} + css::uno::Reference<css::datatransfer::XTransferable2> ScTabViewShell::GetClipData(vcl::Window* pWin) { SfxViewFrame* pViewFrame = nullptr; diff --git a/sd/source/ui/inc/ViewShellBase.hxx b/sd/source/ui/inc/ViewShellBase.hxx index aa0346ea5b2f..71522c7892d4 100644 --- a/sd/source/ui/inc/ViewShellBase.hxx +++ b/sd/source/ui/inc/ViewShellBase.hxx @@ -223,6 +223,8 @@ public: void NotifyCursor(SfxViewShell* pViewShell) const override; /// See SfxViewShell::GetColorConfigColor(). ::Color GetColorConfigColor(svtools::ColorConfigEntry nColorType) const override; + /// See SfxViewShell::GetColorConfigName(). + OUString GetColorConfigName() const override; void setLOKVisibleArea(const ::tools::Rectangle& rArea) { maLOKVisibleArea = rArea; } virtual ::tools::Rectangle getLOKVisibleArea() const override { return maLOKVisibleArea; } diff --git a/sd/source/ui/view/ViewShellBase.cxx b/sd/source/ui/view/ViewShellBase.cxx index 834e1d6cc3e2..19be45aaca12 100644 --- a/sd/source/ui/view/ViewShellBase.cxx +++ b/sd/source/ui/view/ViewShellBase.cxx @@ -1091,6 +1091,18 @@ void ViewShellBase::NotifyCursor(SfxViewShell* pOtherShell) const return {}; } +OUString ViewShellBase::GetColorConfigName() const +{ + if (DrawViewShell* pCurrentDrawShell = dynamic_cast<DrawViewShell*>(GetMainViewShell().get())) + { + const SdViewOptions& rViewOptions = pCurrentDrawShell->GetViewOptions(); + return rViewOptions.msColorSchemeName; + } + + SAL_WARN("sd", "dynamic_cast to DrawViewShell failed"); + return {}; +} + //===== ViewShellBase::Implementation ========================================= ViewShellBase::Implementation::Implementation (ViewShellBase& rBase) diff --git a/sfx2/source/appl/appserv.cxx b/sfx2/source/appl/appserv.cxx index 418bcb88430b..7c322bc8109a 100644 --- a/sfx2/source/appl/appserv.cxx +++ b/sfx2/source/appl/appserv.cxx @@ -602,10 +602,26 @@ void SfxApplication::MiscExec_Impl( SfxRequest& rReq ) SAL_WARN("sfx.appl", "FN_CHANGE_THEME: no theme name"); break; } + const OUString& rSchemeName = pNewThemeArg->GetValue(); svtools::EditableColorConfig aEditableConfig; - if (aEditableConfig.GetCurrentSchemeName() != rSchemeName) - aEditableConfig.LoadScheme(rSchemeName); + + if (comphelper::LibreOfficeKit::isActive()) + { + SfxViewShell* pCurrentShell = SfxViewShell::Current(); + if (pCurrentShell && pCurrentShell->GetColorConfigName() != rSchemeName) + { + aEditableConfig.LoadScheme(rSchemeName); + } + } + else + { + if (aEditableConfig.GetCurrentSchemeName() != rSchemeName) + { + aEditableConfig.LoadScheme(rSchemeName); + } + } + break; } diff --git a/sfx2/source/view/viewsh.cxx b/sfx2/source/view/viewsh.cxx index ca6e1d30cf3b..4447eef4274a 100644 --- a/sfx2/source/view/viewsh.cxx +++ b/sfx2/source/view/viewsh.cxx @@ -2559,6 +2559,12 @@ vcl::Window* SfxViewShell::GetEditWindowForActiveOLEObj() const return {}; } +OUString SfxViewShell::GetColorConfigName() const +{ + SAL_WARN("sfx.view", "SfxViewShell::GetColorConfigName not overriden!"); + return {}; +} + void SfxViewShell::SetLOKLanguageTag(const OUString& rBcp47LanguageTag) { LanguageTag aTag(rBcp47LanguageTag, true); diff --git a/sw/inc/view.hxx b/sw/inc/view.hxx index 9e31e337206b..b85920437d39 100644 --- a/sw/inc/view.hxx +++ b/sw/inc/view.hxx @@ -675,6 +675,8 @@ public: void NotifyCursor(SfxViewShell* pViewShell) const override; /// See SfxViewShell::GetColorConfigColor(). ::Color GetColorConfigColor(svtools::ColorConfigEntry nColorType) const override; + /// See SfxViewShell::GetColorConfigName(). + OUString GetColorConfigName() const override; void ShowUIElement(const OUString& sElementURL) const; diff --git a/sw/inc/viewopt.hxx b/sw/inc/viewopt.hxx index a6fd5eea8a57..e0a3353d3b27 100644 --- a/sw/inc/viewopt.hxx +++ b/sw/inc/viewopt.hxx @@ -857,7 +857,7 @@ public: inline bool SwViewOption::operator==( const SwViewOption &rOpt ) const { - return IsEqualFlags( rOpt ) && m_nZoom == rOpt.GetZoom() && m_aColorConfig == rOpt.m_aColorConfig; + return IsEqualFlags( rOpt ) && m_nZoom == rOpt.GetZoom() && m_aColorConfig == rOpt.m_aColorConfig && m_sThemeName == rOpt.m_sThemeName; } inline void SwViewOption::SetUIOptions( const SwViewOption& rVOpt ) diff --git a/sw/source/core/view/vnew.cxx b/sw/source/core/view/vnew.cxx index b841134cc21a..dc975b023f76 100644 --- a/sw/source/core/view/vnew.cxx +++ b/sw/source/core/view/vnew.cxx @@ -42,6 +42,7 @@ #include <ndgrf.hxx> #include <ndindex.hxx> #include <accessibilityoptions.hxx> +#include <comphelper/lok.hxx> void SwViewShell::Init( const SwViewOption *pNewOpt ) { @@ -250,7 +251,21 @@ SwViewShell::SwViewShell( SwViewShell& rShell, vcl::Window *pWindow, bool bModified = mxDoc->getIDocumentState().IsModified(); OutputDevice* pOrigOut = mpOut; - Init( rShell.GetViewOptions() ); // might change Outdev (InitPrt()) + + SwViewOption aNewOpt; + + if ( rShell.GetViewOptions() ) + { + aNewOpt = *rShell.GetViewOptions(); + } + + if ( comphelper::LibreOfficeKit::isActive() ) + { + // Do not copy the color config in tiled rendering + aNewOpt.SetThemeName("Default"); + } + + Init( &aNewOpt ); // might change Outdev (InitPrt()) mpOut = pOrigOut; if ( mbPreview ) diff --git a/sw/source/uibase/uiview/viewprt.cxx b/sw/source/uibase/uiview/viewprt.cxx index 2e6bc417b49e..209b0e324a68 100644 --- a/sw/source/uibase/uiview/viewprt.cxx +++ b/sw/source/uibase/uiview/viewprt.cxx @@ -316,6 +316,20 @@ void SwView::NotifyCursor(SfxViewShell* pViewShell) const return {}; } +OUString SwView::GetColorConfigName() const +{ + if (const SwViewOption* pViewOptions = GetWrtShell().GetViewOptions()) + { + return pViewOptions->GetThemeName(); + } + else + { + SAL_WARN("sw", "GetViewOptions() returned nullptr"); + } + + return {}; +} + // Create page printer/additions for SwView and SwPagePreview std::unique_ptr<SfxTabPage> CreatePrintOptionsPage(weld::Container* pPage, weld::DialogController* pController,