summaryrefslogtreecommitdiff
path: root/Mozo
diff options
context:
space:
mode:
authorVictor Kareh <[email protected]>2026-03-03 15:23:30 -0500
committerVictor Kareh <[email protected]>2026-03-03 15:23:30 -0500
commitae37271573f7b5ab88614679bd3220f86c05262f (patch)
tree2d10856378eaae54605da5e618a1fdd6f52f7e02 /Mozo
parent89532fb843cedb669e3af7d20fc1c1ba5c618af6 (diff)
downloadmozo-new-app-name-filename.tar.bz2
mozo-new-app-name-filename.tar.xz
Use application name for generated .desktop filenamesnew-app-name-filename
Instead of naming user-created launchers mozo-made.desktop, mozo-made-1.desktop, etc., derive the filename from the Name field (e.g. "My App" becomes My-App.desktop). This makes it easier to identify launcher files in ~/.local/share/applications/. Fixes #27
Diffstat (limited to 'Mozo')
-rw-r--r--Mozo/MainWindow.py16
-rw-r--r--Mozo/util.py10
2 files changed, 26 insertions, 0 deletions
diff --git a/Mozo/MainWindow.py b/Mozo/MainWindow.py
index 31b2135..070c738 100644
--- a/Mozo/MainWindow.py
+++ b/Mozo/MainWindow.py
@@ -270,11 +270,26 @@ class MainWindow:
name = '<small><i>' + html.escape(item.get_name()) + '</i></small>'
self.item_store.append((show, icon, name, item))
+ def _renameToNameBased(self, file_path, extension):
+ try:
+ keyfile = GLib.KeyFile()
+ keyfile.load_from_file(file_path, util.KEY_FILE_FLAGS)
+ name = keyfile.get_string(GLib.KEY_FILE_DESKTOP_GROUP, 'Name')
+ name = util.sanitizeFileName(name)
+ except Exception:
+ return file_path
+ new_file_id = util.getUniqueFileId(name, extension)
+ new_path = os.path.join(os.path.split(file_path)[0], new_file_id)
+ if new_path != file_path:
+ os.rename(file_path, new_path)
+ return new_path
+
#this is a little timeout callback to insert new items after
#mate-desktop-item-edit has finished running
def waitForNewItemProcess(self, process, parent_id, file_path):
if process.poll() is not None:
if os.path.isfile(file_path):
+ file_path = self._renameToNameBased(file_path, '.desktop')
self.editor.insertExternalItem(os.path.split(file_path)[1], parent_id)
return False
return True
@@ -286,6 +301,7 @@ class MainWindow:
if os.path.isfile(broken_path):
os.rename(broken_path, file_path)
if os.path.isfile(file_path):
+ file_path = self._renameToNameBased(file_path, '.directory')
self.editor.insertExternalMenu(os.path.split(file_path)[1], parent_id)
return False
return True
diff --git a/Mozo/util.py b/Mozo/util.py
index 72df83e..a9bde70 100644
--- a/Mozo/util.py
+++ b/Mozo/util.py
@@ -18,6 +18,7 @@
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
import os
+import re
import xml.dom.minidom
import gi
gi.require_version('Gtk', '3.0')
@@ -41,6 +42,15 @@ def fillKeyFile(keyfile, items):
elif isinstance(item, str):
keyfile.set_string(DESKTOP_GROUP, key, item)
+def sanitizeFileName(name):
+ name = name.strip()
+ name = re.sub(r'[/\\<>:"|?*\x00-\x1f]', '-', name)
+ name = name.replace(' ', '-')
+ name = name.strip('.')
+ if not name:
+ name = 'mozo-made'
+ return name
+
def getUniqueFileId(name, extension):
append = 0
while 1: