From 203b39a42a3522d1aa61adeff300404ae87209b2 Mon Sep 17 00:00:00 2001 From: Clayton Date: Wed, 4 Feb 2026 00:21:34 -0600 Subject: [PATCH] fix: editable title in edit layout mode only --- frappe/desk/page/desktop/desktop.css | 12 ++++++++++-- frappe/desk/page/desktop/desktop.js | 23 ++++++++++++++--------- 2 files changed, 24 insertions(+), 11 deletions(-) diff --git a/frappe/desk/page/desktop/desktop.css b/frappe/desk/page/desktop/desktop.css index d009a6b3dc..119b5fc747 100644 --- a/frappe/desk/page/desktop/desktop.css +++ b/frappe/desk/page/desktop/desktop.css @@ -509,10 +509,18 @@ position: relative; } -.title-widget:hover .title-input-label { +.title-widget--read-only { + cursor: default; +} + +.title-widget--editable:hover .title-input-label { opacity: 0.9; } +.desktop-modal-heading .title-widget--read-only .title-input-label:hover { + background-color: transparent; +} + .desktop-modal-heading .title-widget .title-input-label { color: var(--neutral-white); font-size: var(--text-2xl); @@ -522,7 +530,7 @@ transition: background-color 0.15s ease; } -.desktop-modal-heading .title-widget:hover .title-input-label { +.desktop-modal-heading .title-widget--editable:hover .title-input-label { background-color: rgba(255, 255, 255, 0.08); } diff --git a/frappe/desk/page/desktop/desktop.js b/frappe/desk/page/desktop/desktop.js index d2de33b733..89a394f5c4 100644 --- a/frappe/desk/page/desktop/desktop.js +++ b/frappe/desk/page/desktop/desktop.js @@ -1038,7 +1038,8 @@ class DesktopIcon { let modal = frappe.desktop_utils.create_desktop_modal(me); modal.setup(me.icon_title, me.child_icons, 4); let $title = modal.modal.find(".modal-title"); - let title = new InlineEditor($title, this.icon_data.label, function ( + const edit_mode = frappe.pages["desktop"].desktop_page.edit_mode; + let title = new InlineEditor($title, this.icon_data.label, edit_mode, function ( old_value, new_value ) { @@ -1051,11 +1052,8 @@ class DesktopIcon { frappe.pages["desktop"].desktop_page.update(); - let desktop_page = frappe.pages["desktop"].desktop_page; - if (desktop_page.edit_mode) { - save_desktop(frappe.new_desktop_icons); - } else { - desktop_page.save_layout(frappe.desktop_icons, []); + if (!frappe.pages["desktop"].desktop_page.edit_mode) { + frappe.pages["desktop"].desktop_page.save_layout(frappe.desktop_icons, []); } }); modal.show(); @@ -1245,10 +1243,14 @@ class IconsPane { } class InlineEditor { - constructor(container, initialValue = "", onRename = () => {}) { + constructor(container, initialValue = "", editMode = false, onRename = () => {}) { this.container = container; this.currentValue = initialValue; - this.onRename = onRename; + this.editMode = editMode; + this.onRename = typeof editMode === "function" ? editMode : onRename; + if (typeof editMode === "function") { + this.editMode = false; + } this.isEditing = false; this.render(); @@ -1256,8 +1258,10 @@ class InlineEditor { } render() { + const tooltip = this.editMode ? __("Click to edit") : ""; + const editableClass = this.editMode ? "title-widget--editable" : "title-widget--read-only"; this.container.html(` -
+
${__(this.currentValue)}