Esempio n. 1
0
    def on_edit_properties_activate(self, menu):
        item_tree = self.tree.get_object(self.last_tree)
        items, iter = item_tree.get_selection().get_selected()
        if not iter:
            return
        item = items[iter][3]
        if not isinstance(item, CMenu.TreeEntry) and not isinstance(
                item, CMenu.TreeDirectory):
            return

        if isinstance(item, CMenu.TreeEntry):
            file_path = os.path.join(util.getUserItemPath(),
                                     item.get_desktop_file_id())
            file_type = 'launcher'
        elif isinstance(item, CMenu.TreeDirectory):
            file_path = os.path.join(
                util.getUserDirectoryPath(),
                os.path.split(item.get_desktop_file_path())[1])
            file_type = 'directory'

        if not os.path.isfile(file_path):
            shutil.copy(item.get_desktop_file_path(), file_path)

        if file_path not in self.edit_pool:
            self.edit_pool.append(file_path)
            process = subprocess.Popen([
                'cinnamon-desktop-editor', '-m' + file_type, '-o' + file_path
            ],
                                       env=os.environ)
            GObject.timeout_add(100, self.waitForEditProcess, process,
                                file_path)
Esempio n. 2
0
 def setVisible(self, item, visible):
     dom = self.dom
     if isinstance(item, GMenu.TreeEntry):
         menu_xml = self.getXmlMenu(self.getPath(item.get_parent()),
                                    dom.documentElement, dom)
         if visible:
             self.addXmlFilename(menu_xml, dom, item.get_desktop_file_id(),
                                 'Include')
             self.writeItem(item, NoDisplay=False)
         else:
             self.addXmlFilename(menu_xml, dom, item.get_desktop_file_id(),
                                 'Exclude')
         self.addXmlTextElement(menu_xml, 'AppDir', util.getUserItemPath(),
                                dom)
     elif isinstance(item, GMenu.TreeDirectory):
         item_iter = item.iter()
         first_child_type = item_iter.next()
         #don't mess with it if it's empty
         if first_child_type == GMenu.TreeItemType.INVALID:
             return
         menu_xml = self.getXmlMenu(self.getPath(item), dom.documentElement,
                                    dom)
         for node in self.getXmlNodesByName(['Deleted', 'NotDeleted'],
                                            menu_xml):
             node.parentNode.removeChild(node)
         self.writeMenu(item, NoDisplay=not visible)
         self.addXmlTextElement(menu_xml, 'DirectoryDir',
                                util.getUserDirectoryPath(), dom)
     self.save()
Esempio n. 3
0
 def editItem(self,
              item,
              icon,
              name,
              comment,
              command,
              use_term,
              parent=None,
              final=True):
     #if nothing changed don't make a user copy
     app_info = item.get_app_info()
     if icon == app_info.get_icon() and name == app_info.get_display_name(
     ) and comment == item.get_comment() and command == item.get_exec(
     ) and use_term == item.get_launch_in_terminal():
         return
     #hack, item.get_parent() seems to fail a lot
     if not parent:
         parent = item.get_parent()
     self.writeItem(item,
                    Icon=icon,
                    Name=name,
                    Comment=comment,
                    Exec=command,
                    Terminal=use_term)
     if final:
         dom = self.dom
         menu_xml = self.getXmlMenu(self.getPath(parent),
                                    dom.documentElement, dom)
         self.addXmlTextElement(menu_xml, 'AppDir', util.getUserItemPath(),
                                dom)
     self.save()
