icon-themes/breeze/links.txt                                         |    3 
 icon-themes/breeze_dark/links.txt                                    |    4 
 icon-themes/colibre/links.txt                                        |    3 
 icon-themes/colibre_dark/links.txt                                   |    3 
 icon-themes/elementary/links.txt                                     |    3 
 icon-themes/karasa_jaga/links.txt                                    |    3 
 icon-themes/sifr/links.txt                                           |    3 
 icon-themes/sifr_dark/links.txt                                      |    3 
 icon-themes/sukapura/links.txt                                       |    3 
 icon-themes/sukapura_dark/links.txt                                  |    3 
 officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu |   11 ++
 sc/uiconfig/scalc/ui/notebookbar.ui                                  |   54 
+++++++++
 sd/uiconfig/sdraw/ui/notebookbar.ui                                  |   54 
+++++++++
 sd/uiconfig/simpress/ui/notebookbar.ui                               |   54 
+++++++++
 sfx2/sdi/appslots.sdi                                                |    1 
 sfx2/sdi/sfx.sdi                                                     |    5 
 sfx2/source/appl/appserv.cxx                                         |   55 
+++++++++-
 sw/uiconfig/swriter/ui/notebookbar.ui                                |   54 
+++++++++
 18 files changed, 313 insertions(+), 6 deletions(-)

New commits:
commit c6c14fc03a14b1b399a0b53e2f691b05b33e0f81
Author:     Justin Luth <justin.l...@collabora.com>
AuthorDate: Sat Apr 27 10:58:45 2024 -0400
Commit:     Miklos Vajna <vmik...@collabora.com>
CommitDate: Thu Jun 27 15:25:22 2024 +0200

    tdf#160349: add .uno:ChangeTheme to notebookbar to toggle dark mode
    
    A temporary (ugly, but appropriate) icon has been assigned.
    
    The toggle can be customize-assigned to keyboard, menu, and toolbar,
    and can be found by searching for "Dark Mode".
    
    In the menu, it is checked when in Dark mode,
    and in the toolbar it is "depressed" or highlighted as active.
    
    Dark mode has been added to the view tab of notebookbar.ui.
    I added it as NOT VISIBLE, for several reasons.
    - dark mode is rather new and not so stable, so don't over-promote it.
    - notebookbars cannot be infinitely customized by the end user,
      so developers have to add all items. Users only enable or disable.
    - toggling dark mode really ought to be done at the OS level,
      and typically should be a one-time setting,
      therefore not appropriate to waste precious toolbar space.
    
    The primary benefit of making it available in the menu
    is for QA testers who want to easily switch back and forth.
    WARNING: by customizing the notebookbar, you prevent seeing
    any future NBB changes made to the program
    (until you reset to defaults or blow away the user profile).
    
    Dark Mode can easily be added to a menu, toolbar or keyboard shortcut
    by the end user, so I didn't bother adding it anywhere else.
    
    To avoid completely cluttering up this commit,
    I only added Dark mode to the main notebookbar.
    Once this commit has been finalized,
    the other writer-apps and notebookbars can
    also gain this command.
    
    Change-Id: Ia7594ad81e305ead922abd0ad7b41d6fc0413053
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/166781
    Reviewed-by: Heiko Tietze <heiko.tie...@documentfoundation.org>
    Tested-by: Jenkins
    Reviewed-by: Justin Luth <jl...@mail.com>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169638
    Reviewed-by: Miklos Vajna <vmik...@collabora.com>
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com>

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 4c4365a5ad9a..6567f42c538e 100644
--- a/officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu
+++ b/officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu
@@ -1396,6 +1396,17 @@ bit 3 (0x8): #define 
UICOMMANDDESCRIPTION_PROPERTIES_TOGGLEBUTTON 8
           <value xml:lang="en-US">Undo</value>
         </prop>
       </node>
+      <node oor:name=".uno:ChangeTheme" oor:op="replace">
+        <prop oor:name="Label" oor:type="xs:string">
+          <value xml:lang="en-US">Dark Mode</value>
+        </prop>
+        <prop oor:name="TooltipLabel" oor:type="xs:string">
+          <value xml:lang="en-US">Toggle between dark and light modes</value>
+        </prop>
+        <prop oor:name="Properties" oor:type="xs:int">
+          <value>1</value>
+        </prop>
+      </node>
       <node oor:name=".uno:ToggleControlFocus" oor:op="replace">
         <prop oor:name="Label" oor:type="xs:string">
           <value xml:lang="en-US">Control Focus</value>
