vcl/unx/gtk3/custom-theme.cxx | 1098 +++++++++++++++++-------------------------
 1 file changed, 462 insertions(+), 636 deletions(-)

New commits:
commit 0dc9fea9cce7a8c9be800139565f757cb4775fc2
Author:     Sahil Gautam <[email protected]>
AuthorDate: Wed Dec 25 19:17:43 2024 +0530
Commit:     Sahil Gautam <[email protected]>
CommitDate: Mon Jan 26 09:26:52 2026 +0100

    tdf#164393 nicely format gtk-css-declarations for custom themeing
    
    these are css definitions as strings. previously clang-format messed
    up the structure and it became quite hard to read the code. now it's
    excluded from clang-format's range thanks to the // clang-format off/on
    comments
    
    Change-Id: I3ba54a5ac5ef036f08558c607df911a1eb0db1e1
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/179403
    Tested-by: Jenkins
    Reviewed-by: Mike Kaganski <[email protected]>
    (cherry picked from commit aa93f7366236c5c291a8984900eb863b98d4da07)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/198072
    Reviewed-by: Sahil Gautam <[email protected]>
    Tested-by: Jenkins CollaboraOffice <[email protected]>

diff --git a/vcl/unx/gtk3/custom-theme.cxx b/vcl/unx/gtk3/custom-theme.cxx
index 9e3024dd0bf9..a5e7cb3a1f9a 100644
--- a/vcl/unx/gtk3/custom-theme.cxx
+++ b/vcl/unx/gtk3/custom-theme.cxx
@@ -131,647 +131,473 @@ OString CreateStyleString()
     else
         aPressedColor.DecreaseLuminance(30);
 
+    // clang-format off
     OUString aStr =
         /***************
              * Base States *
              ***************/
         ".background {"
