/* 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 <tqfile.h> #include <tqwidgetlist.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 ) ) { TQString className = KMainWindow::classNameOfToplevel( n ); if( className == TQString::tqfromLatin1( "KonqMainWindow" )) (new KonqMainWindow( KURL(), false ) )->restore( n ); else kdWarning() << "Unknown class " << className << " in session saved data!" << endl; n++; } } else { if (args->isSet("profiles")) { TQStringList profiles = KGlobal::dirs()->findAllResources("data", "konqueror/profiles/*", false, true); profiles.sort(); for(TQStringList::ConstIterator it = profiles.begin(); it != profiles.end(); ++it) { TQString file = *it; file = file.mid(file.tqfindRev('/')+1); printf("%s\n", TQFile::encodeName(file).data()); } return 0; } if (args->isSet("profile")) { TQString profile = TQString::fromLocal8Bit(args->getOption("profile")); TQString profilePath = profile; if (profile[0] != '/') profilePath = locate( "data", TQString::tqfromLatin1("konqueror/profiles/")+profile ); TQString url; TQStringList filesToSelect; if (args->count() == 1) url = TQString::fromLocal8Bit(args->arg(0)); KURL kurl(url); KParts::URLArgs urlargs; if (args->isSet("mimetype")) urlargs.serviceType = TQString::fromLocal8Bit(args->getOption("mimetype")); if (args->isSet("select")) { TQString 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. TQString profile = "webbrowsing"; TQString profilePath = locate( "data", TQString::tqfromLatin1("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; TQStringList filesToSelect; if (url.isLocalFile() && TQFile::exists(url.path())) // "konqueror index.html" urlToOpen = url; else urlToOpen = KURL( KonqMisc::konqFilteredURL(0L, TQString::fromLocal8Bit(args->arg(i))) ); // "konqueror slashdot.org" if ( !mainwin ) { KParts::URLArgs urlargs; if (args->isSet("mimetype")) { urlargs.serviceType = TQString::fromLocal8Bit(args->getOption("mimetype")); kdDebug(1202) << "main() : setting serviceType to " << urlargs.serviceType << endl; } if (args->isSet("select")) { TQString 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; }