Added ability to prompt for creation and location of XDG Documents directory

git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdebase@1177716 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
v3.5.13-sru
tpearson 14 years ago
parent bbd03fed65
commit 545e564b0a

@ -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

@ -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=
X-KDE-Username=

@ -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;
}
}

@ -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
Loading…
Cancel
Save