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 + + + 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 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