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,

Reply via email to