diff --git a/frappe/boot.py b/frappe/boot.py index 7b3a473d48..22d0dd3dad 100644 --- a/frappe/boot.py +++ b/frappe/boot.py @@ -150,6 +150,7 @@ def load_desktop_data(bootinfo): from frappe.desk.desktop import get_workspace_sidebar_items bootinfo.desktop_icons = get_desktop_icons() + bootinfo.desktop_icon_style = frappe.get_single_value("Desktop Settings", "icon_style") bootinfo.workspaces = get_workspace_sidebar_items() bootinfo.workspace_sidebar_item = get_sidebar_items() allowed_pages = [d.name for d in bootinfo.workspaces.get("pages")] diff --git a/frappe/desk/doctype/desktop_settings/__init__.py b/frappe/desk/doctype/desktop_settings/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/frappe/desk/doctype/desktop_settings/desktop_settings.js b/frappe/desk/doctype/desktop_settings/desktop_settings.js new file mode 100644 index 0000000000..8897feffbc --- /dev/null +++ b/frappe/desk/doctype/desktop_settings/desktop_settings.js @@ -0,0 +1,8 @@ +// Copyright (c) 2025, Frappe Technologies and contributors +// For license information, please see license.txt + +// frappe.ui.form.on("Desktop Settings", { +// refresh(frm) { + +// }, +// }); diff --git a/frappe/desk/doctype/desktop_settings/desktop_settings.json b/frappe/desk/doctype/desktop_settings/desktop_settings.json new file mode 100644 index 0000000000..dff27adfc0 --- /dev/null +++ b/frappe/desk/doctype/desktop_settings/desktop_settings.json @@ -0,0 +1,43 @@ +{ + "actions": [], + "allow_rename": 1, + "creation": "2025-09-07 17:00:48.624209", + "doctype": "DocType", + "engine": "InnoDB", + "field_order": [ + "icon_style" + ], + "fields": [ + { + "fieldname": "icon_style", + "fieldtype": "Select", + "label": "Icon Style", + "options": "Monochrome\nSubtle\nSubtle Reverse\nSubtle Reverse w Opacity" + } + ], + "grid_page_length": 50, + "index_web_pages_for_search": 1, + "issingle": 1, + "links": [], + "modified": "2025-09-07 20:33:40.024916", + "modified_by": "Administrator", + "module": "Desk", + "name": "Desktop Settings", + "owner": "Administrator", + "permissions": [ + { + "create": 1, + "delete": 1, + "email": 1, + "print": 1, + "read": 1, + "role": "System Manager", + "share": 1, + "write": 1 + } + ], + "row_format": "Dynamic", + "sort_field": "creation", + "sort_order": "DESC", + "states": [] +} diff --git a/frappe/desk/doctype/desktop_settings/desktop_settings.py b/frappe/desk/doctype/desktop_settings/desktop_settings.py new file mode 100644 index 0000000000..535195ec64 --- /dev/null +++ b/frappe/desk/doctype/desktop_settings/desktop_settings.py @@ -0,0 +1,20 @@ +# Copyright (c) 2025, Frappe Technologies and contributors +# For license information, please see license.txt + +# import frappe +from frappe.model.document import Document + + +class DesktopSettings(Document): + # begin: auto-generated types + # This code is auto-generated. Do not modify anything in this block. + + from typing import TYPE_CHECKING + + if TYPE_CHECKING: + from frappe.types import DF + + icon_style: DF.Literal["Monochrome", "Subtle", "Subtle Reverse", "Subtle Reverse w Opacity"] + # end: auto-generated types + + pass diff --git a/frappe/desk/doctype/desktop_settings/test_desktop_settings.py b/frappe/desk/doctype/desktop_settings/test_desktop_settings.py new file mode 100644 index 0000000000..384ef8c5eb --- /dev/null +++ b/frappe/desk/doctype/desktop_settings/test_desktop_settings.py @@ -0,0 +1,20 @@ +# Copyright (c) 2025, Frappe Technologies and Contributors +# See license.txt + +# import frappe +from frappe.tests import IntegrationTestCase + +# On IntegrationTestCase, the doctype test records and all +# link-field test record dependencies are recursively loaded +# Use these module variables to add/remove to/from that list +EXTRA_TEST_RECORD_DEPENDENCIES = [] # eg. ["User"] +IGNORE_TEST_RECORD_DEPENDENCIES = [] # eg. ["User"] + + +class IntegrationTestDesktopSettings(IntegrationTestCase): + """ + Integration tests for DesktopSettings. + Use this class for testing interactions between multiple components. + """ + + pass diff --git a/frappe/desk/page/desktop/desktop.js b/frappe/desk/page/desktop/desktop.js index 949655b71c..13a61d16ac 100644 --- a/frappe/desk/page/desktop/desktop.js +++ b/frappe/desk/page/desktop/desktop.js @@ -10,7 +10,7 @@ frappe.pages["desktop"].on_page_load = function (wrapper) { setup(); }; function setup() { - let desktop_icon_theme = frappe.boot.desktop_icon_theme; + let desktop_icon_style = frappe.boot.desktop_icon_style; $(".desktop-icon").each((i, el) => { let icon_name = $(el).attr("data-icon"); let icon_container = $(el.children[0]); @@ -29,15 +29,15 @@ function setup() { const $svg = $(svg); // Apply stroke via CSS - if (desktop_icon_theme !== "Monochrome") { + if (desktop_icon_style !== "Monochrome") { let bg_color, text_color; - if (desktop_icon_theme === "Subtle") { + if (desktop_icon_style === "Subtle") { bg_color = `var(${color_scheme[0]})`; text_color = color_scheme[1]; - } else if (desktop_icon_theme === "Subtle Reverse") { + } else if (desktop_icon_style === "Subtle Reverse") { bg_color = `var(${color_scheme[1]})`; text_color = color_scheme[0]; - } else if (desktop_icon_theme === "Subtle Reverse w Opacity") { + } else if (desktop_icon_style === "Subtle Reverse w Opacity") { // #0289f7bd var style = window.getComputedStyle(document.body); console.log(style.getPropertyValue(color_scheme[1]));