summaryrefslogtreecommitdiffstats
path: root/kdecore/kdesktopfile.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kdecore/kdesktopfile.cpp')
-rw-r--r--kdecore/kdesktopfile.cpp367
1 files changed, 0 insertions, 367 deletions
diff --git a/kdecore/kdesktopfile.cpp b/kdecore/kdesktopfile.cpp
deleted file mode 100644
index 431a65578..000000000
--- a/kdecore/kdesktopfile.cpp
+++ /dev/null
@@ -1,367 +0,0 @@
-/*
- This file is part of the KDE libraries
- Copyright (c) 1999 Pietro Iglio <iglio@kde.org>
- Copyright (c) 1999 Preston Brown <pbrown@kde.org>
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-
-// $Id$
-
-#include <stdlib.h>
-#include <unistd.h>
-
-#include <tqfile.h>
-#include <tqdir.h>
-#include <tqtextstream.h>
-
-#include <kdebug.h>
-#include "kurl.h"
-#include "kconfigbackend.h"
-#include "kapplication.h"
-#include "kstandarddirs.h"
-#include "kmountpoint.h"
-#include "kcatalogue.h"
-#include "klocale.h"
-
-#include "kdesktopfile.h"
-#include "kdesktopfile.moc"
-
-KDesktopFile::KDesktopFile(const TQString &fileName, bool bReadOnly,
- const char * resType)
- : KConfig(TQString::tqfromLatin1(""), bReadOnly, false)
-{
- // KConfigBackEnd will try to locate the filename that is provided
- // based on the resource type specified, _only_ if the filename
- // is not an absolute path.
- backEnd->changeFileName(fileName, resType, false);
- setReadOnly(bReadOnly);
- reparseConfiguration();
- setDesktopGroup();
-}
-
-KDesktopFile::~KDesktopFile()
-{
- // no need to do anything
-}
-
-TQString KDesktopFile::locateLocal(const TQString &path)
-{
- TQString local;
- if (path.endsWith(".directory"))
- {
- local = path;
- if (!TQDir::isRelativePath(local))
- {
- // Relative wrt apps?
- local = KGlobal::dirs()->relativeLocation("apps", path);
- }
-
- if (TQDir::isRelativePath(local))
- {
- local = ::locateLocal("apps", local); // Relative to apps
- }
- else
- {
- // 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", local);
- if (!TQDir::isRelativePath(local))
- {
- // Hm, that didn't work...
- // What now? Use filename only and hope for the best.
- local = path.mid(path.findRev('/')+1);
- }
- local = ::locateLocal("xdgdata-dirs", local);
- }
- }
- else
- {
- if (TQDir::isRelativePath(path))
- {
- local = ::locateLocal("apps", path); // Relative to apps
- }
- else
- {
- // 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-apps", path);
- if (!TQDir::isRelativePath(local))
- {
- // What now? Use filename only and hope for the best.
- local = path.mid(path.findRev('/')+1);
- }
- local = ::locateLocal("xdgdata-apps", local);
- }
- }
- return local;
-}
-
-bool KDesktopFile::isDesktopFile(const TQString& path)
-{
- int len = path.length();
-
- if(len > 8 && path.right(8) == TQString::tqfromLatin1(".desktop"))
- return true;
- else if(len > 7 && path.right(7) == TQString::tqfromLatin1(".kdelnk"))
- return true;
- else
- return false;
-}
-
-bool KDesktopFile::isAuthorizedDesktopFile(const TQString& path)
-{
- if (!kapp || kapp->authorize("run_desktop_files"))
- return true;
-
- if (path.isEmpty())
- return false; // Empty paths are not ok.
-
- if (TQDir::isRelativePath(path))
- return true; // Relative paths are ok.
-
- KStandardDirs *dirs = KGlobal::dirs();
- if (TQDir::isRelativePath( dirs->relativeLocation("apps", path) ))
- return true;
- if (TQDir::isRelativePath( dirs->relativeLocation("xdgdata-apps", path) ))
- return true;
- if (TQDir::isRelativePath( dirs->relativeLocation("services", path) ))
- return true;
- if (dirs->relativeLocation("data", path).startsWith("kdesktop/Desktop"))
- return true;
-
- kdWarning() << "Access to '" << path << "' denied because of 'run_desktop_files' restriction." << endl;
- return false;
-}
-
-TQString KDesktopFile::translatedEntry(const char* key) const
-{
- if (hasTranslatedKey(key))
- return readEntry(key);
-
- if (hasKey(key)) {
- TQString value = readEntryUntranslated(key);
- TQString fName = fileName();
- fName = fName.mid(fName.findRev('/')+1);
- TQString po_lookup_key = TQString::tqfromLatin1(key) + "(" + fName + "): " + value;
- TQString po_value = KGlobal::locale()->translate(po_lookup_key.utf8().data());
-
- if (po_value == po_lookup_key)
- return value;
-
- return po_value;
- }
-
- return TQString::null;
-}
-
-TQString KDesktopFile::readType() const
-{
- return readEntry("Type");
-}
-
-TQString KDesktopFile::readIcon() const
-{
- return readEntry("Icon");
-}
-
-TQString KDesktopFile::readName() const
-{
- return translatedEntry("Name");
-}
-
-TQString KDesktopFile::readComment() const
-{
- return translatedEntry("Comment");
-}
-
-TQString KDesktopFile::readGenericName() const
-{
- return translatedEntry("GenericName");
-}
-
-TQString KDesktopFile::readPath() const
-{
- return readPathEntry("Path");
-}
-
-TQString KDesktopFile::readDevice() const
-{
- return readEntry("Dev");
-}
-
-TQString KDesktopFile::readURL() const
-{
- if (hasDeviceType()) {
- TQString device = readDevice();
- KMountPoint::List mountPoints = KMountPoint::possibleMountPoints();
-
- for(KMountPoint::List::ConstIterator it = mountPoints.begin();
- it != mountPoints.end(); ++it)
- {
- KMountPoint *mp = *it;
- if (mp->mountedFrom() == device)
- {
- KURL u;
- u.setPath( mp->mountPoint() );
- return u.url();
- }
- }
- return TQString::null;
- } else {
- TQString url = readPathEntry("URL");
- if ( !url.isEmpty() && !TQDir::isRelativePath(url) )
- {
- // Handle absolute paths as such (i.e. we need to escape them)
- KURL u;
- u.setPath( url );
- return u.url();
- }
- return url;
- }
-}
-
-TQStringList KDesktopFile::readActions() const
-{
- return readListEntry("Actions", ';');
-}
-
-void KDesktopFile::setActionGroup(const TQString &group)
-{
- setGroup(TQString::tqfromLatin1("Desktop Action ") + group);
-}
-
-bool KDesktopFile::hasActionGroup(const TQString &group) const
-{
- return hasGroup(TQString::tqfromLatin1("Desktop Action ") + group);
-}
-
-bool KDesktopFile::hasLinkType() const
-{
- return readEntry("Type") == TQString::tqfromLatin1("Link");
-}
-
-bool KDesktopFile::hasApplicationType() const
-{
- return readEntry("Type") == TQString::tqfromLatin1("Application");
-}
-
-bool KDesktopFile::hasMimeTypeType() const
-{
- return readEntry("Type") == TQString::tqfromLatin1("MimeType");
-}
-
-bool KDesktopFile::hasDeviceType() const
-{
- return readEntry("Type") == TQString::tqfromLatin1("FSDev") ||
- readEntry("Type") == TQString::tqfromLatin1("FSDevice");
-}
-
-bool KDesktopFile::tryExec() const
-{
- // Test for TryExec and "X-KDE-AuthorizeAction"
- TQString te = readPathEntry("TryExec");
-
- if (!te.isEmpty()) {
- if (!TQDir::isRelativePath(te)) {
- if (::access(TQFile::encodeName(te), X_OK))
- return false;
- } else {
- // !!! Sergey A. Sukiyazov <corwin@micom.don.ru> !!!
- // Environment PATH may contain filenames in 8bit locale cpecified
- // encoding (Like a filenames).
- TQStringList dirs = TQStringList::split(':', TQFile::decodeName(::getenv("PATH")));
- TQStringList::Iterator it(dirs.begin());
- bool match = false;
- for (; it != dirs.end(); ++it) {
- TQString fName = *it + "/" + te;
- if (::access(TQFile::encodeName(fName), X_OK) == 0)
- {
- match = true;
- break;
- }
- }
- // didn't match at all
- if (!match)
- return false;
- }
- }
- TQStringList list = readListEntry("X-KDE-AuthorizeAction");
- if (kapp && !list.isEmpty())
- {
- for(TQStringList::ConstIterator it = list.begin();
- it != list.end();
- ++it)
- {
- if (!kapp->authorize((*it).stripWhiteSpace()))
- return false;
- }
- }
-
- // See also KService::username()
- bool su = readBoolEntry("X-KDE-SubstituteUID");
- if (su)
- {
- TQString user = readEntry("X-KDE-Username");
- if (user.isEmpty())
- user = ::getenv("ADMIN_ACCOUNT");
- if (user.isEmpty())
- user = "root";
- if (!kapp->authorize("user/"+user))
- return false;
- }
-
- return true;
-}
-
-/**
- * @return the filename as passed to the constructor.
- */
-TQString
-KDesktopFile::fileName() const { return backEnd->fileName(); }
-
-/**
- * @return the resource type as passed to the constructor.
- */
-TQString
-KDesktopFile::resource() const { return backEnd->resource(); }
-
-TQStringList
-KDesktopFile::sortOrder() const
-{
- return readListEntry("SortOrder");
-}
-
-void KDesktopFile::virtual_hook( int id, void* data )
-{ KConfig::virtual_hook( id, data ); }
-
-TQString KDesktopFile::readDocPath() const
-{
- // Depreciated, remove in KDE4 or 5?
- // See: http://www.freedesktop.org/Standards/desktop-entry-spec
- if(hasKey( "DocPath" ))
- return readPathEntry( "DocPath" );
-
- return readPathEntry( "X-DocPath" );
-}
-
-KDesktopFile* KDesktopFile::copyTo(const TQString &file) const
-{
- KDesktopFile *config = new KDesktopFile(TQString::null, false);
- KConfig::copyTo(file, config);
- config->setDesktopGroup();
- return config;
-}