summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--kdesktop/Makefile.am8
-rw-r--r--kdesktop/init/My_Documents4
-rw-r--r--kdesktop/kxdglauncher.cpp148
-rw-r--r--kdesktop/kxdglauncher.h25
4 files changed, 181 insertions, 4 deletions
diff --git a/kdesktop/Makefile.am b/kdesktop/Makefile.am
index fecd9e9c4..cf31fce0a 100644
--- a/kdesktop/Makefile.am
+++ b/kdesktop/Makefile.am
@@ -8,7 +8,7 @@ SUBDIRS = . lock pics patterns programs init kwebdesktop
####### Files
-bin_PROGRAMS = kcheckrunning
+bin_PROGRAMS = kcheckrunning kxdglauncher
lib_LTLIBRARIES =
kdeinit_LTLIBRARIES = kdesktop.la
noinst_LTLIBRARIES = libkdesktopsettings.la
@@ -31,12 +31,16 @@ include_HEADERS = KDesktopIface.h KScreensaverIface.h KBackgroundIface.h
noinst_HEADERS = desktop.h bgmanager.h krootwm.h \
xautolock.h lockeng.h init.h minicli.h \
pixmapserver.h startupid.h xautolock_c.h \
- kdesktopapp.h
+ kdesktopapp.h kxdglauncher.h
kcheckrunning_SOURCES = kcheckrunning.cpp
kcheckrunning_LDFLAGS = $(all_libraries)
kcheckrunning_LDADD = $(LIB_X11)
+kxdglauncher_SOURCES = kxdglauncher.cpp
+kxdglauncher_LDFLAGS = $(all_libraries)
+kxdglauncher_LDADD = $(LIB_KUTILS)
+
METASOURCES = AUTO
####### Build rules
diff --git a/kdesktop/init/My_Documents b/kdesktop/init/My_Documents
index aba639823..ca461a586 100644
--- a/kdesktop/init/My_Documents
+++ b/kdesktop/init/My_Documents
@@ -2,7 +2,7 @@
Encoding=UTF-8
Comment=
Comment[en_US]=
-Exec=kfmclient openURL `kde-config --userpath document`
+Exec=kxdglauncher --xdgname DOCUMENTS
Icon=folder_wordprocessing
MimeType=
Name=My Documents
@@ -13,4 +13,4 @@ TerminalOptions=
Type=Application
X-DCOP-ServiceType=
X-KDE-SubstituteUID=false
-X-KDE-Username= \ No newline at end of file
+X-KDE-Username=
diff --git a/kdesktop/kxdglauncher.cpp b/kdesktop/kxdglauncher.cpp
new file mode 100644
index 000000000..b22a2a5d7
--- /dev/null
+++ b/kdesktop/kxdglauncher.cpp
@@ -0,0 +1,148 @@
+/* This file is part of the KDE project
+ Copyright (C) 2010 Timothy Pearson <kb9vqf@pearsoncomputing.net>
+
+ 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.
+*/
+
+#include <tqfile.h>
+#include <tqdir.h>
+#include <tqtimer.h>
+#include <tqstring.h>
+#include <tqtextcodec.h>
+
+#include <krun.h>
+#include <klocale.h>
+#include <kapplication.h>
+#include <kcmdlineargs.h>
+#include <kglobalsettings.h>
+#include <kinputdialog.h>
+#include <kmessagebox.h>
+
+#include <stdlib.h>
+
+#include "kxdglauncher.h"
+
+// helper function for reading xdg user dirs: it is required for obvious reasons
+void readXdgUserDirs(TQString *desktop, TQString *documents)
+{
+ TQFile f( TQDir::homeDirPath() + "/.config/user-dirs.dirs" );
+
+ if (!f.open(IO_ReadOnly))
+ return;
+
+ // set the codec for the current locale
+ TQTextStream s(&f);
+ s.setCodec( TQTextCodec::codecForLocale() );
+
+ TQString line = s.readLine();
+ while (!line.isNull())
+ {
+ if (line.startsWith("XDG_DESKTOP_DIR="))
+ *desktop = line.remove("XDG_DESKTOP_DIR=").remove("\"").replace("$HOME", TQDir::homeDirPath());
+ else if (line.startsWith("XDG_DOCUMENTS_DIR="))
+ *documents = line.remove("XDG_DOCUMENTS_DIR=").remove("\"").replace("$HOME", TQDir::homeDirPath());
+
+ line = s.readLine();
+ }
+}
+
+TQString getDocumentPath()
+{
+ TQString s_desktopPath;
+ TQString s_documentPath;
+
+ readXdgUserDirs(&s_desktopPath, &s_documentPath);
+
+ if (s_documentPath.isEmpty() == true) {
+#ifdef Q_WS_WIN
+ s_documentPath = getWin32ShellFoldersPath("Personal");
+#else
+ s_documentPath = TQDir::homeDirPath() + "/Documents/";
+#endif
+ }
+ s_documentPath = TQDir::cleanDirPath( s_documentPath );
+ if ( !s_documentPath.endsWith("/"))
+ s_documentPath.append('/');
+
+ return s_documentPath;
+}
+
+static KCmdLineOptions options[] =
+{
+ { "xdgname <argument>", I18N_NOOP("XDG variable name to open"), 0 },
+ KCmdLineLastOption
+};
+
+int main( int argc, char **argv)
+{
+ KCmdLineArgs::init( argc, argv, "kxdglauncher", I18N_NOOP("KDE XDG File Browser Launcher and Prompter"), I18N_NOOP("Prompts if directory does not exist, otherwise launches"), "1.0" );
+ KCmdLineArgs::addCmdLineOptions( options );
+ KCmdLineArgs *args = KCmdLineArgs::parsedArgs();
+
+ KApplication app;
+ app.disableSessionManagement();
+
+ if (args->isSet( "xdgname" ) == true) {
+ TQString desiredFolder = args->getOption("xdgname");
+ if (desiredFolder == "DOCUMENTS") {
+ TQDir myqdir;
+ if (myqdir.exists(getDocumentPath(), TRUE) == true) {
+ KRun * run = new KRun( KURL(getDocumentPath()), 0, false, false );
+ TQObject::connect( run, TQT_SIGNAL( finished() ), &app, TQT_SLOT( quit() ));
+ TQObject::connect( run, TQT_SIGNAL( error() ), &app, TQT_SLOT( quit() ));
+ app.exec();
+ return 0;
+ }
+ else {
+ TQString newDirectory = KInputDialog::text("Create Documents directory", "Please confirm your Documents directory location<br>Upon confimation a new directory will be created", getDocumentPath());
+ if (newDirectory == TQString::null) {
+ printf("User cancelled directory creation\n\r");
+ return 1;
+ }
+ else {
+ if (newDirectory.length() < 4096) {
+ if (myqdir.mkdir(newDirectory, TRUE) == true) {
+ char systemcommand[8192];
+ sprintf(systemcommand, "xdg-user-dirs-update --set DOCUMENTS \"%s\"", newDirectory.ascii());
+ system(systemcommand);
+ KRun * run = new KRun( getDocumentPath(), 0, false, false );
+ TQObject::connect( run, TQT_SIGNAL( finished() ), &app, TQT_SLOT( quit() ));
+ TQObject::connect( run, TQT_SIGNAL( error() ), &app, TQT_SLOT( quit() ));
+ app.exec();
+ return 0;
+ }
+ else {
+ KMessageBox::error(0, i18n("Unable to create directory ") + TQString("\"") + newDirectory + TQString("\"\n") + i18n("Please check folder permissions and try again"), i18n("Unable to create directory"));
+ return 1;
+ }
+ }
+ else {
+ KMessageBox::error(0, i18n("Unable to create the directory ") + newDirectory + TQString("\n") + i18n("Directory path cannot be longer than 4096 characters"), i18n("Unable to create directory"));
+ return 1;
+ }
+ }
+ }
+ }
+ else {
+ printf("XDG variable not recognized\n\r");
+ return 1;
+ }
+ }
+ else {
+ printf("Please specify the desired XDG variable name with --xdgname\n\r");
+ return 1;
+ }
+} \ No newline at end of file
diff --git a/kdesktop/kxdglauncher.h b/kdesktop/kxdglauncher.h
new file mode 100644
index 000000000..5c6238d6a
--- /dev/null
+++ b/kdesktop/kxdglauncher.h
@@ -0,0 +1,25 @@
+/* This file is part of the KDE project
+ Copyright (c) 2003 Oswald Buddenhagen <ossi@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.
+*/
+
+#ifndef _MAIN_H
+#define _MAIN_H
+
+#include <kapplication.h>
+
+#endif