Blob Blame History Raw
commit fab91e9c2549bd284dda3cc0f2cffc7ae6c14f0f
Author: Stefano Facchini <stefano.facchini@gmail.com>
Date:   Mon Aug 26 16:37:34 2013 +0200

    Do not leave behind stale .desktop files
    
    If the user clicked on Cancel in the Editor dialog, we should remove
    the .desktop file we just copied to ~/.local/share/applications.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=706807

diff --git a/Alacarte/ItemEditor.py b/Alacarte/ItemEditor.py
index f9d709a..2330de0 100644
--- a/Alacarte/ItemEditor.py
+++ b/Alacarte/ItemEditor.py
@@ -20,7 +20,7 @@ import gettext
 import os
 import gi
 gi.require_version('Gtk', '3.0')
-from gi.repository import GLib, Gtk
+from gi.repository import GLib, GObject, Gtk
 from Alacarte import config, util
 
 _ = gettext.gettext
@@ -91,10 +91,15 @@ class IconPicker(object):
             self.image.props.file = chooser.get_filename()
         chooser.destroy()
 
-class ItemEditor(object):
+class ItemEditor(GObject.GObject):
     ui_file = None
 
+    __gsignals__ = {
+        'response': (GObject.SIGNAL_RUN_FIRST, None, (bool,))
+    }
+
     def __init__(self, parent, item_path):
+        GObject.GObject.__init__(self)
         self.builder = Gtk.Builder()
         self.builder.add_from_file(os.path.join(config.pkgdatadir, self.ui_file))
 
@@ -158,6 +163,7 @@ class ItemEditor(object):
         if response == Gtk.ResponseType.OK:
             self.save()
         self.dialog.destroy()
+        self.emit('response', response == Gtk.ResponseType.OK)
 
 class LauncherEditor(ItemEditor):
     ui_file = 'launcher-editor.ui'
diff --git a/Alacarte/MainWindow.py b/Alacarte/MainWindow.py
index 291949d..40c108d 100644
--- a/Alacarte/MainWindow.py
+++ b/Alacarte/MainWindow.py
@@ -303,12 +303,19 @@ class MainWindow(object):
             file_type = 'Menu'
             Editor = DirectoryEditor
 
+        copied = False
         if not os.path.isfile(file_path):
             shutil.copy(item.get_desktop_file_path(), file_path)
+            copied = True
 
         editor = Editor(self.main_window, file_path)
+        editor.connect('response', self.on_editor_response, file_path if copied else None)
         editor.run()
 
+    def on_editor_response(self, editor, modified, file_path):
+        if not modified and file_path is not None:
+            os.remove(file_path)
+
     def on_menu_tree_cursor_changed(self, treeview):
         selection = treeview.get_selection()
         if selection is None: