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)
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()
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()
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()
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)
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)
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
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)
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)
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)
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()
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
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
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()
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
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)
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)
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)
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])