diff --git a/menufile.cpp b/menufile.cpp --- a/menufile.cpp +++ b/menufile.cpp @@ -22,11 +22,10 @@ #include #include #include +#include #include "kmenuedit_debug.h" -#include #include -#include const QString MenuFile::MF_MENU = QStringLiteral("Menu"); const QString MenuFile::MF_PUBLIC_ID = QStringLiteral("-//freedesktop//DTD Menu 1.0//EN"); @@ -186,14 +185,26 @@ } } +static QString relativeToDesktopDirsLocation(const QString &file) +{ + const QString canonical = QFileInfo(file).canonicalFilePath(); + const QStringList dirs = QStandardPaths::standardLocations(QStandardPaths::GenericDataLocation); + for (const QString &dir : dirs) { + const QString base = dir + QLatin1String("/desktop-directories"); + if (canonical.startsWith(base)) + return canonical.mid(base.length()+1); + } + return QString(); +} + static QString entryToDirId(const QString &path) { // See also KDesktopFile::locateLocal QString local; if (QFileInfo(path).isAbsolute()) { // XDG Desktop menu items come with absolute paths, we need to // extract their relative path and then build a local path. - local = KGlobal::dirs()->relativeLocation("xdgdata-dirs", path); + local = relativeToDesktopDirsLocation(path); } if (local.isEmpty() || local.startsWith(QLatin1Char('/'))) { diff --git a/menuinfo.cpp b/menuinfo.cpp --- a/menuinfo.cpp +++ b/menuinfo.cpp @@ -22,8 +22,9 @@ #include #include -#include + #include +#include #include "menufile.h" #ifdef WITH_HOTKEYS @@ -306,7 +307,7 @@ dirty = true; - QString local = KStandardDirs::locateLocal("xdgdata-apps", service->menuId()); + QString local = QStandardPaths::writableLocation(QStandardPaths::ApplicationsLocation) + QLatin1Char('/') + service->menuId(); if (local != service->entryPath()) { KDesktopFile *oldDf = desktopFile(); m_desktopFile = oldDf->copyTo(local); diff --git a/treeview.cpp b/treeview.cpp --- a/treeview.cpp +++ b/treeview.cpp @@ -41,20 +41,18 @@ #include #include "kmenuedit_debug.h" #include -#include #include #include #include #include #include #include #include #include -#include -#include #include #include #include +#include #include "menufile.h" #include "menuinfo.h" @@ -285,7 +283,7 @@ connect(this, &QTreeWidget::currentItemChanged, this, &TreeView::itemSelected); - m_menuFile = new MenuFile(KStandardDirs::locateLocal("xdgconf-menu", QStringLiteral("applications-kmenuedit.menu"))); + m_menuFile = new MenuFile(QStandardPaths::writableLocation(QStandardPaths::ConfigLocation) + QLatin1String("/menus/") + QStringLiteral("applications-kmenuedit.menu")); m_rootFolder = new MenuFolderInfo; m_separator = new MenuSeparatorInfo; } @@ -766,14 +764,14 @@ } if (!excludeList->contains(result)) { - if (KStandardDirs::locate("xdgdata-dirs", result).isEmpty()) { + if (QStandardPaths::locate(QStandardPaths::GenericDataLocation, QLatin1String("desktop-directories/") + result).isEmpty()) { break; } } i++; } excludeList->append(result); - result = KStandardDirs::locateLocal("xdgdata-dirs", result); + result = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + QLatin1String("/desktop-directories/") + result; return result; } @@ -1772,19 +1770,24 @@ if (KMessageBox::warningYesNo(this, i18n("Do you want to restore the system menu? Warning: This will remove all custom menus.")) == KMessageBox::No) { return; } - QString kmenueditfile = KStandardDirs::locateLocal("xdgconf-menu", QStringLiteral("applications-kmenuedit.menu")); + const QString kmenueditfile = QStandardPaths::writableLocation(QStandardPaths::ConfigLocation) + QLatin1String("/menus/applications-kmenuedit.menu"); if (QFile::exists(kmenueditfile)) { if (!QFile::remove(kmenueditfile)) { qCWarning(KMENUEDIT_LOG)<<"Could not delete "<KStandardDirs::localxdgdatadir(); - if (!KIO::NetAccess::del(QUrl::fromLocalFile(xdgdir + QStringLiteral("/applications")), this)) { - qCWarning(KMENUEDIT_LOG)<<"Could not delete dir :"<<(xdgdir+ QStringLiteral("/applications")); + const QString xdgappsdir = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + QLatin1String("/applications"); + if (QFileInfo(xdgappsdir).isDir()) { + if (!QDir(xdgappsdir).removeRecursively()) { + qCWarning(KMENUEDIT_LOG)<<"Could not delete dir :" << xdgappsdir; + } } - if (!KIO::NetAccess::del(QUrl::fromLocalFile(xdgdir + QStringLiteral("/desktop-directories")), this)) { - qCWarning(KMENUEDIT_LOG)<<"Could not delete dir :"<<(xdgdir + QStringLiteral("/desktop-directories")); + const QString xdgdesktopdir = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + QLatin1String("/desktop-directories"); + if (QFileInfo(xdgdesktopdir).isDir()) { + if (!QDir(xdgdesktopdir).removeRecursively()) { + qCWarning(KMENUEDIT_LOG)<<"Could not delete dir :" << xdgdesktopdir; + } } KBuildSycocaProgressDialog::rebuildKSycoca(this);