-        "  background-color: #"
-        + aThemeColors.GetWindowColor().AsRGBHexString()
-        + ";"
-          "  color: #"
-        + aThemeColors.GetWindowTextColor().AsRGBHexString()
-        + ";"
-          "}"
-
-          ".view {"
-          "  background-color: #"
-        + aThemeColors.GetBaseColor().AsRGBHexString()
-        + ";"
-          "  color: #"
-        + aThemeColors.GetWindowTextColor().AsRGBHexString()
-        + ";"
-          "}"
-
-          "textview text {"
-          "  background-color: #"
-        + aThemeColors.GetBaseColor().AsRGBHexString()
-        + ";"
-          "}"
-
-          /*********
-             * Links *
-             *********/
-          "*:link,"
-          "link {"
-          "  color: #"
-        + aThemeColors.GetActiveColor().AsRGBHexString()
-        + ";"
-          "}"
-
-          "*:visited {"
-          "  color: #"
-        + aThemeColors.GetBaseColor().AsRGBHexString()
-        + ";"
-          "}"
-
-          /************
-             * Toolbars *
-             ************/
-          "toolbar {"
-          "  background-color: #"
-        + aThemeColors.GetWindowColor().AsRGBHexString()
-        + ";"
-          "}"
-
-          ".toolbar {"
-          "  background-color: #"
-        + aThemeColors.GetWindowColor().AsRGBHexString()
-        + ";"
-          "}"
-
-          /**************
-             * Tree Views *
-             **************/
-          "treeview.view:selected {"
-          "  background-color: #"
-        + aThemeColors.GetAccentColor().AsRGBHexString()
-        + ";"
-          "  color: #"
-        + aThemeColors.GetWindowTextColor().AsRGBHEXString()
-        + ";"
-          "}"
-
-          "treeview.view:drop(active) {"
-          "  border-style: solid none;"
-          "  border-color: alpha(currentColor, 0.08);"
-          "}"
-
-          "treeview.view.expander {"
-          "  color: #"
-        + aThemeColors.GetFaceColor().AsRGBHexString()
-        + ";"
-          "}"
-
-          "treeview.view.expander:hover,"
-          "treeview.view.expander:active {"
-          "  color: #"
-        + aThemeColors.GetWindowTextColor().AsRGBHexString()
-        + ";"
-          "}"
-
-          "treeview.view.expander:disabled {"
-          "  color: #"
-        + aThemeColors.GetInactiveColor().AsRGBHexString()
-        + ";"
-          "}"
-
-          // this part is still left
-          "treeview.view.trough {"
-          "  background-color: rgba(239, 241, 245, 0.12);"
-          "}"
-
-          "treeview.view header button:not(:focus):not(:hover):not(:active) {"
-          "  color: #"
-        + aThemeColors.GetWindowTextColor().AsRGBHexString()
-        + ";"
-          "}"
-
-          "treeview.view header button,"
-          "treeview.view header button:disabled {"
-          "  background-color: #"
-        + aThemeColors.GetInactiveColor().AsRGBHexString()
-        + ";"
-          "}"
-
-          "treeview.view header button:last-child {"
-          "  border-right-style: none;"
-          "}"
-
-          "treeview.view button.dnd,"
-          "treeview.view header.button.dnd {"
-          "  background-color: #ff0000;"
-          "  color: #89b4fa;"
-          "}"
-
-          /*********
-             * Menus *
-             *********/
-          "menubar,"
-          ".menubar {"
-          "  background-color: #"
-        + aThemeColors.GetMenuBarColor().AsRGBHexString()
-        + ";"
-          "}"
-
-          "menubar > menuitem,"
-          ".menubar > menuitem {"
-          "  color: #"
-        + aThemeColors.GetMenuBarTextColor().AsRGBHexString()
-        + ";"
-          "}"
-
-          "menubar > menuitem:hover,"
-          ".menubar > menuitem:hover {"
-          "  background-color: #"
-        + aThemeColors.GetMenuBarHighlightColor().AsRGBHexString()
-        + ";"
-          "  color: #"
-        + aThemeColors.GetMenuBarHighlightTextColor().AsRGBHexString()
-        + ";"
-          "}"
-
-          "menubar > menuitem:disabled,"
-          ".menubar > menuitem:disabled {"
-          "  color: #"
-        + aThemeColors.GetInactiveTextColor().AsRGBHexString()
-        + ";"
-          "}"
-
-          "menubar > menuitem label:disabled,"
-          ".menubar > menuitem label:disabled {"
-          "  color: inherit;"
-          "}"
-
-          "menu {"
-          "  background-color: #"
-        + aThemeColors.GetMenuColor().AsRGBHexString()
-        + ";"
-          "  border: 1px solid #"
-        + aThemeColors.GetMenuBorderColor().AsRGBHexString()
-        + ";"
-          "}"
-
-          "menu menuitem {"
-          "  color: #"
-        + aThemeColors.GetMenuTextColor().AsRGBHexString()
-        + ";"
-          "}"
-
-          "menu menuitem:hover {"
-          "  background-color: #"
-        + aThemeColors.GetMenuHighlightColor().AsRGBHexString()
-        + ";"
-          "  color: #"
-        + aThemeColors.GetMenuHighlightTextColor().AsRGBHexString()
-        + ";"
-          "}"
-
-          "menu menuitem:active {"
-          "  background-color: alpha(currentColor, 0.12);"
-          "}"
-
-          "menu menuitem:disabled {"
-          "  background-color: #"
-        + aThemeColors.GetMenuColor().AsRGBHexString()
-        + ";"
-          "  color: #"
-        + aThemeColors.GetDisabledTextColor().AsRGBHexString()
-        + ";"
-          " border-left: 1px solid #"
-        + aThemeColors.GetMenuBorderColor().AsRGBHexString()
-        + ";"
-          " border-right: 1px solid #"
-        + aThemeColors.GetMenuBorderColor().AsRGBHexString()
-        + ";"
-          "}"
-
-          "menu menuitem accelerator {"
-          "  color: rgba(239, 241, 245, 0.7);" // ???
-          "}"
-
-          "menu menuitem:disabled accelerator {"
-          "  color: rgba(239, 241, 245, 0.32);" // ???
-          "}"
-
-          "menu menuitem label:dir(rtl),"
-          "menu menuitem label:dir(ltr) {"
-          "  color: inherit;"
-          "}"
-
-          /*************
-             * Notebooks *
-             *************/
-
-          "tabbox > tab:hover,"
-          "notebook > header tab:hover {"
-          "  background-color: #"
-        + aPressedColor.AsRGBHexString()
-        + ";"
-          "  border: 1px solid #"
-        + aThemeColors.GetSeparatorColor().AsRGBHexString()
-        + ";"
-          "  color: #"
-        + aThemeColors.GetWindowTextColor().AsRGBHexString()
-        + ";"
-          "}"
-          ""
-          "tabbox > tab:checked, notebook > header tab:checked {"
-          "  background-color: #"
-        + aPressedColor.AsRGBHexString()
-        + ";"
-          "  border: 1px solid #"
-        + aThemeColors.GetSeparatorColor().AsRGBHexString()
-        + ";"
-          "  color: #"
-        + aThemeColors.GetWindowTextColor().AsRGBHexString()
-        + ";"
-          "}"
-          ""
-          "notebook {"
-          "  background-color: #"
-        + aThemeColors.GetWindowColor().AsRGBHexString()
-        + ";"
-          "}"
-          ""
-          "notebook > header {"
-          "  background-color: #"
-        + aThemeColors.GetBaseColor().AsRGBHexString()
-        + ";"
-          "  border-color: #"
-        + aThemeColors.GetBaseColor().AsRGBHexString()
-        + ";"
-          "}"
-          ""
-          "notebook > stack:not(:only-child) {"
-          "  background-color: transparent;"
-          "}"
-
-          /************
-             * Scrollbar*
-            *************/
-
-          "scrollbar {"
-          "  background-color: #"
-        + aThemeColors.GetBaseColor().AsRGBHexString()
-        + ";"
-          "}"
-
-          "scrollbar slider {"
-          "  border: 4px solid transparent;"
-          "  background-clip: padding-box;"
-          "  background-color: #"
-        + aThemeColors.GetWindowColor().AsRGBHexString()
-        + ";"
-          "}"
-
-          "scrollbar slider:hover {"
-          "  background-color: #"
-        + aThemeColors.GetWindowTextColor().AsRGBHexString()
-        + ";"
-          "}"
-
-          "scrollbar slider:active {"
-          "  background-color: #"
-        + aThemeColors.GetWindowTextColor().AsRGBHexString()
-        + ";"
-          "}"
-
-          "scrollbar slider:disabled {"
-          "  background-color: #"
-        + aThemeColors.GetInactiveColor().AsRGBHexString()
-        + ";"
-          "}"
-
-          "scrollbar.overlay-indicator:not(.dragging):not(.hovering) {"
-          "  background-color: transparent;"
-          "}"
-
-          /*****************
-             * Check n Radio *
-             * ***************/
-
-          "check:disabled,"
-          "radio:disabled {"
-          "  background-color: #"
-        + aThemeColors.GetInactiveColor().AsRGBHexString()
-        + ";"
-          "}"
-
-          "check:checked,"
-          "check:indeterminate,"
-          "radio:checked,"
-          "radio:indeterminate {"
-          "  color: rgba(17, 17, 27, 0.87);"
-          "  background-color: #"
-        + aThemeColors.GetActiveColor().AsRGBHexString()
-        + ";"
-          "}"
-
-          "check:checked:hover,"
-          "check:indeterminate:hover,"
-          "radio:checked:hover,"
-          "radio:indeterminate:hover {"
-          "  box-shadow: 0 0 0 6px rgba(137, 180, 250, 0.15);"
-          "  background-color: #"
-        + aThemeColors.GetWindowTextColor().AsRGBHexString()
-        + ";"
-          "}"
-
-          "check:checked:active,"
-          "check:indeterminate:active,"
-          "radio:checked:active,"
-          "radio:indeterminate:active {"
-          "  box-shadow: 0 0 0 6px rgba(137, 180, 250, 0.2);"
-          "  background-color: #"
-        + aThemeColors.GetActiveColor().AsRGBHexString()
-        + ";"
-          "}"
-
-          "check:checked:disabled,"
-          "check:indeterminate:disabled,"
-          "radio:checked:disabled,"
-          "radio:indeterminate:disabled {"
-          "  color: rgba(17, 17, 27, 0.38);"
-          "  background-color: #"
-        + aThemeColors.GetInactiveColor().AsRGBHexString()
-        + ";"
-          "}"
-
-          /***************
-             * Progressbar *
-             * *************/
-
-          "progressbar {"
-          "  color: rgba(239, 241, 245, 0.7);"
-          "  font-size: smaller;"
-          "}"
-
-          "progressbar trough {"
-          "  background-color: #"
-        + aThemeColors.GetBaseColor().AsRGBHexString()
-        + ";"
-          "}"
-
-          "progressbar progress {"
-          "  background-color: #"
-        + aThemeColors.GetActiveColor().AsRGBHexString()
-        + ";"
-          "}"
-
-          "frame > border,"
-          ".frame {"
-          "  border-radius: 0;"
-          "  box-shadow: none;"
-          "}"
-
-          ".frame.view {"
-          "  border-radius: 6px;"
-          "}"
-
-          ".frame.flat {"
-          "  border-style: none;"
-          "}"
-
-          "separator {"
-          "  min-width: 1px;"
-          "  min-height: 1px;"
-          "  background-color: #"
-        + aThemeColors.GetBaseColor().AsRGBHexString()
-        + ";"
-          "}"
-
-          /***********
-             * Buttons *
-             ***********/
-
-          ".toolbar button:checked,"
-          "#buttonbox_frame button:checked,"
-          "layouttabbar button:checked,"
-          "messagedialog .dialog-action-box button:checked,"
-          "messagedialog .dialog-action-box .linked:not(.vertical) > 
button:checked,"
-          "popover.background.menu button:checked,"
-          "popover.background button.model:checked,"
-          "headerbar 
button:checked:not(.suggested-action):not(.destructive-action),"
-          "toolbar button:checked,"
-          "combobox > .linked:not(.vertical) > 
button:checked:not(:only-child),"
-          "button.flat:checked,"
-          "button.flat:checked:hover {"
-          "  background-color: alpha(#"
-        + aThemeColors.GetButtonColor().AsRGBHexString()
-        + ", 0.1);"
-          "  color: #"
-        + aThemeColors.GetButtonTextColor().AsRGBHexString()
-        + ";"
-          "}"
-          ""
-          "button:active {"
-          "  background-color: #"
-        + aPressedColor.AsRGBHexString()
-        + ";"
-          "  color: #"
-        + aThemeColors.GetButtonTextColor().AsRGBHexString()
-        + ";"
-          "}"
-
-          "button:disabled {"
-          "  background-color: #"
-        + aThemeColors.GetInactiveColor().AsRGBHexString()
-        + ";"
-          "  color: #"
-        + aThemeColors.GetInactiveTextColor().AsRGBHexString()
-        + ";"
-          "  border: 1px solid #"
-        + aThemeColors.GetInactiveBorderColor().AsRGBHexString()
-        + ";"
-          "}"
-
-          /*****************
-             * GtkSpinButton *
-             *****************/
-
-          "spinbutton > entry,"
-          "spinbutton > entry:focus,"
-          "spinbutton > entry:disabled,"
-          ".background:not(.csd) spinbutton > entry,"
-          ".background:not(.csd) spinbutton > entry:focus,"
-          ".background:not(.csd) spinbutton > entry:disabled {"
-          "  border: none;"
-          "  box-shadow: none;"
-          "  background-color: transparent;"
-          "}"
-
-          "spinbutton > button {"
-          "  border: solid 6px transparent;"
-          "}"
-
-          "spinbutton > button:focus:not(:hover):not(:active):not(:disabled) {"
-          "  box-shadow: inset 0 0 0 9999px transparent;"
-          "  color: #"
-        + aThemeColors.GetButtonTextColor().AsRGBHexString()
-        + ";"
-          "}"
-
-          "spinbutton,"
-          "entry {"
-          "  background-color: #"
-        + aSpinBack.AsRGBHexString()
-        + ";"
-          "  color: #"
-        + aThemeColors.GetButtonTextColor().AsRGBHexString()
-        + ";"
-          "}"
-
-          "spinbutton:focus,"
-          "entry:focus {"
-          "  background-color: #"
-        + aSpinBack.AsRGBHexString()
-        + ";"
-          "  box-shadow: inset 0 0 0 2px #"
-        + aThemeColors.GetActiveColor().AsRGBHexString()
-        + ";"
-          "}"
-
-          "spinbutton:disabled,"
-          "entry:disabled {"
-          "  box-shadow: inset 0 0 0 2px transparent;"
-          "  background-color: #"
-        + aSpinBack.AsRGBHexString()
-        + ";"
-          "  color: #"
-        + aThemeColors.GetInactiveTextColor().AsRGBHexString()
-        + ";"
-          "}"
-
-          /**************
-             * ComboBoxes *
-             **************/
-          "button.combo:only-child {"
-          "  background-color: #"
-        + aThemeColors.GetButtonColor().AsRGBHexString()
-        + ";"
-          "  color: #"
-        + aThemeColors.GetButtonTextColor().AsRGBHexString()
-        + ";"
-          "}"
-
-          "button.combo:only-child:checked {"
-          "  background-color: #"
-        + aPressedColor.AsRGBHexString()
-        + ";"
-          "  box-shadow: 0 0 0 2px #"
-        + aThemeColors.GetButtonColor().AsRGBHexString()
-        + ";"
-          "}"
-
-          "button.combo:only-child:disabled {"
-          "  box-shadow: 0 0 0 2px transparent;"
-          "  background-color: #"
-        + aThemeColors.GetInactiveColor().AsRGBHexString()
-        + ";"
-          "  color: #"
-        + aThemeColors.GetInactiveTextColor().AsRGBHexString()
-        + ";"
-          "}"
-
-          // this one still needs some digging
-          "button.small-button, toolbar.small-button button, box.small-button 
button {"
-          "  background-color: #"
-        + aThemeColors.GetMenuBarColor().AsRGBHexString()
-        + ";"
-          "}"
-
-          // for the file picker dialog
-          "list {"
-          "  background-color: #"
-        + aThemeColors.GetWindowColor().AsRGBHexString()
-        + ";"
-          "  color: #"
-        + aThemeColors.GetWindowTextColor().AsRGBHexString()
-        + ";"
-          "}"
-
-          "treeview.view header button {"
-          "  background-color: #"
-        + aThemeColors.GetWindowColor().AsRGBHexString()
-        + ";"
-          "  color: #"
-        + aThemeColors.GetWindowTextColor().AsRGBHexString()
-        + ";"
-          "}"
-
-          /************
-             * Tooltips *
-             ************/
-          "tooltip {"
-          "  background-color: #"
-        + aThemeColors.GetBaseColor().AsRGBHexString()
-        + ";"
-          "}"
-
-          "tooltip * {"
-          "  color: #"
-        + aThemeColors.GetWindowTextColor().AsRGBHexString()
-        + ";"
-          "}"
-
-          "actionbar > revealer > box .linked > "
-          "button:not(.suggested-action):not(.destructive-action), button {"
-          "  background-color: #"
-        + aThemeColors.GetButtonColor().AsRGBHexString()
-        + ";"
-          "  background-image: radial-gradient(circle, transparent 10%, 
transparent 0%);"
-          "  color: #"
-        + aThemeColors.GetButtonTextColor().AsRGBHexString()
-        + ";"
-          "}"
-          ""
-          ""
-          "actionbar > revealer > box .linked > "
-          "button:checked:not(.suggested-action):not(.destructive-action), 
button:checked {"
-          "  background-color: #"
-        + aPressedColor.AsRGBHexString()
-        + ";"
-          "  color: #"
-        + aThemeColors.GetButtonTextColor().AsRGBHexString()
-        + ";"
-          "}"
-
-          "tabbox>tab button,"
-          "treeview.view header button button.circular,"
-          "scrollbar button,"
-          "notebook>header>tabs>arrow,"
-          "spinbutton>button,"
-          "toolbar button,"
-          "button.flat {"
-          "  background-color: transparent;"
-          "}"
-
-          "button.flat:hover {"
-          "  background-color: #"
-        + aPressedColor.AsRGBHexString()
-        + ";"
-          "  border: 1px solid #"
-        + aThemeColors.GetSeparatorColor().AsRGBHexString()
-        + ";"
-          "}"
-
-          // this alone won't do
-          ".toolbar button:checked,"
-          ".toolbar button:hover,"
-          "toolbar button:checked,"
-          "toolbar button:hover,"
-          "button.flat:checked,"
-          "button.label-button,"
-          "button.flat:checked:hover {"
-          "  background-color: #"
-        + aPressedColor.AsRGBHexString()
-        + ";"
-          "  text-shadow: none;"
-          "}"
-
-          "button.destructive-action:not(:disabled) {"
-          "  background-color: #f38ba8;"
-          "  color: #"
-        + aThemeColors.GetButtonTextColor().AsRGBHexString()
-        + ";"
-          "}"
-
-          ".view:selected {"
-          "  background-color: #"
-        + aThemeColors.GetAccentColor().AsRGBHexString()
-        + ";"
-          "}";
+        "  background-color: #" + 
aThemeColors.GetWindowColor().AsRGBHexString() + ";"
+        "  color: #" + aThemeColors.GetWindowTextColor().AsRGBHexString() + ";"
+        "}"
+
+        ".view {"
+        "  background-color: #" + aThemeColors.GetBaseColor().AsRGBHexString() 
+ ";"
+        "  color: #" + aThemeColors.GetWindowTextColor().AsRGBHexString() + ";"
+        "}"
+
+        "textview text {"
+        "  background-color: #" + aThemeColors.GetBaseColor().AsRGBHexString() 
+ ";"
+        "}"
+
+        /*********
+           * Links *
+           *********/
+        "*:link,"
+        "link {"
+        "  color: #" + aThemeColors.GetActiveColor().AsRGBHexString() + ";"
+        "}"
+
+        "*:visited {"
+        "  color: #" + aThemeColors.GetBaseColor().AsRGBHexString() + ";"
+        "}"
+
+        /************
+           * Toolbars *
+           ************/
+        "toolbar {"
+        "  background-color: #" + 
aThemeColors.GetWindowColor().AsRGBHexString() + ";"
+        "}"
+
+        ".toolbar {"
+        "  background-color: #" + 
aThemeColors.GetWindowColor().AsRGBHexString() + ";"
+        "}"
+
+        /**************
+           * Tree Views *
+           **************/
+        "treeview.view:selected {"
+        "  background-color: #" + 
aThemeColors.GetAccentColor().AsRGBHexString() + ";"
+        "  color: #" + aThemeColors.GetWindowTextColor().AsRGBHexString() + ";"
+        "}"
+
+        "treeview.view:drop(active) {"
+        "  border-style: solid none;"
+        "  border-color: alpha(currentColor, 0.08);"
+        "}"
+
+        "treeview.view.expander {"
+        "  color: #" + aThemeColors.GetFaceColor().AsRGBHexString() + ";"
+        "}"
+
+        "treeview.view.expander:hover,"
+        "treeview.view.expander:active {"
+        "  color: #" + aThemeColors.GetWindowTextColor().AsRGBHexString() + ";"
+        "}"
+
+        "treeview.view.expander:disabled {"
+        "  color: #" + aThemeColors.GetInactiveColor().AsRGBHexString() + ";"
+        "}"
+
+        // this part is still left
+        "treeview.view.trough {"
+        "  background-color: rgba(239, 241, 245, 0.12);"
+        "}"
+
+        "treeview.view header button:not(:focus):not(:hover):not(:active) {"
+        "  color: #" + aThemeColors.GetWindowTextColor().AsRGBHexString() + ";"
+        "}"
+
+        "treeview.view header button,"
+        "treeview.view header button:disabled {"
+        "  background-color: #" + 
aThemeColors.GetInactiveColor().AsRGBHexString() + ";"
+        "}"
+
+        "treeview.view header button:last-child {"
+        "  border-right-style: none;"
+        "}"
+
+        "treeview.view button.dnd,"
+        "treeview.view header.button.dnd {"
+        "  background-color: #ff0000;"
+        "  color: #89b4fa;"
+        "}"
+
+        /*********
+           * Menus *
+           *********/
+        "menubar,"
+        ".menubar {"
+        "  background-color: #" + 
aThemeColors.GetMenuBarColor().AsRGBHexString() + ";"
+        "}"
+
+        "menubar > menuitem,"
+        ".menubar > menuitem {"
+        "  color: #" + aThemeColors.GetMenuBarTextColor().AsRGBHexString() + 
";"
+        "}"
+
+        "menubar > menuitem:hover,"
+        ".menubar > menuitem:hover {"
+        "  background-color: #" + 
aThemeColors.GetMenuBarHighlightColor().AsRGBHexString() + ";"
+        "  color: #" + 
aThemeColors.GetMenuBarHighlightTextColor().AsRGBHexString() + ";"
+        "}"
+
+        "menubar > menuitem:disabled,"
+        ".menubar > menuitem:disabled {"
+        "  color: #" + aThemeColors.GetInactiveTextColor().AsRGBHexString() + 
";"
+        "}"
+
+        "menubar > menuitem label:disabled,"
+        ".menubar > menuitem label:disabled {"
+        "  color: inherit;"
+        "}"
+
+        "menu {"
+        "  background-color: #" + aThemeColors.GetMenuColor().AsRGBHexString() 
+ ";"
+        "  border: 1px solid #" + 
aThemeColors.GetMenuBorderColor().AsRGBHexString() + ";"
+        "}"
+
+        "menu menuitem {"
+        "  color: #" + aThemeColors.GetMenuTextColor().AsRGBHexString() + ";"
+        "}"
+
+        "menu menuitem:hover {"
+        "  background-color: #" + 
aThemeColors.GetMenuHighlightColor().AsRGBHexString() + ";"
+        "  color: #" + 
aThemeColors.GetMenuHighlightTextColor().AsRGBHexString() + ";"
+        "}"
+
+        "menu menuitem:active {"
+        "  background-color: alpha(currentColor, 0.12);"
+        "}"
+
+        "menu menuitem:disabled {"
+        "  background-color: #" + aThemeColors.GetMenuColor().AsRGBHexString() 
+ ";"
+        "  color: #" + aThemeColors.GetDisabledTextColor().AsRGBHexString() + 
";"
+        "  border-left: 1px solid #" + 
aThemeColors.GetMenuBorderColor().AsRGBHexString() + ";"
+        "  border-right: 1px solid #" + 
aThemeColors.GetMenuBorderColor().AsRGBHexString() + ";"
+        "}"
+
+        "menu menuitem accelerator {"
+        "  color: rgba(239, 241, 245, 0.7);" // ???
+        "}"
+
+        "menu menuitem:disabled accelerator {"
+        "  color: rgba(239, 241, 245, 0.32);" // ???
+        "}"
+
+        "menu menuitem label:dir(rtl),"
+        "menu menuitem label:dir(ltr) {"
+        "  color: inherit;"
+        "}"
+
+        /*************
+           * Notebooks *
+           *************/
+
+        "tabbox > tab:hover,"
+        "notebook > header tab:hover {"
+        "  background-color: #" + aPressedColor.AsRGBHexString() + ";"
+        "  border: 1px solid #" + 
aThemeColors.GetSeparatorColor().AsRGBHexString() + ";"
+        "  color: #" + aThemeColors.GetWindowTextColor().AsRGBHexString() + ";"
+        "}"
+
+        "tabbox > tab:checked, notebook > header tab:checked {"
+        "  background-color: #" + aPressedColor.AsRGBHexString() + ";"
+        "  border: 1px solid #" + 
aThemeColors.GetSeparatorColor().AsRGBHexString() + ";"
+        "  color: #" + aThemeColors.GetWindowTextColor().AsRGBHexString() + ";"
+        "}"
+
+        "notebook {"
+        "  background-color: #" + 
aThemeColors.GetWindowColor().AsRGBHexString() + ";"
+        "}"
+
+        "notebook > header {"
+        "  background-color: #" + aThemeColors.GetBaseColor().AsRGBHexString() 
+ ";"
+        "  border-color: #" + aThemeColors.GetBaseColor().AsRGBHexString() + 
";"
+        "}"
+
+        "notebook > stack:not(:only-child) {"
+        "  background-color: transparent;"
+        "}"
+
+        /************
+           * Scrollbar*
+          *************/
+
+        "scrollbar {"
+        "  background-color: #" + aThemeColors.GetBaseColor().AsRGBHexString() 
+ ";"
+        "}"
+
+        "scrollbar slider {"
+        "  border: 4px solid transparent;"
+        "  background-clip: padding-box;"
+        "  background-color: #" + 
aThemeColors.GetWindowColor().AsRGBHexString() + ";"
+        "}"
+
+        "scrollbar slider:hover {"
+        "  background-color: #" + 
aThemeColors.GetWindowTextColor().AsRGBHexString() + ";"
+        "}"
+
+        "scrollbar slider:active {"
+        "  background-color: #" + 
aThemeColors.GetWindowTextColor().AsRGBHexString() + ";"
+        "}"
+
+        "scrollbar slider:disabled {"
+        "  background-color: #" + 
aThemeColors.GetInactiveColor().AsRGBHexString() + ";"
+        "}"
+
+        "scrollbar.overlay-indicator:not(.dragging):not(.hovering) {"
+        "  background-color: transparent;"
+        "}"
+
+        /*****************
+           * Check n Radio *
+           * ***************/
+
+        "check:disabled,"
+        "radio:disabled {"
+        "  background-color: #" + 
aThemeColors.GetInactiveColor().AsRGBHexString() + ";"
+        "}"
+
+        "check:checked,"
+        "check:indeterminate,"
+        "radio:checked,"
+        "radio:indeterminate {"
+        "  color: rgba(17, 17, 27, 0.87);"
+        "  background-color: #" + 
aThemeColors.GetActiveColor().AsRGBHexString() + ";"
+        "}"
+
+        "check:checked:hover,"
+        "check:indeterminate:hover,"
+        "radio:checked:hover,"
+        "radio:indeterminate:hover {"
+        "  box-shadow: 0 0 0 6px rgba(137, 180, 250, 0.15);"
+        "  background-color: #" + 
aThemeColors.GetWindowTextColor().AsRGBHexString() + ";"
+        "}"
+
+        "check:checked:active,"
+        "check:indeterminate:active,"
+        "radio:checked:active,"
+        "radio:indeterminate:active {"
+        "  box-shadow: 0 0 0 6px rgba(137, 180, 250, 0.2);"
+        "  background-color: #" + 
aThemeColors.GetActiveColor().AsRGBHexString() + ";"
+        "}"
+
+        "check:checked:disabled,"
+        "check:indeterminate:disabled,"
+        "radio:checked:disabled,"
+        "radio:indeterminate:disabled {"
+        "  color: rgba(17, 17, 27, 0.38);"
+        "  background-color: #" + 
aThemeColors.GetInactiveColor().AsRGBHexString() + ";"
+        "}"
+
+        /***************
+           * Progressbar *
+           * *************/
+
+        "progressbar {"
+        "  color: rgba(239, 241, 245, 0.7);"
+        "  font-size: smaller;"
+        "}"
+
+        "progressbar trough {"
+        "  background-color: #" + aThemeColors.GetBaseColor().AsRGBHexString() 
+ ";"
+        "}"
+
+        "progressbar progress {"
+        "  background-color: #" + 
aThemeColors.GetActiveColor().AsRGBHexString() + ";"
+        "}"
+
+        "frame > border,"
+        ".frame {"
+        "  border-radius: 0;"
+        "  box-shadow: none;"
+        "}"
+
+        ".frame.view {"
+        "  border-radius: 6px;"
+        "}"
+
+        ".frame.flat {"
+        "  border-style: none;"
+        "}"
+
+        "separator {"
+        "  min-width: 1px;"
+        "  min-height: 1px;"
+        "  background-color: #" + aThemeColors.GetBaseColor().AsRGBHexString() 
+ ";"
+        "}"
+
+        /***********
+           * Buttons *
+           ***********/
+
+        ".toolbar button:checked,"
+        "#buttonbox_frame button:checked,"
+        "layouttabbar button:checked,"
+        "messagedialog .dialog-action-box button:checked,"
+        "messagedialog .dialog-action-box .linked:not(.vertical) > 
button:checked,"
+        "popover.background.menu button:checked,"
+        "popover.background button.model:checked,"
+        "headerbar 
button:checked:not(.suggested-action):not(.destructive-action),"
+        "toolbar button:checked,"
+        "combobox > .linked:not(.vertical) > button:checked:not(:only-child),"
+        "button.flat:checked,"
+        "button.flat:checked:hover {"
+        "  background-color: alpha(#" + 
aThemeColors.GetButtonColor().AsRGBHexString() + ", 0.1);"
+        "  color: #" + aThemeColors.GetButtonTextColor().AsRGBHexString() + ";"
+        "}"
+        ""
+        "button:active {"
+        "  background-color: #" + aPressedColor.AsRGBHexString() + ";"
+        "  color: #" + aThemeColors.GetButtonTextColor().AsRGBHexString() + ";"
+        "}"
+
+        "button:disabled {"
+        "  background-color: #" + 
aThemeColors.GetInactiveColor().AsRGBHexString() + ";"
+        "  color: #" + aThemeColors.GetInactiveTextColor().AsRGBHexString() + 
";"
+        "  border: 1px solid #" + 
aThemeColors.GetInactiveBorderColor().AsRGBHexString() + ";"
+        "}"
+
+        /*****************
+           * GtkSpinButton *
+           *****************/
+
+        "spinbutton > entry,"
+        "spinbutton > entry:focus,"
+        "spinbutton > entry:disabled,"
+        ".background:not(.csd) spinbutton > entry,"
+        ".background:not(.csd) spinbutton > entry:focus,"
+        ".background:not(.csd) spinbutton > entry:disabled {"
+        "  border: none;"
+        "  box-shadow: none;"
+        "  background-color: transparent;"
+        "}"
+
+        "spinbutton > button {"
+        "  border: solid 6px transparent;"
+        "}"
+
+        "spinbutton > button:focus:not(:hover):not(:active):not(:disabled) {"
+        "  box-shadow: inset 0 0 0 9999px transparent;"
+        "  color: #" + aThemeColors.GetButtonTextColor().AsRGBHexString() + ";"
+        "}"
+
+        "spinbutton,"
+        "entry {"
+        "  background-color: #" + aSpinBack.AsRGBHexString() + ";"
+        "  color: #" + aThemeColors.GetButtonTextColor().AsRGBHexString() + ";"
+        "}"
+
+        "spinbutton:focus,"
+        "entry:focus {"
+        "  background-color: #" + aSpinBack.AsRGBHexString() + ";"
+        "  box-shadow: inset 0 0 0 2px #" + 
aThemeColors.GetActiveColor().AsRGBHexString() + ";"
+        "}"
+
+        "spinbutton:disabled,"
+        "entry:disabled {"
+        "  box-shadow: inset 0 0 0 2px transparent;"
+        "  background-color: #" + aSpinBack.AsRGBHexString() + ";"
+        "  color: #" + aThemeColors.GetInactiveTextColor().AsRGBHexString() + 
";"
+        "}"
+
+        /**************
+           * ComboBoxes *
+           **************/
+        "button.combo:only-child {"
+        "  background-color: #" + 
aThemeColors.GetButtonColor().AsRGBHexString() + ";"
+        "  color: #" + aThemeColors.GetButtonTextColor().AsRGBHexString() + ";"
+        "}"
+
+        "button.combo:only-child:checked {"
+        "  background-color: #" + aPressedColor.AsRGBHexString() + ";"
+        "  box-shadow: 0 0 0 2px #" + 
aThemeColors.GetButtonColor().AsRGBHexString() + ";"
+        "}"
+
+        "button.combo:only-child:disabled {"
+        "  box-shadow: 0 0 0 2px transparent;"
+        "  background-color: #" + 
aThemeColors.GetInactiveColor().AsRGBHexString() + ";"
+        "  color: #" + aThemeColors.GetInactiveTextColor().AsRGBHexString() + 
";"
+        "}"
+
+        // this one still needs some digging
+        "button.small-button, toolbar.small-button button, box.small-button 
button {"
+        "  background-color: #" + 
aThemeColors.GetMenuBarColor().AsRGBHexString() + ";"
+        "}"
+
+        // for the file picker dialog
+        "list {"
+        "  background-color: #" + 
aThemeColors.GetWindowColor().AsRGBHexString() + ";"
+        "  color: #" + aThemeColors.GetWindowTextColor().AsRGBHexString() + ";"
+        "}"
+
+        "treeview.view header button {"
+        "  background-color: #" + 
aThemeColors.GetWindowColor().AsRGBHexString() + ";"
+        "  color: #" + aThemeColors.GetWindowTextColor().AsRGBHexString() + ";"
+        "}"
+
+        /************
+           * Tooltips *
+           ************/
+        "tooltip {"
+        "  background-color: #" + aThemeColors.GetBaseColor().AsRGBHexString() 
+ ";"
+        "}"
+
+        "tooltip * {"
+        "  color: #" + aThemeColors.GetWindowTextColor().AsRGBHexString() + ";"
+        "}"
+
+        "actionbar > revealer > box .linked > "
+        "button:not(.suggested-action):not(.destructive-action), button {"
+        "  background-color: #" + 
aThemeColors.GetButtonColor().AsRGBHexString() + ";"
+        "  background-image: radial-gradient(circle, transparent 10%, 
transparent 0%);"
+        "  color: #" + aThemeColors.GetButtonTextColor().AsRGBHexString() + ";"
+        "}"
+
+
+        "actionbar > revealer > box .linked > "
+        "button:checked:not(.suggested-action):not(.destructive-action), 
button:checked {"
+        "  background-color: #" + aPressedColor.AsRGBHexString() + ";"
+        "  color: #" + aThemeColors.GetButtonTextColor().AsRGBHexString() + ";"
+        "}"
+
+        "tabbox>tab button,"
+        "treeview.view header button button.circular,"
+        "scrollbar button,"
+        "notebook>header>tabs>arrow,"
+        "spinbutton>button,"
+        "toolbar button,"
+        "button.flat {"
+        "  background-color: transparent;"
+        "}"
+
+        "button.flat:hover {"
+        "  background-color: #" + aPressedColor.AsRGBHexString() + ";"
+        "  border: 1px solid #" + 
aThemeColors.GetSeparatorColor().AsRGBHexString() + ";"
+        "}"
+
+        // this alone won't do
+        ".toolbar button:checked,"
+        ".toolbar button:hover,"
+        "toolbar button:checked,"
+        "toolbar button:hover,"
+        "button.flat:checked,"
+        "button.label-button,"
+        "button.flat:checked:hover {"
+        "  background-color: #" + aPressedColor.AsRGBHexString() + ";"
+        "  text-shadow: none;"
+        "}"
+
+        "button.destructive-action:not(:disabled) {"
+        "  background-color: #f38ba8;"
+        "  color: #" + aThemeColors.GetButtonTextColor().AsRGBHexString() + ";"
+        "}"
+
+        ".view:selected {"
+        "  background-color: #" + 
aThemeColors.GetAccentColor().AsRGBHexString() + ";"
+        "}";
+    // clang-format on
 
     return OUStringToOString(aStr, RTL_TEXTENCODING_UTF8);
 }

Reply via email to