Esempio n. 4
0
    def save(self):
        util.fillKeyFile(self.keyfile, self.get_keyfile_edits())
        contents, length = self.keyfile.to_data()
        need_exec = False
        if self.destdir is not None:
            self.item_path = os.path.join(
                self.destdir,
                self.builder.get_object('name-entry').get_text() + ".desktop")
            need_exec = True

        try:
            with open(self.item_path, 'w') as f:
                f.write(contents)
            if need_exec:
                os.chmod(self.item_path, 0o755)

            subprocess.Popen(
                ['update-desktop-database',
                 util.getUserItemPath()],
                env=os.environ)
        except IOError as e:
            if ask(
                    _("Cannot create the launcher at this location.  Add to the desktop instead?"
                      )):
                self.destdir = GLib.get_user_special_dir(
                    GLib.UserDirectory.DIRECTORY_DESKTOP)
                self.save()
Esempio n. 5
0
 def ask_menu_launcher(self, dest_path):
     if ask(
             _("Would you like to add this launcher to the menu also?  It will be placed in the Other category initially."
               )):
         new_file_path = os.path.join(util.getUserItemPath(),
                                      os.path.split(dest_path)[1])
         shutil.copy(dest_path, new_file_path)
Esempio n. 6
0
 def ask_menu_launcher(self, dest_path):
     if ask(
         _(
             "Would you like to add this launcher to the menu also?  It will be placed in the Other category initially."
         )
     ):
         new_file_path = os.path.join(util.getUserItemPath(), os.path.split(dest_path)[1])
         shutil.copy(dest_path, new_file_path)
Esempio n. 7
0
 def pasteItem(self, cut_copy_buffer, menu, file_id = None):
     try:
         path = self.getPath(menu)
         util.fillKeyFile(cut_copy_buffer, dict(Hidden=False, NoDisplay=False))
         name = util.getNameFromKeyFile(cut_copy_buffer)
         if file_id is None:
             file_id = util.getUniqueFileId(name.replace(os.sep, '-'), '.desktop')
         out_path = os.path.join(util.getUserItemPath(), file_id)
         contents, length = cut_copy_buffer.to_data()
         f = open(out_path, 'w')
         f.write(contents)
         f.close()
         menu_xml = self.getXmlMenu(path, self.dom.documentElement, self.dom)
         self.addXmlFilename(menu_xml, self.dom, file_id, 'Include')
         self.addXmlTextElement(menu_xml, 'AppDir', util.getUserItemPath(), self.dom)
         self.save()
         return True
     except:
         return False
Esempio n. 8
0
 def pasteItem(self, cut_copy_buffer, menu, file_id = None):
     try:
         path = self.getPath(menu)
         util.fillKeyFile(cut_copy_buffer, dict(Hidden=False, NoDisplay=False))
         name = util.getNameFromKeyFile(cut_copy_buffer)
         if file_id is None:
             file_id = util.getUniqueFileId(name.replace(os.sep, '-'), '.desktop')
         out_path = os.path.join(util.getUserItemPath(), file_id)
         contents, length = cut_copy_buffer.to_data()
         f = open(out_path, 'w')
         f.write(contents)
         f.close()
         menu_xml = self.getXmlMenu(path, self.dom.documentElement, self.dom)
         self.addXmlFilename(menu_xml, self.dom, file_id, 'Include')
         self.addXmlTextElement(menu_xml, 'AppDir', util.getUserItemPath(), self.dom)
         self.save()
         return True
     except:
         return False
Esempio n. 9
0
 def on_new_item_button_clicked(self, button):
     menu_tree = self.tree.get_object('menu_tree')
     menus, iter = menu_tree.get_selection().get_selected()
     if not iter:
         parent = menus[(0,)][2]
         menu_tree.expand_to_path((0,))
         menu_tree.get_selection().select_path((0,))
     else:
         parent = menus[iter][2]
     file_path = os.path.join(util.getUserItemPath(), util.getUniqueFileId('alacarte-made', '.desktop'))
     process = subprocess.Popen(['gnome-desktop-item-edit', file_path], env=os.environ)
     GObject.timeout_add(100, self.waitForNewItemProcess, process, parent.get_menu_id(), file_path)
