summaryrefslogtreecommitdiffstats
path: root/konqueror/konq_main.cc
diff options
context:
space:
mode:
Diffstat (limited to 'konqueror/konq_main.cc')
-rw-r--r--konqueror/konq_main.cc222
1 files changed, 222 insertions, 0 deletions
diff --git a/konqueror/konq_main.cc b/konqueror/konq_main.cc
new file mode 100644
index 000000000..e64016ed9
--- /dev/null
+++ b/konqueror/konq_main.cc
@@ -0,0 +1,222 @@
+/* This file is part of the KDE project
+ Copyright (C) 1998, 1999 Simon Hausmann <hausmann@kde.org>
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This program 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
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; see the file COPYING. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include "konq_main.h"
+#include "konq_misc.h"
+#include "konq_factory.h"
+#include "konq_mainwindow.h"
+#include "konq_view.h"
+#include "konq_settingsxt.h"
+#include "KonquerorIface.h"
+
+#include <ktempfile.h>
+#include <klocale.h>
+#include <kstandarddirs.h>
+#include <kdebug.h>
+#include <kcmdlineargs.h>
+#include <dcopclient.h>
+#include <kimageio.h>
+#include <qfile.h>
+
+#include <qwidgetlist.h>
+
+static const KCmdLineOptions options[] =
+{
+ { "silent", I18N_NOOP("Start without a default window"), 0 },
+ { "preload", I18N_NOOP("Preload for later use"), 0 },
+ { "profile <profile>", I18N_NOOP("Profile to open"), 0 },
+ { "profiles", I18N_NOOP("List available profiles"), 0 },
+ { "mimetype <mimetype>", I18N_NOOP("Mimetype to use for this URL (e.g. text/html or inode/directory)"), 0 },
+ { "select", I18N_NOOP("For URLs that point to files, opens the directory and selects the file, instead of opening the actual file"), 0 },
+ { "+[URL]", I18N_NOOP("Location to open"), 0 },
+ KCmdLineLastOption
+};
+
+extern "C" KDE_EXPORT int kdemain( int argc, char **argv )
+{
+ KCmdLineArgs::init( argc, argv, KonqFactory::aboutData() );
+
+ KCmdLineArgs::addCmdLineOptions( options ); // Add our own options.
+ KCmdLineArgs::addTempFileOption();
+
+ KonquerorApplication app;
+
+ app.dcopClient()->registerAs( "konqueror" );
+
+ KonquerorIface *kiface = new KonquerorIface;
+ app.dcopClient()->setDefaultObject( kiface->objId() );
+
+ KGlobal::locale()->insertCatalogue("libkonq"); // needed for apps using libkonq
+ KImageIO::registerFormats();
+
+ KCmdLineArgs *args = KCmdLineArgs::parsedArgs();
+
+ KTempFile crashlog_file(locateLocal("tmp", "konqueror-crash-"), ".log");
+ KonqMainWindow::s_crashlog_file = crashlog_file.file();
+
+ if ( kapp->isRestored() )
+ {
+ int n = 1;
+ while ( KonqMainWindow::canBeRestored( n ) )
+ {
+ QString className = KMainWindow::classNameOfToplevel( n );
+ if( className == QString::fromLatin1( "KonqMainWindow" ))
+ (new KonqMainWindow( KURL(), false ) )->restore( n );
+ else
+ kdWarning() << "Unknown class " << className << " in session saved data!" << endl;
+ n++;
+ }
+ }
+ else
+ {
+ if (args->isSet("profiles"))
+ {
+ QStringList profiles = KGlobal::dirs()->findAllResources("data", "konqueror/profiles/*", false, true);
+ profiles.sort();
+ for(QStringList::ConstIterator it = profiles.begin();
+ it != profiles.end(); ++it)
+ {
+ QString file = *it;
+ file = file.mid(file.findRev('/')+1);
+ printf("%s\n", QFile::encodeName(file).data());
+ }
+
+ return 0;
+ }
+ if (args->isSet("profile"))
+ {
+ QString profile = QString::fromLocal8Bit(args->getOption("profile"));
+ QString profilePath = profile;
+ if (profile[0] != '/')
+ profilePath = locate( "data", QString::fromLatin1("konqueror/profiles/")+profile );
+ QString url;
+ QStringList filesToSelect;
+ if (args->count() == 1)
+ url = QString::fromLocal8Bit(args->arg(0));
+ KURL kurl(url);
+ KParts::URLArgs urlargs;
+ if (args->isSet("mimetype"))
+ urlargs.serviceType = QString::fromLocal8Bit(args->getOption("mimetype"));
+ if (args->isSet("select")) {
+ QString fn = kurl.fileName(false);
+ if( !fn.isEmpty() ){
+ filesToSelect += fn;
+ kurl.setFileName("");
+ }
+ }
+ kdDebug(1202) << "main() -> createBrowserWindowFromProfile servicetype=" << urlargs.serviceType << endl;
+ KonqMisc::createBrowserWindowFromProfile( profilePath, profile, kurl, urlargs, false, filesToSelect );
+ }
+ else
+ {
+ if (args->count() == 0)
+ {
+ if (args->isSet("preload"))
+ {
+ if( KonqSettings::maxPreloadCount() > 0 )
+ {
+ DCOPRef ref( "kded", "konqy_preloader" );
+ if( !ref.callExt( "registerPreloadedKonqy", DCOPRef::NoEventLoop, 5000,
+ app.dcopClient()->appId(), qt_xscreen()))
+ return 0; // too many preloaded or failed
+ KonqMainWindow* win = new KonqMainWindow( KURL(), false ); // prepare an empty window too
+ // KonqMainWindow ctor sets always the preloaded flag to false, so create the window before this
+ KonqMainWindow::setPreloadedFlag( true );
+ KonqMainWindow::setPreloadedWindow( win );
+ kdDebug(1202) << "Konqy preloaded :" << app.dcopClient()->appId() << endl;
+ }
+ else
+ {
+ return 0; // no preloading
+ }
+ }
+ else if (!args->isSet("silent"))
+ {
+ // By default try to open in webbrowser mode. People can use "konqueror ." to get a filemanager.
+ QString profile = "webbrowsing";
+ QString profilePath = locate( "data", QString::fromLatin1("konqueror/profiles/")+profile );
+ if ( !profilePath.isEmpty() ) {
+ KonqMisc::createBrowserWindowFromProfile( profilePath, profile );
+ } else {
+ KonqMainWindow *mainWindow = new KonqMainWindow;
+ mainWindow->show();
+ }
+ }
+ kdDebug(1202) << "main() -> no args" << endl;
+ }
+ else
+ {
+ KURL::List urlList;
+ KonqMainWindow * mainwin = 0L;
+ for ( int i = 0; i < args->count(); i++ )
+ {
+ // KonqMisc::konqFilteredURL doesn't cope with local files... A bit of hackery below
+ KURL url = args->url(i);
+ KURL urlToOpen;
+ QStringList filesToSelect;
+
+ if (url.isLocalFile() && QFile::exists(url.path())) // "konqueror index.html"
+ urlToOpen = url;
+ else
+ urlToOpen = KURL( KonqMisc::konqFilteredURL(0L, QString::fromLocal8Bit(args->arg(i))) ); // "konqueror slashdot.org"
+
+ if ( !mainwin ) {
+ KParts::URLArgs urlargs;
+ if (args->isSet("mimetype"))
+ {
+ urlargs.serviceType = QString::fromLocal8Bit(args->getOption("mimetype"));
+ kdDebug(1202) << "main() : setting serviceType to " << urlargs.serviceType << endl;
+ }
+ if (args->isSet("select"))
+ {
+ QString fn = urlToOpen.fileName(false);
+ if( !fn.isEmpty() ){
+ filesToSelect += fn;
+ urlToOpen.setFileName("");
+ }
+ }
+ const bool tempFile = KCmdLineArgs::isTempFileSet();
+ mainwin = KonqMisc::createNewWindow( urlToOpen, urlargs, false, filesToSelect, tempFile );
+ } else
+ urlList += urlToOpen;
+ }
+ if ( mainwin )
+ mainwin->openMultiURL( urlList );
+ }
+ }
+ }
+ args->clear();
+
+ app.exec();
+
+ // Delete all KonqMainWindows, so that we don't have
+ // any parts loaded when KLibLoader::cleanUp is called.
+ // Their deletion was postponed in their event()
+ // (and Qt doesn't delete WDestructiveClose widgets on exit anyway :( )
+ while( KonqMainWindow::mainWindowList() != NULL )
+ { // the list will be deleted by last KonqMainWindow
+ delete KonqMainWindow::mainWindowList()->first();
+ }
+
+ delete kiface;
+
+ crashlog_file.unlink();
+
+ return 0;
+}