You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Editing panel icons appears not to work, because cinnamon does not pick up the change unless restarted. Multiple edits in a row cause a hang on "OK"
Steps to reproduce
Right-click a panel launcher → Edit → change the command → click OK. Note that your changes don't appear to be reflected in the icon. Right click it and edit it again. This time the dialog
stops responding and never closes.
The new ~/.local/share/cinnamon/panel-launchers/cinnamon-custom-launcher-N.desktop
file is written, but the applet's launcherList setting is never updated,
and the panel icon doesn't change. Every time I retry it writes another orphaned cinnamon-custom-launcher-N.desktop file.
Expected behavior
I expect to be able to edit my panel icons and the changes take effect immediately (It used to work this way, some time back)
Additional information
Root cause
In cinnamon-desktop-editor.py, Main.panel_launcher_cb:
list.index() raises ValueError when the item is missing — it never returns
-1. The dead if i >= 0: guard suggests the code was written assuming
JavaScript indexOf semantics. When the -f desktop id passed by the applet
is not present in the JSON launcherList, the callback raises, PyGObject
swallows the exception at the signal boundary, and self.end() / Gtk.main_quit() is never reached — the dialog hangs. Because save() runs
before the callback, the orphan .desktop file has already been written.
Why the id mismatch is guaranteed to arise (second defect)
The editor writes launcherList straight into the applet's JSON settings file
via JsonSettingsWidgets.JSONSettingsHandler and never notifies Cinnamon.
On the JS side, js/ui/settings.js contains no file monitor at all — external
setting changes only reach a running xlet through the org.Cinnamon.updateSetting D-Bus method (cinnamonDBus.js → remoteUpdate()), which is what cinnamon-settings/xlet-settings.py (line
452) calls after saving. cinnamon-desktop-editor.py contains no D-Bus code.
Consequence on any stock install:
First edit of a regular (non-custom) launcher: JSON is updated — the entry
is replaced by cinnamon-custom-launcher-N.desktop — but the panel shows no change whatsoever until Cinnamon is restarted.
The user, seeing nothing happen, naturally edits the icon again. The
applet's stale in-memory launcher passes the original desktop id via -f,
which is no longer in launcherList.
launchers.index() raises ValueError → dialog hangs (defect Configuration: Can't modify favorite apps #1). Every
retry until a Cinnamon restart hangs identically, each writing another
orphan cinnamon-custom-launcher-N.desktop.
So the reproduction on a fresh install is simply: edit any panel launcher,
then edit it again without restarting Cinnamon.
Suggested fix
Notify Cinnamon after saving, the same way xlet-settings.py does
(org.Cinnamon.updateSetting), so the panel refreshes and the second-edit
id mismatch can't happen in the normal flow.
I am a real person, really experiencing this problem. I used Claude's LLM to help me troubleshoot, collect information, and include thorough information in this bug report.
Distribution
Mint 22.3
Package version
Cinnamon 6.6.9
Graphics hardware in use
NVIDIA (always gpu mode)
Frequency
Always
Bug description
Editing panel icons appears not to work, because cinnamon does not pick up the change unless restarted. Multiple edits in a row cause a hang on "OK"
Steps to reproduce
Right-click a panel launcher → Edit → change the command → click OK. Note that your changes don't appear to be reflected in the icon. Right click it and edit it again. This time the dialog
stops responding and never closes.
The new
~/.local/share/cinnamon/panel-launchers/cinnamon-custom-launcher-N.desktopfile is written, but the applet's
launcherListsetting is never updated,and the panel icon doesn't change. Every time I retry it writes another orphaned
cinnamon-custom-launcher-N.desktopfile.Expected behavior
I expect to be able to edit my panel icons and the changes take effect immediately (It used to work this way, some time back)
Additional information
Root cause
In
cinnamon-desktop-editor.py,Main.panel_launcher_cb:list.index()raisesValueErrorwhen the item is missing — it never returns-1. The dead
if i >= 0:guard suggests the code was written assumingJavaScript
indexOfsemantics. When the-fdesktop id passed by the appletis not present in the JSON
launcherList, the callback raises, PyGObjectswallows the exception at the signal boundary, and
self.end()/Gtk.main_quit()is never reached — the dialog hangs. Becausesave()runsbefore the callback, the orphan .desktop file has already been written.
Why the id mismatch is guaranteed to arise (second defect)
The editor writes
launcherListstraight into the applet's JSON settings filevia
JsonSettingsWidgets.JSONSettingsHandlerand never notifies Cinnamon.On the JS side,
js/ui/settings.jscontains no file monitor at all — externalsetting changes only reach a running xlet through the
org.Cinnamon.updateSettingD-Bus method (cinnamonDBus.js→remoteUpdate()), which is whatcinnamon-settings/xlet-settings.py(line452) calls after saving.
cinnamon-desktop-editor.pycontains no D-Bus code.Consequence on any stock install:
is replaced by
cinnamon-custom-launcher-N.desktop— but the panel showsno change whatsoever until Cinnamon is restarted.
applet's stale in-memory launcher passes the original desktop id via
-f,which is no longer in
launcherList.launchers.index()raisesValueError→ dialog hangs (defect Configuration: Can't modify favorite apps #1). Everyretry until a Cinnamon restart hangs identically, each writing another
orphan
cinnamon-custom-launcher-N.desktop.So the reproduction on a fresh install is simply: edit any panel launcher,
then edit it again without restarting Cinnamon.
Suggested fix
(
org.Cinnamon.updateSetting), so the panel refreshes and the second-editid mismatch can't happen in the normal flow.
(plus a try/finally around the callback body so
self.end()always runs andthe dialog can never be left hanging).
Notes
~/.xsession-errorsor the journal, which makes thishard to diagnose from logs alone.
cinnamon-desktop-editor: Fixed panel launcher add/edit dialogs breakage. #6067 (different mechanism).
Note
I am a real person, really experiencing this problem. I used Claude's LLM to help me troubleshoot, collect information, and include thorough information in this bug report.