diff --git a/sc/uiconfig/scalc/ui/notebookbar.ui 
b/sc/uiconfig/scalc/ui/notebookbar.ui
index cdbe495a3fd2..9215cf584de3 100644
--- a/sc/uiconfig/scalc/ui/notebookbar.ui
+++ b/sc/uiconfig/scalc/ui/notebookbar.ui
@@ -9708,6 +9708,60 @@
                         <property name="position">3</property>
                       </packing>
                     </child>
+                    <child>
+                      <object class="VclOptionalBox" 
id="View-Section-DarkMode">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="valign">center</property>
+                        <property name="vexpand">True</property>
+                        <child>
+                          <object class="GtkSeparator" 
id="separator-section-darkmode">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="margin_top">5</property>
+                            <property name="margin_bottom">5</property>
+                            <property name="orientation">vertical</property>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">True</property>
+                            <property name="padding">5</property>
+                            <property name="position">0</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="sfxlo-NotebookbarToolBox" 
id="Section-darkmode">
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="valign">center</property>
+                            <property name="vexpand">True</property>
+                            <property name="toolbar_style">both</property>
+                            <property name="show_arrow">False</property>
+                            <property name="icon_size">3</property>
+                            <child>
+                              <object class="GtkToolButton" id="View-DarkMode">
+                                <property name="visible">False</property>
+                                <property 
name="action_name">.uno:ChangeTheme</property>
+                              </object>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="homogeneous">True</property>
+                              </packing>
+                            </child>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">True</property>
+                            <property name="position">1</property>
+                          </packing>
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">True</property>
+                        <property name="position">4</property>
+                      </packing>
+                    </child>
                     <child>
                       <object class="VclOptionalBox" id="View-Section-Zoom">
                         <property name="visible">True</property>
diff --git a/sd/uiconfig/sdraw/ui/notebookbar.ui 
b/sd/uiconfig/sdraw/ui/notebookbar.ui
index 32e7212d5e70..c3923c4daa5f 100644
--- a/sd/uiconfig/sdraw/ui/notebookbar.ui
+++ b/sd/uiconfig/sdraw/ui/notebookbar.ui
@@ -7902,6 +7902,60 @@
                         <property name="position">10</property>
                       </packing>
                     </child>
+                    <child>
+                      <object class="VclOptionalBox" 
id="View-Section-DarkMode">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="valign">center</property>
+                        <property name="vexpand">True</property>
+                        <child>
+                          <object class="GtkSeparator" 
id="separator-section-darkmode">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="margin_top">5</property>
+                            <property name="margin_bottom">5</property>
+                            <property name="orientation">vertical</property>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">True</property>
+                            <property name="padding">5</property>
+                            <property name="position">0</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="sfxlo-NotebookbarToolBox" 
id="Section-darkmode">
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="valign">center</property>
+                            <property name="vexpand">True</property>
+                            <property name="toolbar_style">both</property>
+                            <property name="show_arrow">False</property>
+                            <property name="icon_size">3</property>
+                            <child>
+                              <object class="GtkToolButton" id="View-DarkMode">
+                                <property name="visible">False</property>
+                                <property 
name="action_name">.uno:ChangeTheme</property>
+                              </object>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="homogeneous">True</property>
+                              </packing>
+                            </child>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">True</property>
+                            <property name="position">1</property>
+                          </packing>
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">True</property>
+                        <property name="position">11</property>
+                      </packing>
+                    </child>
                     <child>
                       <object class="VclOptionalBox" 
id="View-Section-DisplayQuality">
                         <property name="visible">True</property>
diff --git a/sd/uiconfig/simpress/ui/notebookbar.ui 
b/sd/uiconfig/simpress/ui/notebookbar.ui
index 18530c457d7a..6fe56e76ac92 100644
--- a/sd/uiconfig/simpress/ui/notebookbar.ui
+++ b/sd/uiconfig/simpress/ui/notebookbar.ui
@@ -9147,6 +9147,60 @@
                         <property name="position">13</property>
                       </packing>
                     </child>