Esempio n. 10
0
 def on_new_item_button_clicked(self, button):
     menu_tree = self.tree.get_object('menu_tree')
     menus, iter = menu_tree.get_selection().get_selected()
     if not iter:
         parent = menus[(0,)][3]
         menu_tree.expand_to_path((0,))
         menu_tree.get_selection().select_path((0,))
     else:
         parent = menus[iter][3]
     file_path = os.path.join(util.getUserItemPath(), util.getUniqueFileId('alacarte-made', '.desktop'))
     process = subprocess.Popen(['cinnamon-desktop-editor', '-mlauncher', '-o' + file_path], env=os.environ)
     GObject.timeout_add(100, self.waitForNewItemProcess, process, parent.get_menu_id(), file_path)
Esempio n. 11
0
 def on_new_item_button_clicked(self, button):
     menu_tree = self.tree.get_object("menu_tree")
     menus, iter = menu_tree.get_selection().get_selected()
     if not iter:
         parent = menus[(0,)][3]
         menu_tree.expand_to_path((0,))
         menu_tree.get_selection().select_path((0,))
     else:
         parent = menus[iter][3]
     file_path = os.path.join(util.getUserItemPath(), util.getUniqueFileId("alacarte-made", ".desktop"))
     process = subprocess.Popen(["cinnamon-desktop-editor", "-mlauncher", "-o" + file_path], env=os.environ)
     GObject.timeout_add(100, self.waitForNewItemProcess, process, parent.get_menu_id(), file_path)
Esempio n. 12
0
 def editItem(self, item, icon, name, comment, command, use_term, parent=None, final=True):
     #if nothing changed don't make a user copy
     app_info = item.get_app_info()
     if icon == app_info.get_icon() and name == app_info.get_display_name() and comment == item.get_comment() and command == item.get_exec() and use_term == item.get_launch_in_terminal():
         return
     #hack, item.get_parent() seems to fail a lot
     if not parent:
         parent = item.get_parent()
     self.writeItem(item, Icon=icon, Name=name, Comment=comment, Exec=command, Terminal=use_term)
     if final:
         dom = self.dom
         menu_xml = self.getXmlMenu(self.getPath(parent), dom.documentElement, dom)
         self.addXmlTextElement(menu_xml, 'AppDir', util.getUserItemPath(), dom)
     self.save()
Esempio n. 13
0
 def canRevert(self, item):
     if isinstance(item, GMenu.TreeEntry):
         if util.getItemPath(item.get_desktop_file_id()) is not None:
             path = util.getUserItemPath()
             if os.path.isfile(os.path.join(path, item.get_desktop_file_id())):
                 return True
     elif isinstance(item, GMenu.TreeDirectory):
         if item.get_desktop_file_path():
             file_id = os.path.split(item.get_desktop_file_path())[1]
         else:
             file_id = item.get_menu_id() + '.directory'
         if util.getDirectoryPath(file_id) is not None:
             path = util.getUserDirectoryPath()
             if os.path.isfile(os.path.join(path, file_id)):
                 return True
     return False
Esempio n. 14
0
 def canRevert(self, item):
     if isinstance(item, CMenu.TreeEntry):
         if util.getItemPath(item.get_desktop_file_id()) is not None:
             path = util.getUserItemPath()
             if os.path.isfile(os.path.join(path, item.get_desktop_file_id())):
                 return True
     elif isinstance(item, CMenu.TreeDirectory):
         if item.get_desktop_file_path():
             file_id = os.path.split(item.get_desktop_file_path())[1]
         else:
             file_id = item.get_menu_id() + '.directory'
         if util.getDirectoryPath(file_id) is not None:
             path = util.getUserDirectoryPath()
             if os.path.isfile(os.path.join(path, file_id)):
                 return True
     return False
