KDesktopFile *KDesktopFile::copyTo(const QString &file) const { KDesktopFile *config = new KDesktopFile(QString::null, false); KConfig::copyTo(file, config); config->setDesktopGroup(); return config; }
SystrayPlugin::SystrayPlugin(const KDesktopFile & serviceDesktopFile, QString dbusServiceName, QObject * parent): QObject(parent), d(new Private()) { static QString dbusBase = QLatin1String(NSERVICE_DBUS_NAME_PREFIX".%1"); d->init = false; d->name = serviceDesktopFile.readName();; d->shortName = d->name; d->description = serviceDesktopFile.readComment(); d->dbusServiceName = dbusServiceName; d->dbusServiceAddress = dbusBase.arg(dbusServiceName); d->controlInterface = 0; d->watcher = 0; d->devMode = false; d->startStopAction = 0; // Connect some signals connect(this, SIGNAL(shortStatusChanged(Nepomuk::SystrayPlugin*,Nepomuk::SystrayPlugin::ShortStatus)), this, SIGNAL(changed(Nepomuk::SystrayPlugin*)) ); connect(this, SIGNAL(statusMessageChanged(Nepomuk::SystrayPlugin*,QString)), this, SIGNAL(changed(Nepomuk::SystrayPlugin*)) ); }
static KDesktopFile *copyDesktopFile(MenuEntryInfo *entryInfo, QString *menuId, QStringList *excludeList) { QString result = createDesktopFile(entryInfo->file(), menuId, excludeList); KDesktopFile *df = entryInfo->desktopFile()->copyTo(result); df->desktopGroup().deleteEntry("Categories"); // Don't set any categories! return df; }
void BasicTab::apply() { if (_menuEntryInfo) { _menuEntryInfo->setDirty(); _menuEntryInfo->setCaption(_nameEdit->text()); _menuEntryInfo->setDescription(_descriptionEdit->text()); _menuEntryInfo->setIcon(_iconButton->icon()); KDesktopFile *df = _menuEntryInfo->desktopFile(); KConfigGroup dg = df->desktopGroup(); dg.writeEntry("Comment", _commentEdit->text()); if (_systrayCB->isChecked()) dg.writeEntry("Exec", _execEdit->lineEdit()->text().prepend("ksystraycmd ")); else dg.writeEntry("Exec", _execEdit->lineEdit()->text()); dg.writePathEntry("Path", _pathEdit->lineEdit()->text()); if (_terminalCB->isChecked()) dg.writeEntry("Terminal", 1); else dg.writeEntry("Terminal", 0); dg.writeEntry("TerminalOptions", _termOptEdit->text()); dg.writeEntry("X-KDE-SubstituteUID", _uidCB->isChecked()); dg.writeEntry("X-KDE-Username", _uidEdit->text()); dg.writeEntry("StartupNotify", _launchCB->isChecked()); dg.writeEntry( "NoDisplay", _hiddenEntryCB->isChecked() ); QStringList onlyShowIn = df->desktopGroup().readXdgListEntry("OnlyShowIn"); /* the exact semantics of this checkbox are unclear if there is more than just KDE in the list... * For example: - The list is "Gnome;", the user enables "Only show in KDE" - should we remove Gnome? * - The list is "Gnome;KDE;", the user unchecks the box - should we keep Gnome? */ if ( _onlyShowInKdeCB->isChecked() && !onlyShowIn.contains("KDE")) onlyShowIn << "KDE"; else if ( !_onlyShowInKdeCB->isChecked() && onlyShowIn.contains("KDE")) onlyShowIn.removeAll("KDE"); if (onlyShowIn.isEmpty()) dg.deleteEntry("OnlyShowIn"); else dg.writeXdgListEntry("OnlyShowIn", onlyShowIn); } else { _menuFolderInfo->setCaption(_nameEdit->text()); _menuFolderInfo->setGenericName(_descriptionEdit->text()); _menuFolderInfo->setComment(_commentEdit->text()); _menuFolderInfo->setIcon(_iconButton->icon()); } }
void KSim::Plugin::init(KSim::PluginObject *plugin, const KDesktopFile &file) { if (!plugin || file.fileName().isEmpty()) { d = 0; return; } d = new Private; d->libName = "ksim_" + file.readEntry("X-KSIM-LIBRARY").local8Bit(); d->name = file.readName(); d->icon = SmallIcon(file.readIcon()); d->filename = file.fileName(); d->plugin = plugin; }
void addBackEnd::aboutToShowAddMenu() { if (!menu) return; KStandardDirs *dirs = KGlobal::dirs(); QStringList list = dirs->findAllResources("data","konqsidebartng/add/*.desktop",true,true); libNames.setAutoDelete(true); libNames.resize(0); libParam.setAutoDelete(true); libParam.resize(0); menu->clear(); int i = 0; for (QStringList::Iterator it = list.begin(); it != list.end(); ++it, i++ ) { KDesktopFile *confFile; confFile = new KDesktopFile(*it, true); if (! confFile->tryExec()) { delete confFile; i--; continue; } if (m_universal) { if (confFile->readEntry("X-KDE-KonqSidebarUniversal").upper()!="TRUE") { delete confFile; i--; continue; } } else { if (confFile->readEntry("X-KDE-KonqSidebarBrowser").upper()=="FALSE") { delete confFile; i--; continue; } } QString icon = confFile->readIcon(); if (!icon.isEmpty()) { menu->insertItem(SmallIcon(icon), confFile->readEntry("Name"), i); } else { menu->insertItem(confFile->readEntry("Name"), i); } libNames.resize(libNames.size()+1); libNames.insert(libNames.count(), new QString(confFile->readEntry("X-KDE-KonqSidebarAddModule"))); libParam.resize(libParam.size()+1); libParam.insert(libParam.count(), new QString(confFile->readEntry("X-KDE-KonqSidebarAddParam"))); delete confFile; } menu->insertSeparator(); menu->insertItem(i18n("Rollback to System Default"), i); }
void readParameters(const QStringList& list) { QStringList::ConstIterator it=list.constBegin(), end=list.constEnd(); for (;it!=end; ++it) { QString groupName = PARAMETER_GROUP_PREFIX + *it; QByteArray internalName = it->toUtf8(); KConfigGroup group = mDesktopFile->group(groupName); QString type = group.readEntry(PARAMETER_TYPE_KEY); AbstractThemeParameter* parameter; if (type == STRING_PARAMETER_TYPE) { parameter = new StringThemeParameter(); } else if (type == LIST_PARAMETER_TYPE) { parameter = new ListThemeParameter(); } else if (type == COLOR_PARAMETER_TYPE) { parameter = new ColorThemeParameter(); } else if (type == INT_PARAMETER_TYPE) { parameter = new IntThemeParameter(); } else { kWarning() << "Parameter '" << internalName << "' has unknown type '" << type << "'. Falling back to string type\n"; parameter = new StringThemeParameter(); } parameter->init(internalName, &group); mParameterList << parameter; } }
// KDE5 TODO: merge with comment()? Need to see what lxr says about the usage of both. QString KFileItem::mimeComment() const { if (!d) { return QString(); } const QString displayType = d->m_entry.stringValue(KIO::UDSEntry::UDS_DISPLAY_TYPE); if (!displayType.isEmpty()) { return displayType; } bool isLocalUrl; QUrl url = mostLocalUrl(&isLocalUrl); QMimeType mime = currentMimeType(); // This cannot move to kio_file (with UDS_DISPLAY_TYPE) because it needs // the mimetype to be determined, which is done here, and possibly delayed... if (isLocalUrl && !d->isSlow() && mime.inherits(QStringLiteral("application/x-desktop"))) { KDesktopFile cfg(url.toLocalFile()); QString comment = cfg.desktopGroup().readEntry("Comment"); if (!comment.isEmpty()) { return comment; } } // Support for .directory file in directories if (isLocalUrl && isDir() && isDirectoryMounted(url)) { QUrl u(url); u.setPath(u.path() + QLatin1String("/.directory")); const KDesktopFile cfg(u.toLocalFile()); const QString comment = cfg.readComment(); if (!comment.isEmpty()) { return comment; } } const QString comment = mime.comment(); //qDebug() << "finding comment for " << url.url() << " : " << d->m_mimeType->name(); if (!comment.isEmpty()) { return comment; } else { return mime.name(); } }
void BasicTab::setEntryInfo(MenuEntryInfo *entryInfo) { blockSignals(true); _menuFolderInfo = 0; _menuEntryInfo = entryInfo; if (!entryInfo) { _nameEdit->clear(); _descriptionEdit->clear(); _commentEdit->clear(); _iconButton->setIcon( QString() ); // key binding part _keyEdit->clearKeySequence(); _execEdit->lineEdit()->clear(); _systrayCB->setChecked(false); _onlyShowInKdeCB->setChecked( false ); _hiddenEntryCB->setChecked( false ); _pathEdit->lineEdit()->clear(); _termOptEdit->clear(); _uidEdit->clear(); _launchCB->setChecked(false); _terminalCB->setChecked(false); _uidCB->setChecked(false); enableWidgets(true, true); blockSignals(false); return; } KDesktopFile *df = entryInfo->desktopFile(); _nameEdit->setText(df->readName()); _descriptionEdit->setText(df->readGenericName()); _descriptionEdit->setCursorPosition(0); _commentEdit->setText(df->readComment()); _commentEdit->setCursorPosition(0); _iconButton->setIcon(df->readIcon()); // key binding part if( KHotKeys::present()) { if ( !entryInfo->shortcut().isEmpty() ) _keyEdit->setKeySequence( entryInfo->shortcut().primary() ); else _keyEdit->clearKeySequence(); } QString temp = df->desktopGroup().readEntry("Exec"); if (temp.startsWith(QLatin1String("ksystraycmd "))) { _execEdit->lineEdit()->setText(temp.right(temp.length()-12)); _systrayCB->setChecked(true); } else { _execEdit->lineEdit()->setText(temp); _systrayCB->setChecked(false); } _pathEdit->lineEdit()->setText(df->readPath()); _termOptEdit->setText(df->desktopGroup().readEntry("TerminalOptions")); _uidEdit->setText(df->desktopGroup().readEntry("X-KDE-Username")); if( df->desktopGroup().hasKey( "StartupNotify" )) _launchCB->setChecked(df->desktopGroup().readEntry("StartupNotify", true)); else // backwards comp. _launchCB->setChecked(df->desktopGroup().readEntry("X-KDE-StartupNotify", true)); _onlyShowInKdeCB->setChecked( df->desktopGroup().readXdgListEntry("OnlyShowIn").contains( "KDE" ) ); // or maybe enable only if it contains nothing but KDE? if ( df->desktopGroup().hasKey( "NoDisplay" ) ) _hiddenEntryCB->setChecked( df->desktopGroup().readEntry( "NoDisplay", true ) ); else _hiddenEntryCB->setChecked( false ); if(df->desktopGroup().readEntry("Terminal", 0) == 1) _terminalCB->setChecked(true); else _terminalCB->setChecked(false); _uidCB->setChecked(df->desktopGroup().readEntry("X-KDE-SubstituteUID", false)); enableWidgets(true, entryInfo->hidden); blockSignals(false); }
void BasicTab::apply() { if (_menuEntryInfo) { _menuEntryInfo->setDirty(); _menuEntryInfo->setCaption(_nameEdit->text()); _menuEntryInfo->setDescription(_descriptionEdit->text()); _menuEntryInfo->setIcon(_iconButton->icon()); KDesktopFile *df = _menuEntryInfo->desktopFile(); df->writeEntry("Comment", _commentEdit->text()); if (_systrayCB->isChecked()) df->writePathEntry("Exec", _execEdit->lineEdit()->text().prepend("ksystraycmd ")); else df->writePathEntry("Exec", _execEdit->lineEdit()->text()); df->writePathEntry("Path", _pathEdit->lineEdit()->text()); if (_terminalCB->isChecked()) df->writeEntry("Terminal", 1); else df->writeEntry("Terminal", 0); df->writeEntry("TerminalOptions", _termOptEdit->text()); df->writeEntry("X-TDE-SubstituteUID", _uidCB->isChecked()); df->writeEntry("X-TDE-Username", _uidEdit->text()); df->writeEntry("StartupNotify", _launchCB->isChecked()); } else { _menuFolderInfo->setCaption(_nameEdit->text()); _menuFolderInfo->setGenericName(_descriptionEdit->text()); _menuFolderInfo->setComment(_commentEdit->text()); _menuFolderInfo->setIcon(_iconButton->icon()); } }
void BasicTab::setEntryInfo(MenuEntryInfo *entryInfo) { blockSignals(true); _menuFolderInfo = 0; _menuEntryInfo = entryInfo; if (!entryInfo) { _nameEdit->setText(TQString::null); _descriptionEdit->setText(TQString::null); _commentEdit->setText(TQString::null); _iconButton->setIcon(TQString::null); // key binding part _keyEdit->setShortcut( TDEShortcut(), false ); _execEdit->lineEdit()->setText(TQString::null); _systrayCB->setChecked(false); _pathEdit->lineEdit()->setText(TQString::null); _termOptEdit->setText(TQString::null); _uidEdit->setText(TQString::null); _launchCB->setChecked(false); _terminalCB->setChecked(false); _uidCB->setChecked(false); enableWidgets(true, true); blockSignals(false); return; } KDesktopFile *df = entryInfo->desktopFile(); _nameEdit->setText(df->readName()); _descriptionEdit->setText(df->readGenericName()); _descriptionEdit->setCursorPosition(0); _commentEdit->setText(df->readComment()); _commentEdit->setCursorPosition(0); _iconButton->setIcon(df->readIcon()); // key binding part if( KHotKeys::present()) { _keyEdit->setShortcut( entryInfo->shortcut(), false ); } TQString temp = df->readPathEntry("Exec"); if (temp.left(12) == "ksystraycmd ") { _execEdit->lineEdit()->setText(temp.right(temp.length()-12)); _systrayCB->setChecked(true); } else { _execEdit->lineEdit()->setText(temp); _systrayCB->setChecked(false); } _pathEdit->lineEdit()->setText(df->readPath()); _termOptEdit->setText(df->readEntry("TerminalOptions")); if( df->hasKey( "X-TDE-Username" )) { _uidEdit->setText(df->readEntry("X-TDE-Username")); } else { _uidEdit->setText(df->readEntry("X-KDE-Username")); } if( df->hasKey( "StartupNotify" )) _launchCB->setChecked(df->readBoolEntry("StartupNotify", true)); else // backwards comp. _launchCB->setChecked(df->readBoolEntry("X-TDE-StartupNotify", true)); if(df->readNumEntry("Terminal", 0) == 1) _terminalCB->setChecked(true); else _terminalCB->setChecked(false); _uidCB->setChecked(df->readBoolEntry("X-TDE-SubstituteUID", false) || df->readBoolEntry("X-KDE-SubstituteUID", false)); enableWidgets(true, entryInfo->hidden); blockSignals(false); }
void TreeView::newsubmenu() { TreeItem *parentItem = 0; TreeItem *item = (TreeItem*)selectedItem(); bool ok; QString caption = KInputDialog::getText( i18n( "New Submenu" ), i18n( "Submenu name:" ), QString(), &ok, this ); if (!ok) return; QString file = caption; file.replace('/', '-'); file = createDirectoryFile(file, &m_newDirectoryList); // Create // get destination folder QString folder; if(!item) { parentItem = 0; folder.clear(); } else if(item->isDirectory()) { parentItem = item; item = 0; folder = parentItem->directory(); } else { parentItem = static_cast<TreeItem*>(item->parent()); folder = parentItem ? parentItem->directory() : QString(); } MenuFolderInfo *parentFolderInfo = parentItem ? parentItem->folderInfo() : m_rootFolder; MenuFolderInfo *folderInfo = new MenuFolderInfo(); folderInfo->caption = parentFolderInfo->uniqueMenuCaption(caption); folderInfo->id = m_menuFile->uniqueMenuName(folder, caption, parentFolderInfo->existingMenuIds()); folderInfo->directoryFile = file; folderInfo->icon = "package"; folderInfo->hidden = false; folderInfo->setDirty(); KDesktopFile *df = new KDesktopFile(file); KConfigGroup desktopGroup = df->desktopGroup(); desktopGroup.writeEntry("Name", folderInfo->caption); desktopGroup.writeEntry("Icon", folderInfo->icon); df->sync(); delete df; // Add file to menu // m_menuFile->addMenu(folder + folderInfo->id, file); m_menuFile->pushAction(MenuFile::ADD_MENU, folder + folderInfo->id, file); folderInfo->fullId = parentFolderInfo->fullId + folderInfo->id; // create the TreeItem if(parentItem) parentItem->setOpen(true); // update fileInfo data parentFolderInfo->add(folderInfo); TreeItem *newItem = createTreeItem(parentItem, item, folderInfo, true); setSelected ( newItem, true); itemSelected( newItem); setLayoutDirty(parentItem); }
void TreeView::slotDropped (QDropEvent * e, Q3ListViewItem *parent, Q3ListViewItem*after) { if(!e) return; // get destination folder TreeItem *parentItem = static_cast<TreeItem*>(parent); QString folder = parentItem ? parentItem->directory() : QString(); MenuFolderInfo *parentFolderInfo = parentItem ? parentItem->folderInfo() : m_rootFolder; if (e->source() != this) { // External drop KUrl::List urls; if (!K3URLDrag::decode(e, urls) || (urls.count() != 1) || !urls[0].isLocalFile()) return; QString path = urls[0].path(); if (!path.endsWith(".desktop")) return; QString menuId; QString result = createDesktopFile(path, &menuId, &m_newMenuIds); KDesktopFile orig_df(path); KDesktopFile *df = orig_df.copyTo(result); df->desktopGroup().deleteEntry("Categories"); // Don't set any categories! KService::Ptr s(new KService(df)); s->setMenuId(menuId); MenuEntryInfo *entryInfo = new MenuEntryInfo(s, df); QString oldCaption = entryInfo->caption; QString newCaption = parentFolderInfo->uniqueItemCaption(oldCaption, oldCaption); entryInfo->setCaption(newCaption); // Add file to menu // m_menuFile->addEntry(folder, menuId); m_menuFile->pushAction(MenuFile::ADD_ENTRY, folder, menuId); // create the TreeItem if(parentItem) parentItem->setOpen(true); // update fileInfo data parentFolderInfo->add(entryInfo); TreeItem *newItem = createTreeItem(parentItem, after, entryInfo, true); setSelected ( newItem, true); itemSelected( newItem); m_drag = 0; setLayoutDirty(parentItem); return; } // is there content in the clipboard? if (!m_drag) return; if (m_dragItem == after) return; // Nothing to do int command = m_drag; if (command == MOVE_FOLDER) { MenuFolderInfo *folderInfo = m_dragInfo; if (e->action() == QDropEvent::Copy) { // Ugh.. this is hard :) // * Create new .directory file // Add } else { TreeItem *tmpItem = static_cast<TreeItem*>(parentItem); while ( tmpItem ) { if ( tmpItem == m_dragItem ) { m_drag = 0; return; } tmpItem = static_cast<TreeItem*>(tmpItem->parent() ); } // Remove MenuFolderInfo TreeItem *oldParentItem = static_cast<TreeItem*>(m_dragItem->parent()); MenuFolderInfo *oldParentFolderInfo = oldParentItem ? oldParentItem->folderInfo() : m_rootFolder; oldParentFolderInfo->take(folderInfo); // Move menu QString oldFolder = folderInfo->fullId; QString folderName = folderInfo->id; QString newFolder = m_menuFile->uniqueMenuName(folder, folderName, parentFolderInfo->existingMenuIds()); folderInfo->id = newFolder; // Add file to menu //m_menuFile->moveMenu(oldFolder, folder + newFolder); m_menuFile->pushAction(MenuFile::MOVE_MENU, oldFolder, folder + newFolder); // Make sure caption is unique QString newCaption = parentFolderInfo->uniqueMenuCaption(folderInfo->caption); if (newCaption != folderInfo->caption) { folderInfo->setCaption(newCaption); } // create the TreeItem if(parentItem) parentItem->setOpen(true); // update fileInfo data folderInfo->updateFullId(parentFolderInfo->fullId); folderInfo->setInUse(true); parentFolderInfo->add(folderInfo); if ((parentItem != oldParentItem) || !after) { if (oldParentItem) oldParentItem->takeItem(m_dragItem); else takeItem(m_dragItem); if (parentItem) parentItem->insertItem(m_dragItem); else insertItem(m_dragItem); } m_dragItem->moveItem(after); m_dragItem->setName(folderInfo->caption); m_dragItem->setDirectoryPath(folderInfo->fullId); setSelected(m_dragItem, true); itemSelected(m_dragItem); } } else if (command == MOVE_FILE) { MenuEntryInfo *entryInfo = m_dragItem->entryInfo(); QString menuId = entryInfo->menuId(); if (e->action() == QDropEvent::Copy) { // Need to copy file and then add it KDesktopFile *df = copyDesktopFile(entryInfo, &menuId, &m_newMenuIds); // Duplicate //UNDO-ACTION: NEW_MENU_ID (menuId) KService::Ptr s(new KService(df)); s->setMenuId(menuId); entryInfo = new MenuEntryInfo(s, df); QString oldCaption = entryInfo->caption; QString newCaption = parentFolderInfo->uniqueItemCaption(oldCaption, oldCaption); entryInfo->setCaption(newCaption); } else { del(m_dragItem, false); QString oldCaption = entryInfo->caption; QString newCaption = parentFolderInfo->uniqueItemCaption(oldCaption); entryInfo->setCaption(newCaption); entryInfo->setInUse(true); } // Add file to menu // m_menuFile->addEntry(folder, menuId); m_menuFile->pushAction(MenuFile::ADD_ENTRY, folder, menuId); // create the TreeItem if(parentItem) parentItem->setOpen(true); // update fileInfo data parentFolderInfo->add(entryInfo); TreeItem *newItem = createTreeItem(parentItem, after, entryInfo, true); setSelected ( newItem, true); itemSelected( newItem); } else if (command == COPY_SEPARATOR) { if (e->action() != QDropEvent::Copy) del(m_dragItem, false); TreeItem *newItem = createTreeItem(parentItem, after, m_separator, true); setSelected ( newItem, true); itemSelected( newItem); } else { // Error } m_drag = 0; setLayoutDirty(parentItem); }
void TreeView::newitem() { TreeItem *parentItem = 0; TreeItem *item = (TreeItem*)selectedItem(); bool ok; QString caption = KInputDialog::getText( i18n( "New Item" ), i18n( "Item name:" ), QString(), &ok, this ); if (!ok) return; QString menuId; QString file = caption; file.replace('/', '-'); file = createDesktopFile(file, &menuId, &m_newMenuIds); // Create KDesktopFile *df = new KDesktopFile(file); KConfigGroup desktopGroup = df->desktopGroup(); desktopGroup.writeEntry("Name", caption); desktopGroup.writeEntry("Type", "Application"); // get destination folder QString folder; if(!item) { parentItem = 0; folder.clear(); } else if(item->isDirectory()) { parentItem = item; item = 0; folder = parentItem->directory(); } else { parentItem = static_cast<TreeItem*>(item->parent()); folder = parentItem ? parentItem->directory() : QString(); } MenuFolderInfo *parentFolderInfo = parentItem ? parentItem->folderInfo() : m_rootFolder; // Add file to menu // m_menuFile->addEntry(folder, menuId); m_menuFile->pushAction(MenuFile::ADD_ENTRY, folder, menuId); KService::Ptr s(new KService(df)); s->setMenuId(menuId); MenuEntryInfo *entryInfo = new MenuEntryInfo(s, df); // create the TreeItem if(parentItem) parentItem->setOpen(true); // update fileInfo data parentFolderInfo->add(entryInfo); TreeItem *newItem = createTreeItem(parentItem, item, entryInfo, true); setSelected ( newItem, true); itemSelected( newItem); setLayoutDirty(parentItem); }