diff --git a/icon-themes/breeze/links.txt b/icon-themes/breeze/links.txt
index 8eaca399a5f0..23ba813b7107 100644
--- a/icon-themes/breeze/links.txt
+++ b/icon-themes/breeze/links.txt
@@ -1486,16 +1486,19 @@ cmd/sc_leftpara.png cmd/sc_alignleft.png
cmd/sc_rightpara.png cmd/sc_alignright.png
# View menu
+cmd/32/changetheme.png cmd/32/symbolshapes.moon.png
cmd/32/gridmenu.png cmd/32/gridvisible.png
cmd/32/navigatemenu.png cmd/32/navigator.png
cmd/32/scrollbarmenu.png cmd/32/scrollbar.png
cmd/32/sidebarmenu.png cmd/32/sidebar.png
+cmd/lc_changetheme.png cmd/lc_symbolshapes.moon.png
cmd/lc_gridmenu.png cmd/lc_gridvisible.png
cmd/lc_navigatemenu.png cmd/lc_navigator.png
cmd/lc_scrollbarmenu.png cmd/lc_scrollbar.png
cmd/lc_sidebarmenu.png cmd/lc_sidebar.png
+cmd/sc_changetheme.png cmd/sc_symbolshapes.moon.png
cmd/sc_gridmenu.png cmd/sc_gridvisible.png
cmd/sc_navigatemenu.png cmd/sc_navigator.png
cmd/sc_scrollbarmenu.png cmd/sc_scrollbar.png
diff --git a/icon-themes/breeze_dark/links.txt b/icon-themes/breeze_dark/links.txt
index 8eaca399a5f0..748bc16ab2d2 100644
--- a/icon-themes/breeze_dark/links.txt
+++ b/icon-themes/breeze_dark/links.txt
@@ -1486,16 +1486,20 @@ cmd/sc_leftpara.png cmd/sc_alignleft.png
cmd/sc_rightpara.png cmd/sc_alignright.png
# View menu
+
+cmd/32/changetheme.png cmd/32/symbolshapes.moon.png
cmd/32/gridmenu.png cmd/32/gridvisible.png
cmd/32/navigatemenu.png cmd/32/navigator.png
cmd/32/scrollbarmenu.png cmd/32/scrollbar.png
cmd/32/sidebarmenu.png cmd/32/sidebar.png
+cmd/lc_changetheme.png cmd/lc_symbolshapes.moon.png
cmd/lc_gridmenu.png cmd/lc_gridvisible.png
cmd/lc_navigatemenu.png cmd/lc_navigator.png
cmd/lc_scrollbarmenu.png cmd/lc_scrollbar.png
cmd/lc_sidebarmenu.png cmd/lc_sidebar.png
+cmd/sc_changetheme.png cmd/sc_symbolshapes.moon.png
cmd/sc_gridmenu.png cmd/sc_gridvisible.png
cmd/sc_navigatemenu.png cmd/sc_navigator.png
cmd/sc_scrollbarmenu.png cmd/sc_scrollbar.png
diff --git a/icon-themes/colibre/links.txt b/icon-themes/colibre/links.txt
index d7de3b9fdd55..ede4f262cddb 100644
--- a/icon-themes/colibre/links.txt
+++ b/icon-themes/colibre/links.txt
@@ -1279,12 +1279,15 @@ cmd/sc_thesaurusdialog.png cmd/sc_thesaurus.png
# View
cmd/32/availabletoolbars.png cmd/32/showtoolbar.png
+cmd/32/changetheme.png cmd/32/symbolshapes.moon.png
cmd/32/sidebarmenu.png cmd/32/sidebar.png
cmd/32/toolbarsmenu.png cmd/32/showtoolbar.png
cmd/lc_availabletoolbars.png cmd/lc_showtoolbar.png
+cmd/lc_changetheme.png cmd/lc_symbolshapes.moon.png
cmd/lc_sidebarmenu.png cmd/lc_sidebar.png
cmd/lc_toolbarsmenu.png cmd/lc_showtoolbar.png
cmd/sc_availabletoolbars.png cmd/sc_showtoolbar.png
+cmd/sc_changetheme.png cmd/sc_symbolshapes.moon.png
cmd/sc_sidebarmenu.png cmd/sc_sidebar.png
cmd/sc_toolbarsmenu.png cmd/sc_showtoolbar.png
diff --git a/icon-themes/colibre_dark/links.txt b/icon-themes/colibre_dark/links.txt
index d7de3b9fdd55..ede4f262cddb 100644
--- a/icon-themes/colibre_dark/links.txt
+++ b/icon-themes/colibre_dark/links.txt
@@ -1279,12 +1279,15 @@ cmd/sc_thesaurusdialog.png cmd/sc_thesaurus.png
# View
cmd/32/availabletoolbars.png cmd/32/showtoolbar.png
+cmd/32/changetheme.png cmd/32/symbolshapes.moon.png
cmd/32/sidebarmenu.png cmd/32/sidebar.png
cmd/32/toolbarsmenu.png cmd/32/showtoolbar.png
cmd/lc_availabletoolbars.png cmd/lc_showtoolbar.png
+cmd/lc_changetheme.png cmd/lc_symbolshapes.moon.png
cmd/lc_sidebarmenu.png cmd/lc_sidebar.png
cmd/lc_toolbarsmenu.png cmd/lc_showtoolbar.png
cmd/sc_availabletoolbars.png cmd/sc_showtoolbar.png
+cmd/sc_changetheme.png cmd/sc_symbolshapes.moon.png
cmd/sc_sidebarmenu.png cmd/sc_sidebar.png
cmd/sc_toolbarsmenu.png cmd/sc_showtoolbar.png
diff --git a/icon-themes/elementary/links.txt b/icon-themes/elementary/links.txt
index 9ad6b73033fb..0c320f04ccbe 100644
--- a/icon-themes/elementary/links.txt
+++ b/icon-themes/elementary/links.txt
@@ -2472,6 +2472,7 @@ cmd/sc_pastespecialmenu.png cmd/sc_pastespecial.png
# View menu
cmd/32/availabletoolbars.png cmd/32/showtoolbar.png
+cmd/32/changetheme.png cmd/32/symbolshapes.moon.png
cmd/32/gridmenu.png cmd/32/gridvisible.png
cmd/32/rulermenu.png cmd/32/ruler.png
cmd/32/scrollbarmenu.png cmd/32/scrollbar.png
@@ -2482,6 +2483,7 @@ cmd/32/viewtrackchanges.png cmd/32/showtrackedchanges.png
cmd/32/zoommenu.png cmd/32/zoom.png
cmd/lc_availabletoolbars.png cmd/lc_showtoolbar.png
+cmd/lc_changetheme.png cmd/lc_symbolshapes.moon.png
cmd/lc_gridmenu.png cmd/lc_gridvisible.png
cmd/lc_rulermenu.png cmd/lc_ruler.png
cmd/lc_scrollbarmenu.png cmd/lc_scrollbar.png
@@ -2492,6 +2494,7 @@ cmd/lc_viewtrackchanges.png cmd/lc_showtrackedchanges.png
cmd/lc_zoommenu.png cmd/lc_zoom.png
cmd/sc_availabletoolbars.png cmd/sc_showtoolbar.png
+cmd/sc_changetheme.png cmd/sc_symbolshapes.moon.png
cmd/sc_gridmenu.png cmd/sc_gridvisible.png
cmd/sc_rulermenu.png cmd/sc_ruler.png
cmd/sc_scrollbarmenu.png cmd/sc_scrollbar.png
diff --git a/icon-themes/karasa_jaga/links.txt b/icon-themes/karasa_jaga/links.txt
index e52e4529e576..d71263a1f279 100644
--- a/icon-themes/karasa_jaga/links.txt
+++ b/icon-themes/karasa_jaga/links.txt
@@ -64,6 +64,7 @@ cmd/32/cellvertcenter.png cmd/32/alignverticalcenter.png
cmd/32/cellverttop.png cmd/32/aligntop.png
cmd/32/centerpara.png cmd/32/alignhorizontalcenter.png
cmd/32/changesmenu.png cmd/32/accepttrackedchange.png
+cmd/32/changetheme.png cmd/32/symbolshapes.moon.png
cmd/32/charactermenu.png cmd/32/fontdialog.png
cmd/32/charbackcolor.png cmd/32/backcolor.png
cmd/32/charmapcontrol.png cmd/32/insertsymbol.png
@@ -808,6 +809,7 @@ cmd/lc_cellvertcenter.png cmd/lc_alignverticalcenter.png
cmd/lc_cellverttop.png cmd/lc_aligntop.png
cmd/lc_centerpara.png cmd/lc_alignhorizontalcenter.png
cmd/lc_changesmenu.png cmd/lc_accepttrackedchange.png
+cmd/lc_changetheme.png cmd/lc_symbolshapes.moon.png
cmd/lc_charactermenu.png cmd/lc_fontdialog.png
cmd/lc_charbackcolor.png cmd/lc_backcolor.png
cmd/lc_charmapcontrol.png cmd/lc_insertsymbol.png
@@ -1226,6 +1228,7 @@ cmd/sc_cellvertcenter.png cmd/sc_alignverticalcenter.png
cmd/sc_cellverttop.png cmd/sc_aligntop.png
cmd/sc_centerpara.png cmd/sc_alignhorizontalcenter.png
cmd/sc_changesmenu.png cmd/sc_accepttrackedchange.png
+cmd/sc_changetheme.png cmd/sc_symbolshapes.moon.png
cmd/sc_charactermenu.png cmd/sc_fontdialog.png
cmd/sc_charbackcolor.png cmd/sc_backcolor.png
cmd/sc_charmapcontrol.png cmd/sc_insertsymbol.png
diff --git a/icon-themes/sifr/links.txt b/icon-themes/sifr/links.txt
index 29d15a01a93e..5733722da4cb 100644
--- a/icon-themes/sifr/links.txt
+++ b/icon-themes/sifr/links.txt
@@ -1356,16 +1356,19 @@ cmd/sc_rightpara.png cmd/sc_alignright.png
# View
cmd/32/availabletoolbars.png cmd/32/showtoolbar.png
+cmd/32/changetheme.png cmd/32/symbolshapes.moon.png
cmd/32/sidebarmenu.png cmd/32/sidebar.png
cmd/32/toolbarsmenu.png cmd/32/showtoolbar.png
cmd/32/viewbounds.png cmd/32/charfontname.png
cmd/lc_availabletoolbars.png cmd/lc_showtoolbar.png
+cmd/lc_changetheme.png cmd/lc_symbolshapes.moon.png
cmd/lc_sidebarmenu.png cmd/lc_sidebar.png
cmd/lc_toolbarsmenu.png cmd/lc_showtoolbar.png
cmd/lc_viewbounds.png cmd/lc_charfontname.png
cmd/sc_availabletoolbars.png cmd/sc_showtoolbar.png
+cmd/sc_changetheme.png cmd/sc_symbolshapes.moon.png
cmd/sc_sidebarmenu.png cmd/sc_sidebar.png
cmd/sc_toolbarsmenu.png cmd/sc_showtoolbar.png
cmd/sc_viewbounds.png cmd/sc_charfontname.png
diff --git a/icon-themes/sifr_dark/links.txt b/icon-themes/sifr_dark/links.txt
index 29d15a01a93e..5733722da4cb 100644
--- a/icon-themes/sifr_dark/links.txt
+++ b/icon-themes/sifr_dark/links.txt
@@ -1356,16 +1356,19 @@ cmd/sc_rightpara.png cmd/sc_alignright.png
# View
cmd/32/availabletoolbars.png cmd/32/showtoolbar.png
+cmd/32/changetheme.png cmd/32/symbolshapes.moon.png
cmd/32/sidebarmenu.png cmd/32/sidebar.png
cmd/32/toolbarsmenu.png cmd/32/showtoolbar.png
cmd/32/viewbounds.png cmd/32/charfontname.png
cmd/lc_availabletoolbars.png cmd/lc_showtoolbar.png
+cmd/lc_changetheme.png cmd/lc_symbolshapes.moon.png
cmd/lc_sidebarmenu.png cmd/lc_sidebar.png
cmd/lc_toolbarsmenu.png cmd/lc_showtoolbar.png
cmd/lc_viewbounds.png cmd/lc_charfontname.png
cmd/sc_availabletoolbars.png cmd/sc_showtoolbar.png
+cmd/sc_changetheme.png cmd/sc_symbolshapes.moon.png
cmd/sc_sidebarmenu.png cmd/sc_sidebar.png
cmd/sc_toolbarsmenu.png cmd/sc_showtoolbar.png
cmd/sc_viewbounds.png cmd/sc_charfontname.png
diff --git a/icon-themes/sukapura/links.txt b/icon-themes/sukapura/links.txt
index 22ffbd1529ea..9552ccb3dbf5 100644
--- a/icon-themes/sukapura/links.txt
+++ b/icon-themes/sukapura/links.txt
@@ -1314,12 +1314,15 @@ cmd/sc_thesaurusdialog.png cmd/sc_thesaurus.png
# View
cmd/32/availabletoolbars.png cmd/32/showtoolbar.png
+cmd/32/changetheme.png cmd/32/symbolshapes.moon.png
cmd/32/sidebarmenu.png cmd/32/sidebar.png
cmd/32/toolbarsmenu.png cmd/32/showtoolbar.png
cmd/lc_availabletoolbars.png cmd/lc_showtoolbar.png
+cmd/lc_changetheme.png cmd/lc_symbolshapes.moon.png
cmd/lc_sidebarmenu.png cmd/lc_sidebar.png
cmd/lc_toolbarsmenu.png cmd/lc_showtoolbar.png
cmd/sc_availabletoolbars.png cmd/sc_showtoolbar.png
+cmd/sc_changetheme.png cmd/sc_symbolshapes.moon.png
cmd/sc_sidebarmenu.png cmd/sc_sidebar.png
cmd/sc_toolbarsmenu.png cmd/sc_showtoolbar.png
diff --git a/icon-themes/sukapura_dark/links.txt b/icon-themes/sukapura_dark/links.txt
index 22ffbd1529ea..9552ccb3dbf5 100644
--- a/icon-themes/sukapura_dark/links.txt
+++ b/icon-themes/sukapura_dark/links.txt
@@ -1314,12 +1314,15 @@ cmd/sc_thesaurusdialog.png cmd/sc_thesaurus.png
# View
cmd/32/availabletoolbars.png cmd/32/showtoolbar.png
+cmd/32/changetheme.png cmd/32/symbolshapes.moon.png
cmd/32/sidebarmenu.png cmd/32/sidebar.png
cmd/32/toolbarsmenu.png cmd/32/showtoolbar.png
cmd/lc_availabletoolbars.png cmd/lc_showtoolbar.png
+cmd/lc_changetheme.png cmd/lc_symbolshapes.moon.png
cmd/lc_sidebarmenu.png cmd/lc_sidebar.png
cmd/lc_toolbarsmenu.png cmd/lc_showtoolbar.png
cmd/sc_availabletoolbars.png cmd/sc_showtoolbar.png
+cmd/sc_changetheme.png cmd/sc_symbolshapes.moon.png
cmd/sc_sidebarmenu.png cmd/sc_sidebar.png
cmd/sc_toolbarsmenu.png cmd/sc_showtoolbar.png
diff --git a/officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu b/officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu
index c8ba600372b4..7880deebb46c 100644
--- a/officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu
+++ b/officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu
@@ -1404,6 +1404,17 @@ bit 3 (0x8): #define UICOMMANDDESCRIPTION_PROPERTIES_TOGGLEBUTTON 8
Undo
+
+
+ Dark Mode
+
+
+ Toggle between dark and light modes
+
+
+ 1
+
+
Control Focus
diff --git a/sc/uiconfig/scalc/ui/notebookbar.ui b/sc/uiconfig/scalc/ui/notebookbar.ui
index 46f674647d80..fda44c97ec7c 100644
--- a/sc/uiconfig/scalc/ui/notebookbar.ui
+++ b/sc/uiconfig/scalc/ui/notebookbar.ui
@@ -9714,6 +9714,60 @@
3
+
+
+
+ False
+ True
+ 4
+
+
True
diff --git a/sd/uiconfig/sdraw/ui/notebookbar.ui b/sd/uiconfig/sdraw/ui/notebookbar.ui
index 37ab230d261c..1e2c59273ebb 100644
--- a/sd/uiconfig/sdraw/ui/notebookbar.ui
+++ b/sd/uiconfig/sdraw/ui/notebookbar.ui
@@ -7908,6 +7908,60 @@
10
+
+
+ True
+ False
+ center
+ True
+
+
+ True
+ False
+ 5
+ 5
+ vertical
+
+
+ False
+ True
+ 5
+ 0
+
+
+
+
+ True
+ True
+ center
+ True
+ both
+ False
+ 3
+
+
+ False
+ .uno:ChangeTheme
+
+
+ False
+ True
+
+
+
+
+ False
+ True
+ 1
+
+
+
+
+ False
+ True
+ 11
+
+
True
diff --git a/sd/uiconfig/simpress/ui/notebookbar.ui b/sd/uiconfig/simpress/ui/notebookbar.ui
index 2c8bae2b579e..204a6a48ccd5 100644
--- a/sd/uiconfig/simpress/ui/notebookbar.ui
+++ b/sd/uiconfig/simpress/ui/notebookbar.ui
@@ -9153,6 +9153,60 @@
13
+
+
+ True
+ False
+ center
+ True
+
+
+ True
+ False
+ 5
+ 5
+ vertical
+
+
+ False
+ True
+ 5
+ 0
+
+
+
+
+ True
+ True
+ center
+ True
+ both
+ False
+ 3
+
+
+ False
+ .uno:ChangeTheme
+
+
+ False
+ True
+
+
+
+
+ False
+ True
+ 1
+
+
+
+
+ False
+ True
+ 14
+
+
True
diff --git a/sfx2/sdi/appslots.sdi b/sfx2/sdi/appslots.sdi
index 4b2e0a5357bf..22aaf5ecc2ad 100644
--- a/sfx2/sdi/appslots.sdi
+++ b/sfx2/sdi/appslots.sdi
@@ -67,6 +67,7 @@ interface Application
FN_CHANGE_THEME // ole(no) api(final/play/rec)
[
ExecMethod = MiscExec_Impl ;
+ StateMethod = MiscState_Impl ;
]
SID_CONFIG // ole(no) api(final/play/rec)
[
diff --git a/sfx2/sdi/sfx.sdi b/sfx2/sdi/sfx.sdi
index 721ab116f60e..da8876a6f9c1 100644
--- a/sfx2/sdi/sfx.sdi
+++ b/sfx2/sdi/sfx.sdi
@@ -5933,11 +5933,14 @@ SfxVoidItem ChangeTheme FN_CHANGE_THEME
[
AutoUpdate = FALSE,
FastCall = FALSE,
- ReadOnlyDoc = FALSE,
+ ReadOnlyDoc = TRUE,
Toggle = FALSE,
Container = FALSE,
RecordAbsolute = FALSE,
RecordPerSet;
+ AccelConfig = TRUE,
+ MenuConfig = TRUE,
+ ToolBoxConfig = TRUE,
GroupId = SfxGroupId::Application;
]
diff --git a/sfx2/source/appl/appserv.cxx b/sfx2/source/appl/appserv.cxx
index 5dd93dc54a25..b7fa6c9f608f 100644
--- a/sfx2/source/appl/appserv.cxx
+++ b/sfx2/source/appl/appserv.cxx
@@ -620,20 +620,57 @@ void SfxApplication::MiscExec_Impl( SfxRequest& rReq )
case FN_CHANGE_THEME:
{
const SfxStringItem* pNewThemeArg = rReq.GetArg(FN_PARAM_NEW_THEME);
+ OUString sSchemeName
+ = pNewThemeArg ? pNewThemeArg->GetValue() : "COLOR_SCHEME_LIBREOFFICE_AUTOMATIC";
if (!pNewThemeArg)
{
- SAL_WARN("sfx.appl", "FN_CHANGE_THEME: no theme name");
- break;
+ // toggle between light and dark mode
+
+ // There are two separate things that can be dark mode themed: UI and document
+ // The modes can be 0 (automatic - what the OS/VCL asks for), 1 (light), or 2 (dark)
+
+ // Since only gtk/osx/win support UI theme, toggle based on document colors
+ // Automatic in this case means "whatever GetUseDarkMode() says"
+ const bool bWasInDarkMode
+ = MiscSettings::GetAppColorMode() == 2
+ || (MiscSettings::GetAppColorMode() == 0 && MiscSettings::GetUseDarkMode());
+
+ // Set the UI theme. It would be nicest to use automatic whenever possible
+ sal_Int32 nUseMode = 0; // automatic
+ if (MiscSettings::GetDarkMode() != 0)
+ MiscSettings::SetDarkMode(nUseMode);
+
+ if (MiscSettings::GetUseDarkMode() == bWasInDarkMode)
+ {
+ // automatic didn't toggle, so force the desired theme
+ nUseMode = bWasInDarkMode ? 1 : 2;
+ MiscSettings::SetDarkMode(nUseMode);
+ }
+
+ // Now set the document theme
+ // If the UI can be themed, then the document theme can always remain on automatic.
+ nUseMode = 0;
+ // NOTE: since SetDarkMode has run, GetUseDarkMode might return a different result.
+ if (MiscSettings::GetUseDarkMode() == bWasInDarkMode)
+ {
+ nUseMode = bWasInDarkMode ? 1 : 2;
+ sSchemeName = bWasInDarkMode ? u"Light" : u"Dark";
+ }
+ MiscSettings::SetAppColorMode(nUseMode);
}
- const OUString& rSchemeName = pNewThemeArg->GetValue();
svtools::EditableColorConfig aEditableConfig;
// kit explicitly ignores changes to the global color scheme, except for the current ViewShell,
// so an attempted change to the same global color scheme when the now current ViewShell ignored
// the last change requires re-sending the change. In which case individual shells will have to
// decide if this color-scheme change is a change from their perspective to avoid unnecessary
// invalidations.
- if (aEditableConfig.GetCurrentSchemeName() != rSchemeName || comphelper::LibreOfficeKit::isActive())
- aEditableConfig.LoadScheme(rSchemeName);
+ if (!pNewThemeArg || comphelper::LibreOfficeKit::isActive()
+ || aEditableConfig.GetCurrentSchemeName() != sSchemeName)
+ {
+ aEditableConfig.LoadScheme(sSchemeName);
+ }
+
+ Invalidate(FN_CHANGE_THEME);
break;
}
@@ -1233,6 +1270,14 @@ void SfxApplication::MiscState_Impl(SfxItemSet &rSet)
break;
#endif
+ case FN_CHANGE_THEME:
+ {
+ const bool bIsDarkMode
+ = MiscSettings::GetAppColorMode() == 2
+ || (!MiscSettings::GetAppColorMode() && MiscSettings::GetUseDarkMode());
+ rSet.Put(SfxBoolItem(FN_CHANGE_THEME, bIsDarkMode));
+ break;
+ }
case SID_HELPTIPS:
{
rSet.Put( SfxBoolItem( SID_HELPTIPS, Help::IsQuickHelpEnabled() ) );
diff --git a/sw/uiconfig/swriter/ui/notebookbar.ui b/sw/uiconfig/swriter/ui/notebookbar.ui
index cf356a1ee6b9..b56e978d92e4 100644
--- a/sw/uiconfig/swriter/ui/notebookbar.ui
+++ b/sw/uiconfig/swriter/ui/notebookbar.ui
@@ -9086,6 +9086,60 @@
3
+
+
+ True
+ False
+ center
+ True
+
+
+ True
+ False
+ 5
+ 5
+ vertical
+
+
+ False
+ True
+ 5
+ 0
+
+
+
+
+ True
+ True
+ center
+ True
+ both
+ False
+ 3
+
+
+ False
+ .uno:ChangeTheme
+
+
+ False
+ True
+
+
+
+
+ False
+ True
+ 1
+
+
+
+
+ False
+ True
+ 4
+
+
True