Esempio n. 15
0
    def writeItem(self, item, **kwargs):
        if item is not None:
            file_path = item.get_desktop_file_path()
        else:
            file_path = None

        keyfile = self.makeKeyFile(file_path, kwargs)

        if item is not None:
            file_id = item.get_desktop_file_id()
        else:
            file_id = util.getUniqueFileId(keyfile.get_string(GLib.KEY_FILE_DESKTOP_GROUP, 'Name'), '.desktop')

        contents, length = keyfile.to_data()

        f = open(os.path.join(util.getUserItemPath(), file_id), 'w')
        f.write(contents)
        f.close()
        return file_id
Esempio n. 16
0
    def writeItem(self, item, **kwargs):
        if item is not None:
            file_path = item.get_desktop_file_path()
        else:
            file_path = None

        keyfile = self.makeKeyFile(file_path, kwargs)

        if item is not None:
            file_id = item.get_desktop_file_id()
        else:
            file_id = util.getUniqueFileId(keyfile.get_string(GLib.KEY_FILE_DESKTOP_GROUP, 'Name'), '.desktop')

        contents, length = keyfile.to_data()

        f = open(os.path.join(util.getUserItemPath(), file_id), 'w')
        f.write(contents)
        f.close()
        return file_id
    def save(self):
        util.fillKeyFile(self.keyfile, self.get_keyfile_edits())
        contents, length = self.keyfile.to_data()
        need_exec = False
        if self.destdir is not None:
            self.item_path = os.path.join(self.destdir, self.builder.get_object('name-entry').get_text() + ".desktop")
            need_exec = True

        try:
            with open(self.item_path, 'w') as f:
                f.write(contents)
            if need_exec:
                os.chmod(self.item_path, 0o755)

            subprocess.Popen(['update-desktop-database', util.getUserItemPath()], env=os.environ)
        except IOError as e:
            if ask(_("Cannot create the launcher at this location.  Add to the desktop instead?")):
                self.destdir = GLib.get_user_special_dir(GLib.UserDirectory.DIRECTORY_DESKTOP)
                self.save()
Esempio n. 18
0
 def setVisible(self, item, visible):
     dom = self.dom
     if isinstance(item, GMenu.TreeEntry):
         menu_xml = self.getXmlMenu(self.getPath(item.get_parent()), dom.documentElement, dom)
         if visible:
             self.addXmlFilename(menu_xml, dom, item.get_desktop_file_id(), 'Include')
             self.writeItem(item, NoDisplay=False)
         else:
             self.addXmlFilename(menu_xml, dom, item.get_desktop_file_id(), 'Exclude')
         self.addXmlTextElement(menu_xml, 'AppDir', util.getUserItemPath(), dom)
     elif isinstance(item, GMenu.TreeDirectory):
         item_iter = item.iter()
         first_child_type = item_iter.next()
         #don't mess with it if it's empty
         if first_child_type == GMenu.TreeItemType.INVALID:
             return
         menu_xml = self.getXmlMenu(self.getPath(item), dom.documentElement, dom)
         for node in self.getXmlNodesByName(['Deleted', 'NotDeleted'], menu_xml):
             node.parentNode.removeChild(node)
         self.writeMenu(item, NoDisplay=not visible)
         self.addXmlTextElement(menu_xml, 'DirectoryDir', util.getUserDirectoryPath(), dom)
     self.save()
Esempio n. 19
0
    def copyItem(self, item, new_parent, before=None, after=None):
        dom = self.dom
        file_path = item.get_desktop_file_path()
        keyfile = GLib.KeyFile()
        keyfile.load_from_file(file_path, util.KEY_FILE_FLAGS)

        util.fillKeyFile(keyfile, dict(Categories=[], Hidden=False))

        app_info = item.get_app_info()
        file_id = util.getUniqueFileId(app_info.get_name().replace(os.sep, '-'), '.desktop')
        out_path = os.path.join(util.getUserItemPath(), file_id)

        contents, length = keyfile.to_data()

        f = open(out_path, 'w')
        f.write(contents)
        f.close()

        self.addItem(new_parent, file_id, dom)
        self.positionItem(new_parent, ('Item', file_id), before, after)
        self.save()
        return file_id
