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 63d019c6780733018ffc0b157a235cb57893d6d4 Author: Paris Oplopoios <paris.oplopo...@collabora.com> AuthorDate: Mon Jul 3 19:00:59 2023 +0300 Commit: Paris Oplopoios <parisop...@gmail.com> CommitDate: Wed Jul 5 10:17:03 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> (cherry picked from commit 77f5b9259864798b6efc213f6dfa685cd440f71a) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/154001 Tested-by: Jenkins diff --git a/include/sfx2/viewsh.hxx b/include/sfx2/viewsh.hxx index 08bc6cecc8cb..4adf62a196c4 100644 --- a/include/sfx2/viewsh.hxx +++ b/include/sfx2/viewsh.hxx @@ -431,6 +431,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 d8434af53bc6..06e9f31e19cb 100644 --- a/sc/source/ui/inc/tabvwsh.hxx +++ b/sc/source/ui/inc/tabvwsh.hxx @@ -397,6 +397,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 5397d9f4383e..997e710e18e9 100644 --- a/sc/source/ui/view/tabvwshc.cxx +++ b/sc/source/ui/view/tabvwshc.cxx @@ -511,6 +511,11 @@ void ScTabViewShell::NotifyCursor(SfxViewShell* pOtherShell) const } } +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 e31429f6e41a..3f40123405f3 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 55ade0226213..460e102e7796 100644 --- a/sd/source/ui/view/ViewShellBase.cxx +++ b/sd/source/ui/view/ViewShellBase.cxx @@ -1084,6 +1084,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 2d57c7e562dc..cab9f16c5b8a 100644 --- a/sfx2/source/appl/appserv.cxx +++ b/sfx2/source/appl/appserv.cxx @@ -583,10 +583,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 0d7d7f14ff99..1a6cc15fc3fc 100644 --- a/sfx2/source/view/viewsh.cxx +++ b/sfx2/source/view/viewsh.cxx @@ -2323,6 +2323,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 b1d2ea5b9e90..dee2363dedd9 100644 --- a/sw/inc/view.hxx +++ b/sw/inc/view.hxx @@ -676,6 +676,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 4ff2d1a43956..b82b970cb540 100644 --- a/sw/inc/viewopt.hxx +++ b/sw/inc/viewopt.hxx @@ -854,7 +854,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 613a15df633b..e6d8675d6ce6 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 ) { @@ -248,7 +249,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 bc9c5e19b840..92ae55feb08a 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,