diff --git a/frappe/desk/doctype/desktop_icon/desktop_icon.js b/frappe/desk/doctype/desktop_icon/desktop_icon.js
index 64f25a7d53..1b57bfe6dc 100644
--- a/frappe/desk/doctype/desktop_icon/desktop_icon.js
+++ b/frappe/desk/doctype/desktop_icon/desktop_icon.js
@@ -2,7 +2,9 @@
// For license information, please see license.txt
frappe.ui.form.on("Desktop Icon", {
- refresh: function (frm) {},
+ refresh: function (frm) {
+ frm.fields_dict.color.set_data(Object.keys(frappe.palette_map));
+ },
before_save: function (frm) {
if (frm.doc.type == "workspace") {
frappe.call({
diff --git a/frappe/desk/doctype/desktop_icon/desktop_icon.json b/frappe/desk/doctype/desktop_icon/desktop_icon.json
index 1af69bc9e6..aa76da3526 100644
--- a/frappe/desk/doctype/desktop_icon/desktop_icon.json
+++ b/frappe/desk/doctype/desktop_icon/desktop_icon.json
@@ -128,7 +128,7 @@
},
{
"fieldname": "color",
- "fieldtype": "Color",
+ "fieldtype": "Autocomplete",
"label": "Color"
},
{
@@ -166,7 +166,7 @@
}
],
"links": [],
- "modified": "2025-09-04 00:30:45.311189",
+ "modified": "2025-09-08 02:43:09.997790",
"modified_by": "Administrator",
"module": "Desk",
"name": "Desktop Icon",
diff --git a/frappe/desk/doctype/desktop_icon/desktop_icon.py b/frappe/desk/doctype/desktop_icon/desktop_icon.py
index b8569b3252..0288da4257 100644
--- a/frappe/desk/doctype/desktop_icon/desktop_icon.py
+++ b/frappe/desk/doctype/desktop_icon/desktop_icon.py
@@ -23,7 +23,7 @@ class DesktopIcon(Document):
app: DF.Data | None
blocked: DF.Check
category: DF.Data | None
- color: DF.Color | None
+ color: DF.Autocomplete | None
custom: DF.Check
description: DF.SmallText | None
force_show: DF.Check
@@ -601,3 +601,20 @@ def generate_color():
return random.randint(0, 255)
return "#%02X%02X%02X" % (hex(), hex(), hex())
+
+
+def create_desktop_icons_from_installed_apps():
+ from frappe.apps import is_desk_apps
+
+ apps = frappe.get_installed_apps()
+ for a in apps:
+ app_details = frappe.get_hooks("add_to_apps_screen", app_name=a)
+ if len(app_details) != 0:
+ if not is_desk_apps(app_details):
+ icon = frappe.new_doc("Desktop Icon")
+ icon.route = app_details[0]["route"]
+ icon.label = app_details[0]["title"]
+ icon.type = "link"
+ icon.link = app_details[0]["route"]
+ icon.logo_url = app_details[0]["logo"]
+ icon.save()
diff --git a/frappe/desk/page/desktop/desktop.css b/frappe/desk/page/desktop/desktop.css
index 38a596aedf..b25eba00ef 100644
--- a/frappe/desk/page/desktop/desktop.css
+++ b/frappe/desk/page/desktop/desktop.css
@@ -2,9 +2,11 @@
display: flex;
align-items: center;
justify-content: center;
+ flex-direction: column;
+ margin-top: 20px;
}
.icon-stroke{
- stroke-width: 1px;
+ stroke-width: 1.5px;
}
.icons{
gap: 30px;
@@ -44,4 +46,4 @@
text-align: center;
text-wrap: nowrap;
margin-top: 5px;
-}
+}
\ No newline at end of file
diff --git a/frappe/desk/page/desktop/desktop.html b/frappe/desk/page/desktop/desktop.html
index cdce7a62e2..f7dc833ba2 100644
--- a/frappe/desk/page/desktop/desktop.html
+++ b/frappe/desk/page/desktop/desktop.html
@@ -1,6 +1,17 @@
+
{% for icon in icons %}
diff --git a/frappe/desk/page/desktop/desktop.js b/frappe/desk/page/desktop/desktop.js
index 13a61d16ac..95170082b7 100644
--- a/frappe/desk/page/desktop/desktop.js
+++ b/frappe/desk/page/desktop/desktop.js
@@ -9,12 +9,12 @@ frappe.pages["desktop"].on_page_load = function (wrapper) {
$(frappe.render_template("desktop")).appendTo(page.body);
setup();
};
+frappe.pages["desktop"].on_page_show = function (wrapper) {};
function setup() {
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]);
- let color_scheme = frappe.palette[i % frappe.palette.length];
if ($(el).attr("data-logo") != "None") {
// create a img tag
@@ -31,6 +31,8 @@ function setup() {
// Apply stroke via CSS
if (desktop_icon_style !== "Monochrome") {
let bg_color, text_color;
+ let color_scheme =
+ frappe.palette[frappe.palette_map[icon_container.attr("data-color")]];
if (desktop_icon_style === "Subtle") {
bg_color = `var(${color_scheme[0]})`;
text_color = color_scheme[1];
@@ -41,13 +43,13 @@ function setup() {
// #0289f7bd
var style = window.getComputedStyle(document.body);
console.log(style.getPropertyValue(color_scheme[1]));
- bg_color = style.getPropertyValue(color_scheme[1]) + "bd";
+ bg_color = style.getPropertyValue(color_scheme[1]) + "e6";
text_color = color_scheme[0];
}
icon_container.css("background-color", `${bg_color}`);
$svg.find("*").css("stroke", `var(${text_color})`);
- // Also apply to the root