+                    <child>
+                      <object class="VclOptionalBox" 
id="View-Section-DarkMode">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="valign">center</property>
+                        <property name="vexpand">True</property>
+                        <child>
+                          <object class="GtkSeparator" 
id="separator-section-darkmode">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="margin_top">5</property>
+                            <property name="margin_bottom">5</property>
+                            <property name="orientation">vertical</property>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">True</property>
+                            <property name="padding">5</property>
+                            <property name="position">0</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="sfxlo-NotebookbarToolBox" 
id="Section-darkmode">
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="valign">center</property>
+                            <property name="vexpand">True</property>
+                            <property name="toolbar_style">both</property>
+                            <property name="show_arrow">False</property>
+                            <property name="icon_size">3</property>
+                            <child>
+                              <object class="GtkToolButton" id="View-DarkMode">
+                                <property name="visible">False</property>
+                                <property 
name="action_name">.uno:ChangeTheme</property>
+                              </object>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="homogeneous">True</property>
+                              </packing>
+                            </child>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">True</property>
+                            <property name="position">1</property>
+                          </packing>
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">True</property>
+                        <property name="position">14</property>
+                      </packing>
+                    </child>
                     <child>
                       <object class="VclOptionalBox" 
id="View-Section-DisplayQuality">
                         <property name="visible">True</property>
diff --git a/sfx2/sdi/appslots.sdi b/sfx2/sdi/appslots.sdi
index 2ea5dd7a7580..45166d3376f6 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 ;
     ]
     FN_INVERT_BACKGROUND // ole(no) api(final/play/rec)
     [
diff --git a/sfx2/sdi/sfx.sdi b/sfx2/sdi/sfx.sdi
index 23e97115b737..b8e116a7a042 100644
--- a/sfx2/sdi/sfx.sdi
+++ b/sfx2/sdi/sfx.sdi
@@ -5901,12 +5901,15 @@ 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 8da1edce2c1f..8407e0248594 100644
--- a/sfx2/source/appl/appserv.cxx
+++ b/sfx2/source/appl/appserv.cxx
@@ -601,20 +601,57 @@ void SfxApplication::MiscExec_Impl( SfxRequest& rReq )
         case FN_CHANGE_THEME:
         {
             const SfxStringItem* pNewThemeArg = 
rReq.GetArg<SfxStringItem>(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;
         }
         case FN_INVERT_BACKGROUND:
@@ -1222,6 +1259,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 b6a99ef1a79b..60581d7f0442 100644
--- a/sw/uiconfig/swriter/ui/notebookbar.ui
+++ b/sw/uiconfig/swriter/ui/notebookbar.ui
@@ -9073,6 +9073,60 @@
                         <property name="position">3</property>
                       </packing>
                     </child>
+                    <child>
+                      <object class="VclOptionalBox" 
id="View-Section-DarkMode">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="valign">center</property>
+                        <property name="vexpand">True</property>
+                        <child>
+                          <object class="GtkSeparator" 
id="separator-section-darkmode">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="margin_top">5</property>
+                            <property name="margin_bottom">5</property>
+                            <property name="orientation">vertical</property>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">True</property>
+                            <property name="padding">5</property>
+                            <property name="position">0</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="sfxlo-NotebookbarToolBox" 
id="Section-darkmode">
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="valign">center</property>
+                            <property name="vexpand">True</property>
+                            <property name="toolbar_style">both</property>
+                            <property name="show_arrow">False</property>
+                            <property name="icon_size">3</property>
+                            <child>
+                              <object class="GtkToolButton" id="View-DarkMode">
+                                <property name="visible">False</property>
+                                <property 
name="action_name">.uno:ChangeTheme</property>
+                              </object>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="homogeneous">True</property>
+                              </packing>
+                            </child>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">True</property>
+                            <property name="position">1</property>
+                          </packing>
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">True</property>
+                        <property name="position">4</property>
+                      </packing>
+                    </child>
                     <child>
                       <object class="VclOptionalBox" id="View-Section-Zoom">
                         <property name="visible">True</property>

Reply via email to