Esempio n. 20
0
    def on_edit_properties_activate(self, menu):
        item_tree = self.tree.get_object(self.last_tree)
        items, iter = item_tree.get_selection().get_selected()
        if not iter:
            return
        item = items[iter][3]
        if not isinstance(item, GMenu.TreeEntry) and not isinstance(item, GMenu.TreeDirectory):
            return

        if isinstance(item, GMenu.TreeEntry):
            file_path = os.path.join(util.getUserItemPath(), item.get_desktop_file_id())
            file_type = 'launcher'
        elif isinstance(item, GMenu.TreeDirectory):
            file_path = os.path.join(util.getUserDirectoryPath(), os.path.split(item.get_desktop_file_path())[1])
            file_type = 'directory'

        if not os.path.isfile(file_path):
            shutil.copy(item.get_desktop_file_path(), file_path)

        if file_path not in self.edit_pool:
            self.edit_pool.append(file_path)
            process = subprocess.Popen(['cinnamon-desktop-editor', '-m' + file_type, '-o' + file_path], env=os.environ)
            GObject.timeout_add(100, self.waitForEditProcess, process, file_path)
Esempio n. 21
0
    def on_edit_properties_activate(self, menu):
        item_tree = self.tree.get_object(self.last_tree)
        items, iter = item_tree.get_selection().get_selected()
        if not iter:
            return
        item = items[iter][3]
        if not isinstance(item, GMenu.TreeEntry) and not isinstance(item, GMenu.TreeDirectory):
            return

        if isinstance(item, GMenu.TreeEntry):
            file_path = os.path.join(util.getUserItemPath(), item.get_desktop_file_id())
            file_type = 'Item'
        elif isinstance(item, GMenu.TreeDirectory):
            file_path = os.path.join(util.getUserDirectoryPath(), os.path.split(item.get_desktop_file_path())[1])
            file_type = 'Menu'

        if not os.path.isfile(file_path):
            data = open(item.get_desktop_file_path()).read()
            open(file_path, 'w').write(data)

        if file_path not in self.edit_pool:
            self.edit_pool.append(file_path)
            process = subprocess.Popen(['gnome-desktop-item-edit', file_path], env=os.environ)
            GObject.timeout_add(100, self.waitForEditProcess, process, file_path)
Esempio n. 22
0
    def on_edit_properties_activate(self, menu):
        item_tree = self.tree.get_object('item_tree')
        items, iter = item_tree.get_selection().get_selected()
        if not iter:
            return
        item = items[iter][3]
        if not isinstance(item, GMenu.TreeEntry) and not isinstance(item, GMenu.TreeDirectory):
            return

        if isinstance(item, GMenu.TreeEntry):
            file_path = os.path.join(util.getUserItemPath(), item.get_desktop_file_id())
            file_type = 'Item'
        elif isinstance(item, GMenu.TreeDirectory):
            file_path = os.path.join(util.getUserDirectoryPath(), os.path.split(item.get_desktop_file_path())[1])
            file_type = 'Menu'

        if not os.path.isfile(file_path):
            data = open(item.get_desktop_file_path()).read()
            open(file_path, 'w').write(data)

        if file_path not in self.edit_pool:
            self.edit_pool.append(file_path)
            process = subprocess.Popen(['gnome-desktop-item-edit', file_path], env=os.environ)
            GObject.timeout_add(100, self.waitForEditProcess, process, file_path)
Esempio n. 23
0
 def check_custom_path(self):
     if self.item_path:
         self.item_path = os.path.join(util.getUserItemPath(),
                                       os.path.split(self.item_path)[1])
 def check_custom_path(self):
     self.item_path = os.path.join(util.getUserItemPath(), os.path.split(self.item_path)[1])