~ubuntu-branches/ubuntu/precise/krusader/precise

« back to all changes in this revision

Viewing changes to krusader/main.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Scott Kitterman
  • Date: 2010-05-05 22:26:37 UTC
  • mfrom: (3.1.4 squeeze)
  • Revision ID: james.westby@ubuntu.com-20100505222637-ydv3cwjwy365on2r
Tags: 1:2.1.0~beta1-1ubuntu1
* Merge from Debian Unstable.  Remaining changes:
  - Retain Kubuntu doc path

Show diffs side-by-side

added added

removed removed

Lines of Context:
5
5
    e-mail               : krusader@users.sourceforge.net
6
6
    web site             : http://krusader.sourceforge.net
7
7
 ---------------------------------------------------------------------------
8
 
  Description 
 
8
  Description
9
9
 ***************************************************************************
10
10
 
11
11
  A
28
28
 *                                                                         *
29
29
 ***************************************************************************/
30
30
 
31
 
// KDE includes
32
 
#include <kcmdlineargs.h>
33
 
#include <kaboutdata.h>
34
 
#include <kactionmenu.h>
35
 
#include <klocale.h>
36
 
#include <kstandarddirs.h>
37
 
#include <ksplashscreen.h>
 
31
#include <stdlib.h>
38
32
#include <unistd.h>
39
33
#include <signal.h>
40
 
#include <qeventloop.h>
 
34
 
 
35
#include <QtCore/QEventLoop>
 
36
#include <QtCore/QAbstractEventDispatcher>
 
37
#include <QtGui/QPixmap>
41
38
#include <QtDBus/QtDBus>
42
 
#include <QPixmap>
43
 
#include <QAbstractEventDispatcher>
44
 
 
45
 
// Krusader includes
 
39
 
 
40
#include <kde_file.h>
 
41
#include <KCmdLineArgs>
 
42
#include <KAboutData>
 
43
#include <KActionMenu>
 
44
#include <KLocale>
 
45
#include <KStandardDirs>
 
46
#include <KSplashScreen>
 
47
#include <KStartupInfo>
 
48
 
46
49
#include "krusader.h"
47
50
#include "krusaderversion.h"
48
51
#include "krslots.h"
49
52
#include "krusaderapp.h"
50
53
#include "defaults.h"
51
 
#include <kstartupinfo.h>
52
 
#include <Panel/krviewfactory.h>
53
 
#include <stdlib.h>
 
54
#include "Panel/krviewfactory.h"
54
55
 
55
56
static const char *description = "Krusader\nTwin-Panel File Manager for KDE";
56
57
 
57
58
static void sigterm_handler(int i)
58
59
{
59
 
  fprintf(stderr,"Signal: %d\n",i);
 
60
    fprintf(stderr, "Signal: %d\n", i);
60
61
 
61
 
  QAbstractEventDispatcher *instance = QAbstractEventDispatcher::instance();
62
 
  if (instance)
63
 
                instance->wakeUp();
64
 
  KApplication::exit( - 15 );
 
62
    QAbstractEventDispatcher *instance = QAbstractEventDispatcher::instance();
 
63
    if (instance)
 
64
        instance->wakeUp();
 
65
    KApplication::exit(- 15);
65
66
}
66
67
 
67
 
int main(int argc, char *argv[]) {
 
68
int main(int argc, char *argv[])
 
69
{
68
70
// ============ begin icon-stuff ===========
69
71
// If the user has no icon specified over the commandline we set up uor own.
70
 
// this is acording to the users privileges. The icons are in Krusader::privIcon()
71
 
  KrViewFactory::init();
72
 
 
73
 
 
74
 
  bool hasIcon = false;
75
 
  int i = 0;
76
 
  char * myArgv[argc+2];
77
 
 
78
 
 // if no --miniicon is given, --icon is used. So we don't need to check for --miniicon separately
79
 
  for ( i = 0; i < argc; ++i ) {
80
 
    if ( strstr(argv[ i ], "-icon") != 0 ) // important: just one dash because both can appear!
81
 
     hasIcon = true;
82
 
  }
83
 
 
84
 
  static const char* const icon_text="--icon";
85
 
  const char* icon_name=Krusader::privIcon();
86
 
  char addedParams[strlen(icon_text)+strlen(icon_name)+2];
87
 
 
88
 
  if ( ! hasIcon ) {
89
 
    for ( i = 0; i < argc; ++i )
90
 
      myArgv[ i ] = argv[ i ];
91
 
 
92
 
    strcpy(addedParams,icon_text);
93
 
    strcpy(addedParams+strlen(icon_text)+1,icon_name);
94
 
 
95
 
    myArgv[ argc ] = addedParams;
96
 
    myArgv[ ++argc ] = addedParams+strlen(icon_text)+1;
97
 
    myArgv[ ++argc ] = 0;
98
 
 
99
 
    argv = myArgv;
100
 
  }
 
72
// this is according to the users privileges. The icons are in Krusader::privIcon()
 
73
    KrViewFactory::init();
 
74
 
 
75
 
 
76
    bool hasIcon = false;
 
77
    int i = 0;
 
78
    char * myArgv[argc+2];
 
79
 
 
80
// if no --miniicon is given, --icon is used. So we don't need to check for --miniicon separately
 
81
    for (i = 0; i < argc; ++i) {
 
82
        if (strstr(argv[ i ], "-icon") != 0)   // important: just one dash because both can appear!
 
83
            hasIcon = true;
 
84
    }
 
85
 
 
86
    static const char* const icon_text = "--icon";
 
87
    const char* icon_name = Krusader::privIcon();
 
88
    char addedParams[strlen(icon_text)+strlen(icon_name)+2];
 
89
 
 
90
    if (! hasIcon) {
 
91
        for (i = 0; i < argc; ++i)
 
92
            myArgv[ i ] = argv[ i ];
 
93
 
 
94
        strcpy(addedParams, icon_text);
 
95
        strcpy(addedParams + strlen(icon_text) + 1, icon_name);
 
96
 
 
97
        myArgv[ argc ] = addedParams;
 
98
        myArgv[ ++argc ] = addedParams + strlen(icon_text) + 1;
 
99
        myArgv[ ++argc ] = 0;
 
100
 
 
101
        argv = myArgv;
 
102
    }
101
103
// ============ end icon-stuff ===========
102
104
 
103
 
  // ABOUT data information
 
105
    // ABOUT data information
104
106
#ifdef RELEASE_NAME
105
 
  QString versionName = QString("%1 \"%2\"").arg(VERSION).arg(RELEASE_NAME);
 
107
    QString versionName = QString("%1 \"%2\"").arg(VERSION).arg(RELEASE_NAME);
106
108
#else
107
 
  QString versionName = VERSION;
 
109
    QString versionName = VERSION;
108
110
#endif
109
111
 
110
 
KAboutData aboutData( "krusader", 0, ( geteuid() ? ki18n("Krusader") : ki18n("Krusader - ROOT PRIVILEGES")),
111
 
    versionName.toLocal8Bit(), ki18n(description), KAboutData::License_GPL_V2,
112
 
    ki18n("(c) 2000-2003, Shie Erlich, Rafi Yanai\n(c) 2004-2009, Krusader Krew"), 
113
 
    ki18n("Feedback:\nhttp://www.krusader.org/phpBB/\n\nIRC\nserver: irc.freenode.net, channel: #krusader"),
114
 
    "http://www.krusader.org");
115
 
 
116
 
  aboutData.addAuthor(ki18n("Rafi Yanai"),ki18n("Author"), "yanai@users.sourceforge.net");
117
 
  aboutData.addAuthor(ki18n("Shie Erlich"),ki18n("Author"), "erlich@users.sourceforge.net");
118
 
  aboutData.addAuthor(ki18n("Karai Csaba"), ki18n("Developer"), "ckarai@users.sourceforge.net", 0);
119
 
  aboutData.addAuthor(ki18n("Heiner Eichmann"), ki18n("Developer"), "h.eichmann@gmx.de", 0);  
120
 
  aboutData.addAuthor(ki18n("Jonas Bähr"), ki18n("Developer"), "jonas.baehr@web.de", 0);
121
 
  aboutData.addAuthor(ki18n("Václav Jůza"), ki18n("Developer"), "vaclavjuza@gmail.com", 0);
122
 
  aboutData.addAuthor(ki18n("Dirk Eschler"), ki18n("Webmaster and i18n coordinator"), "deschler@users.sourceforge.net", 0);
123
 
  aboutData.addAuthor(ki18n("Frank Schoolmeesters"), ki18n("Documentation and marketing coordinator"), "frank_schoolmeesters@yahoo.com", 0);
124
 
  aboutData.addAuthor(ki18n("Richard Holt"), ki18n("Documentation & Proofing"), "richard.holt@gmail.com", 0);
125
 
  aboutData.addAuthor(ki18n("Matej Urbancic"), ki18n("Marketing & Product Research"), "matej.urban@gmail.com", 0);
126
 
  aboutData.addCredit(ki18n("Václav Jůza"), ki18n("QA, bug-hunting, patches and general help"), "vaclavjuza@gmail.com", 0);
127
 
  aboutData.addCredit(ki18n("Jiří Paleček"), ki18n("QA, bug-hunting, patches and general help"), "jpalecek@web.de", 0);
128
 
  aboutData.addCredit(ki18n("Jiří Klement"),ki18n("Important help in KDE 4 porting"),0,0);
129
 
  aboutData.addCredit(ki18n("Andrew Neupokoev"), ki18n("Killer Logo and Icons for Krusader (contest winner)"), "doom-blue@yandex.ru", 0);
130
 
  aboutData.addCredit(ki18n("The UsefulArts Organization"), ki18n("Icon for krusader"), "mail@usefularts.rg", 0);
131
 
  aboutData.addCredit(ki18n("Gábor Lehel"), ki18n("Viewer module for 3rd Hand"), "illissius@gmail.com", 0);
132
 
  aboutData.addCredit(ki18n("Mark Eatough"), ki18n("Handbook Proof-Reader"), "markeatough@yahoo.com", 0);
133
 
  aboutData.addCredit(ki18n("Jan Halasa"), ki18n("The old Bookmark Module"), "xhalasa@fi.muni.cz", 0);
134
 
  aboutData.addCredit(ki18n("Hans Löffler"), ki18n("Dir history button"), 0, 0);
135
 
  aboutData.addCredit(ki18n("Szombathelyi György"), ki18n("ISO KIO slave"), 0, 0);
136
 
  aboutData.addCredit(ki18n("Jan Willem van de Meent (Adios)"), ki18n("Icons for Krusader"), "janwillem@lorentz.leidenuniv.nl", 0);
137
 
  aboutData.addCredit(ki18n("Mikolaj Machowski"), ki18n("Usability and QA"), "<mikmach@wp.pl>", 0);
138
 
  aboutData.addCredit(ki18n("Cristi Dumitrescu"),ki18n("QA, bug-hunting, patches and general help"),"cristid@chip.ro",0);
139
 
  aboutData.addCredit(ki18n("Aurelien Gateau"),ki18n("patch for KViewer"),"aurelien.gateau@free.fr",0);
140
 
  aboutData.addCredit(ki18n("Milan Brabec"),ki18n("the first patch ever !"),"mbrabec@volny.cz",0);
141
 
  aboutData.addCredit(ki18n("Asim Husanovic"),ki18n("Bosnian translation"),"asim@megatel.ba",0);
142
 
  aboutData.addCredit(ki18n("Doutor Zero"),ki18n("Brazilian Portuguese translation"),"doutor.zero@gmail.com",0);
143
 
  aboutData.addCredit(ki18n("Milen Ivanov"),ki18n("Bulgarian translation"),"milen.ivanov@abv.bg",0);
144
 
  aboutData.addCredit(ki18n("Quim Perez"),ki18n("Catalan translation"),"noguer@osona.com",0);
145
 
  aboutData.addCredit(ki18n("Jinghua Luo"),ki18n("Chinese Simplified translation"),"luojinghua@msn.com",0);
146
 
  aboutData.addCredit(ki18n("Mitek"),ki18n("Old Czech translation"),"mitek@email.cz",0);
147
 
  aboutData.addCredit(ki18n("Martin Sixta"),ki18n("Old Czech translation"),"lukumo84@seznam.cz",0);
148
 
  aboutData.addCredit(ki18n("Vaclav Jůza"),ki18n("Czech translation"),"VaclavJuza@gmail.com",0);
149
 
  aboutData.addCredit(ki18n("Anders Bruun Olsen"), ki18n("Old Danish translation"), "anders@bruun-olsen.net", 0);
150
 
  aboutData.addCredit(ki18n("Peter H. Sorensen"), ki18n("Danish translation"), "peters@skydebanen.net", 0);
151
 
  aboutData.addCredit(ki18n("Frank Schoolmeesters"),ki18n("Dutch translation"),"frank_schoolmeesters@yahoo.com",0);
152
 
  aboutData.addCredit(ki18n("Rene-Pierre Lehmann"),ki18n("Old French translation"),"ripi@lepi.org",0);
153
 
  aboutData.addCredit(ki18n("David Guillerm"),ki18n("French translation"),"dguillerm@gmail.com",0);
154
 
  aboutData.addCredit(ki18n("Christoph Thielecke"),ki18n("Old German translation"),"crissi99@gmx.de",0);
155
 
  aboutData.addCredit(ki18n("Dirk Eschler"), ki18n("German translation"), "deschler@users.sourceforge.net", 0);
156
 
  aboutData.addCredit(ki18n("Spiros Georgaras"), ki18n("Greek translation"), "sngeorgaras@gmail.com", 0);
157
 
  aboutData.addCredit(ki18n("Kukk Zoltan"),ki18n("Old Hungarian translation"),"kukkzoli@freemail.hu",0);
158
 
  aboutData.addCredit(ki18n("Arpad Biro"),ki18n("Hungarian translation"),"biro_arpad@yahoo.com",0);
159
 
  aboutData.addCredit(ki18n("Giuseppe Bordoni"), ki18n("Italian translation"), "geppo@geppozone.com", 0);
160
 
  aboutData.addCredit(ki18n("Hideki Kimura"), ki18n("Japanese translation"), "hangyo1973@gmail.com", 0);
161
 
  aboutData.addCredit(ki18n("UTUMI Hirosi"), ki18n("Old Japanese translation"), "utuhiro@mx12.freecom.ne.jp", 0);
162
 
  aboutData.addCredit(ki18n("Dovydas Sankauskas"), ki18n("Lithuanian translation"), "laisve@gmail.com", 0);
163
 
  aboutData.addCredit(ki18n("Bruno Queiros"), ki18n("Portuguese translation"), "brunoqueiros@portugalmail.com", 0);
164
 
  aboutData.addCredit(ki18n("Lukasz Janyst"),ki18n("Old Polish translation"),"ljan@wp.pl",0);
165
 
  aboutData.addCredit(ki18n("Pawel Salawa"),ki18n("Polish translation"),"boogie@myslenice.one.pl",0);
166
 
  aboutData.addCredit(ki18n("Tomek Grzejszczyk"),ki18n("Polish translation"),"tgrzej@onet.eu",0);
167
 
  aboutData.addCredit(ki18n("Dmitry A. Bugay"),ki18n("Russian translation"),"sam@vhnet.ru",0);
168
 
  aboutData.addCredit(ki18n("Dmitry Chernyak"),ki18n("Old Russian translation"),"chernyak@mail.ru",0);
169
 
  aboutData.addCredit(ki18n("Sasa Tomic"),ki18n("Serbian translation"),"stomic@gmx.net",0);
170
 
  aboutData.addCredit(ki18n("Zdenko Podobný and Ondrej Pačay (Yogi)"),ki18n("Slovak translation"),"zdenop@gmail.com",0);
171
 
  aboutData.addCredit(ki18n("Matej Urbancic"),ki18n("Slovenian translation"),"matej.urban@gmail.com",0);
172
 
  aboutData.addCredit(ki18n("Rafael Munoz"),ki18n("Old Spanish translation"),"muror@hotpop.com",0);
173
 
  aboutData.addCredit(ki18n("Alejandro Araiza Alvarado"),ki18n("Spanish translation"),"mebrelith@gmail.com",0);
174
 
  aboutData.addCredit(ki18n("Erik Johanssen"),ki18n("Old Swedish translation"),"erre@telia.com",0);
175
 
  aboutData.addCredit(ki18n("Anders Linden"),ki18n("Old Swedish translation"),"connyosis@gmx.net",0);
176
 
  aboutData.addCredit(ki18n("Peter Landgren"),ki18n("Swedish translation"),"peter.talken@telia.com",0);
177
 
  aboutData.addCredit(ki18n("Bekir Sonat"),ki18n("Turkish translation"),"bekirsonat@kde.org.tr",0);
178
 
  aboutData.addCredit(ki18n("Ivan Petrouchtchak"),ki18n("Ukrainian translation"),"connyosis@gmx.net",0);
179
 
  aboutData.addCredit(ki18n("Seongnam Jee"),ki18n("Korean translation"),"snjee@intellicam.com",0);
180
 
 
181
 
  // Command line arguments ...
182
 
  KCmdLineArgs::init( argc, argv, &aboutData );
183
 
 
184
 
  KCmdLineOptions options;
185
 
  options.add( "left <path>", ki18n("Start left panel at <path>") );
186
 
  options.add( "right <path>", ki18n("Start right panel at <path>") );
187
 
  options.add( "profile <panel-profile>", ki18n("Load this profile on startup") );
188
 
 
189
 
  KCmdLineArgs::addCmdLineOptions( options ); // Add our own options.
190
 
 
191
 
  // check for command line arguments
192
 
 
193
 
  // create the application
194
 
  KrusaderApp app;
195
 
 
196
 
  KConfigGroup cfg( KGlobal::config().data(), "Look&Feel");
197
 
  bool singleInstanceMode = cfg.readEntry( "Single Instance Mode", _SingleInstanceMode );
198
 
 
199
 
  QString appName = "krusader";
200
 
  if( !singleInstanceMode )
201
 
    appName += QString( "%1" ).arg( getpid() );
202
 
 
203
 
  if (!QDBusConnection::sessionBus().isConnected()) {
204
 
            fprintf(stderr, "Cannot connect to the D-BUS session bus.\n"
205
 
                            "To start it, run:\n"
206
 
                            "\teval `dbus-launch --auto-syntax`\n");
207
 
  }
208
 
 
209
 
  QDBusInterface remoteApp( "org.krusader", "/Instances/" + appName,
210
 
                            "org.krusader.Instance", QDBusConnection::sessionBus() );
211
 
  QDBusReply<bool> reply;
212
 
  if( remoteApp.isValid() )
213
 
    reply = remoteApp.call("isRunning");
214
 
 
215
 
  if( !reply.isValid() && reply.error().type() != QDBusError::ServiceUnknown && 
216
 
                          reply.error().type() != QDBusError::UnknownObject )
217
 
    fprintf( stderr, "DBus Error: %s, %s\n", reply.error().name().toLocal8Bit().constData(), reply.error().message().toLocal8Bit().constData() );
218
 
 
219
 
  if( reply.isValid() && (bool)reply ) {
220
 
    fprintf( stderr, i18n( "Application already running!\n" ).toLocal8Bit() );
221
 
    KStartupInfo::appStarted();
222
 
    return 1;
223
 
  }
224
 
 
225
 
  // splash screen - if the user wants one
226
 
  KSplashScreen *splash = 0;
227
 
  { // don't remove bracket
228
 
  KConfigGroup cfg( KGlobal::config().data(), "Look&Feel");
229
 
  if (cfg.readEntry( "Show splashscreen", _ShowSplashScreen )) {
230
 
        QString splashFilename = KStandardDirs::locate( "data", "krusader/splash.png" );
231
 
        QPixmap pixmap( splashFilename );
232
 
        if (!pixmap.isNull()) {
233
 
                splash = new KSplashScreen( pixmap );
234
 
                splash->show();
235
 
        }
236
 
  }
237
 
  } // don't remove bracket
238
 
 
239
 
  Krusader::AppName = appName;
240
 
  Krusader krusader;
241
 
  
242
 
  QDBusConnection dbus = QDBusConnection::sessionBus();
243
 
  if( !dbus.interface()->isServiceRegistered( "org.krusader" ) && !dbus.registerService( "org.krusader" ) )
244
 
  {
245
 
    fprintf( stderr, "DBus Error: %s, %s\n", dbus.lastError().name().toLocal8Bit().constData(), dbus.lastError().message().toLocal8Bit().constData() );
246
 
  }
247
 
  if( !dbus.registerObject( "/Instances/" + appName, &krusader, QDBusConnection::ExportScriptableSlots ) )
248
 
  {
249
 
    fprintf( stderr, "DBus Error: %s, %s\n", dbus.lastError().name().toLocal8Bit().constData(), dbus.lastError().message().toLocal8Bit().constData() );
250
 
  }
251
 
 
252
 
  // catching SIGTERM, SIGHUP, SIGQUIT
253
 
  signal(SIGTERM,sigterm_handler);
254
 
  signal(SIGPIPE,sigterm_handler);
255
 
  signal(SIGHUP,sigterm_handler);
256
 
 
257
 
  // make sure we receive X's focus in/out events
258
 
  QObject::connect(&app, SIGNAL(windowActive()), krusader.slot, SLOT(windowActive()));
259
 
  QObject::connect(&app, SIGNAL(windowInactive()), krusader.slot, SLOT(windowInactive()));
260
 
 
261
 
  // hide splashscreen
262
 
  if (splash) {
263
 
    splash->finish( &krusader );
264
 
    delete splash;
265
 
  }
266
 
 
267
 
  // let's go.
268
 
  return app.exec();
 
112
    KAboutData aboutData("krusader", 0, (geteuid() ? ki18n("Krusader") : ki18n("Krusader - ROOT PRIVILEGES")),
 
113
                         versionName.toLocal8Bit(), ki18n(description), KAboutData::License_GPL_V2,
 
114
                         ki18n("(c) 2000-2003, Shie Erlich, Rafi Yanai\n(c) 2004-2009, Krusader Krew"),
 
115
                         ki18n("Feedback:\nhttp://www.krusader.org/phpBB/\n\nIRC\nserver: irc.freenode.net, channel: #krusader"),
 
116
                         "http://www.krusader.org");
 
117
 
 
118
    aboutData.addAuthor(ki18n("Rafi Yanai"), ki18n("Author"), "yanai@users.sourceforge.net");
 
119
    aboutData.addAuthor(ki18n("Shie Erlich"), ki18n("Author"), "erlich@users.sourceforge.net");
 
120
    aboutData.addAuthor(ki18n("Karai Csaba"), ki18n("Developer"), "ckarai@users.sourceforge.net", 0);
 
121
    aboutData.addAuthor(ki18n("Heiner Eichmann"), ki18n("Developer"), "h.eichmann@gmx.de", 0);
 
122
    aboutData.addAuthor(ki18n("Jonas Bähr"), ki18n("Developer"), "jonas.baehr@web.de", 0);
 
123
    aboutData.addAuthor(ki18n("Václav Jůza"), ki18n("Developer"), "vaclavjuza@gmail.com", 0);
 
124
    aboutData.addAuthor(ki18n("Dirk Eschler"), ki18n("Webmaster and i18n coordinator"), "deschler@users.sourceforge.net", 0);
 
125
    aboutData.addAuthor(ki18n("Frank Schoolmeesters"), ki18n("Documentation and marketing coordinator"), "frank_schoolmeesters@yahoo.com", 0);
 
126
    aboutData.addAuthor(ki18n("Richard Holt"), ki18n("Documentation & Proofing"), "richard.holt@gmail.com", 0);
 
127
    aboutData.addAuthor(ki18n("Matej Urbancic"), ki18n("Marketing & Product Research"), "matej.urban@gmail.com", 0);
 
128
    aboutData.addCredit(ki18n("kde.org"), ki18n("Everyone involved in KDE"), 0, 0);
 
129
    aboutData.addCredit(ki18n("l10n.kde.org"), ki18n("KDE Translation Teams"), 0, 0);
 
130
    aboutData.addCredit(ki18n("Jiří Paleček"), ki18n("QA, bug-hunting, patches and general help"), "jpalecek@web.de", 0);
 
131
    aboutData.addCredit(ki18n("Jiří Klement"), ki18n("Important help in KDE 4 porting"), 0, 0);
 
132
    aboutData.addCredit(ki18n("Andrew Neupokoev"), ki18n("Killer Logo and Icons for Krusader (contest winner)"), "doom-blue@yandex.ru", 0);
 
133
    aboutData.addCredit(ki18n("The UsefulArts Organization"), ki18n("Icon for krusader"), "mail@usefularts.rg", 0);
 
134
    aboutData.addCredit(ki18n("Gábor Lehel"), ki18n("Viewer module for 3rd Hand"), "illissius@gmail.com", 0);
 
135
    aboutData.addCredit(ki18n("Mark Eatough"), ki18n("Handbook Proof-Reader"), "markeatough@yahoo.com", 0);
 
136
    aboutData.addCredit(ki18n("Jan Halasa"), ki18n("The old Bookmark Module"), "xhalasa@fi.muni.cz", 0);
 
137
    aboutData.addCredit(ki18n("Hans Löffler"), ki18n("Dir history button"), 0, 0);
 
138
    aboutData.addCredit(ki18n("Szombathelyi György"), ki18n("ISO KIO slave"), 0, 0);
 
139
    aboutData.addCredit(ki18n("Jan Willem van de Meent (Adios)"), ki18n("Icons for Krusader"), "janwillem@lorentz.leidenuniv.nl", 0);
 
140
    aboutData.addCredit(ki18n("Mikolaj Machowski"), ki18n("Usability and QA"), "<mikmach@wp.pl>", 0);
 
141
    aboutData.addCredit(ki18n("Cristi Dumitrescu"), ki18n("QA, bug-hunting, patches and general help"), "cristid@chip.ro", 0);
 
142
    aboutData.addCredit(ki18n("Aurelien Gateau"), ki18n("patch for KViewer"), "aurelien.gateau@free.fr", 0);
 
143
    aboutData.addCredit(ki18n("Milan Brabec"), ki18n("the first patch ever !"), "mbrabec@volny.cz", 0);
 
144
    aboutData.addCredit(ki18n("Asim Husanovic"), ki18n("Bosnian translation"), "asim@megatel.ba", 0);
 
145
    aboutData.addCredit(ki18n("Doutor Zero"), ki18n("Brazilian Portuguese translation"), "doutor.zero@gmail.com", 0);
 
146
    aboutData.addCredit(ki18n("Milen Ivanov"), ki18n("Bulgarian translation"), "milen.ivanov@abv.bg", 0);
 
147
    aboutData.addCredit(ki18n("Quim Perez"), ki18n("Catalan translation"), "noguer@osona.com", 0);
 
148
    aboutData.addCredit(ki18n("Jinghua Luo"), ki18n("Chinese Simplified translation"), "luojinghua@msn.com", 0);
 
149
    aboutData.addCredit(ki18n("Mitek"), ki18n("Old Czech translation"), "mitek@email.cz", 0);
 
150
    aboutData.addCredit(ki18n("Martin Sixta"), ki18n("Old Czech translation"), "lukumo84@seznam.cz", 0);
 
151
    aboutData.addCredit(ki18n("Vaclav Jůza"), ki18n("Czech translation"), "VaclavJuza@gmail.com", 0);
 
152
    aboutData.addCredit(ki18n("Anders Bruun Olsen"), ki18n("Old Danish translation"), "anders@bruun-olsen.net", 0);
 
153
    aboutData.addCredit(ki18n("Peter H. Sorensen"), ki18n("Danish translation"), "peters@skydebanen.net", 0);
 
154
    aboutData.addCredit(ki18n("Frank Schoolmeesters"), ki18n("Dutch translation"), "frank_schoolmeesters@yahoo.com", 0);
 
155
    aboutData.addCredit(ki18n("Rene-Pierre Lehmann"), ki18n("Old French translation"), "ripi@lepi.org", 0);
 
156
    aboutData.addCredit(ki18n("David Guillerm"), ki18n("French translation"), "dguillerm@gmail.com", 0);
 
157
    aboutData.addCredit(ki18n("Christoph Thielecke"), ki18n("Old German translation"), "crissi99@gmx.de", 0);
 
158
    aboutData.addCredit(ki18n("Dirk Eschler"), ki18n("German translation"), "deschler@users.sourceforge.net", 0);
 
159
    aboutData.addCredit(ki18n("Spiros Georgaras"), ki18n("Greek translation"), "sngeorgaras@gmail.com", 0);
 
160
    aboutData.addCredit(ki18n("Kukk Zoltan"), ki18n("Old Hungarian translation"), "kukkzoli@freemail.hu", 0);
 
161
    aboutData.addCredit(ki18n("Arpad Biro"), ki18n("Hungarian translation"), "biro_arpad@yahoo.com", 0);
 
162
    aboutData.addCredit(ki18n("Giuseppe Bordoni"), ki18n("Italian translation"), "geppo@geppozone.com", 0);
 
163
    aboutData.addCredit(ki18n("Hideki Kimura"), ki18n("Japanese translation"), "hangyo1973@gmail.com", 0);
 
164
    aboutData.addCredit(ki18n("UTUMI Hirosi"), ki18n("Old Japanese translation"), "utuhiro@mx12.freecom.ne.jp", 0);
 
165
    aboutData.addCredit(ki18n("Dovydas Sankauskas"), ki18n("Lithuanian translation"), "laisve@gmail.com", 0);
 
166
    aboutData.addCredit(ki18n("Bruno Queiros"), ki18n("Portuguese translation"), "brunoqueiros@portugalmail.com", 0);
 
167
    aboutData.addCredit(ki18n("Lukasz Janyst"), ki18n("Old Polish translation"), "ljan@wp.pl", 0);
 
168
    aboutData.addCredit(ki18n("Pawel Salawa"), ki18n("Polish translation"), "boogie@myslenice.one.pl", 0);
 
169
    aboutData.addCredit(ki18n("Tomek Grzejszczyk"), ki18n("Polish translation"), "tgrzej@onet.eu", 0);
 
170
    aboutData.addCredit(ki18n("Dmitry A. Bugay"), ki18n("Russian translation"), "sam@vhnet.ru", 0);
 
171
    aboutData.addCredit(ki18n("Dmitry Chernyak"), ki18n("Old Russian translation"), "chernyak@mail.ru", 0);
 
172
    aboutData.addCredit(ki18n("Sasa Tomic"), ki18n("Serbian translation"), "stomic@gmx.net", 0);
 
173
    aboutData.addCredit(ki18n("Zdenko Podobný and Ondrej Pačay (Yogi)"), ki18n("Slovak translation"), "zdenop@gmail.com", 0);
 
174
    aboutData.addCredit(ki18n("Matej Urbancic"), ki18n("Slovenian translation"), "matej.urban@gmail.com", 0);
 
175
    aboutData.addCredit(ki18n("Rafael Munoz"), ki18n("Old Spanish translation"), "muror@hotpop.com", 0);
 
176
    aboutData.addCredit(ki18n("Alejandro Araiza Alvarado"), ki18n("Spanish translation"), "mebrelith@gmail.com", 0);
 
177
    aboutData.addCredit(ki18n("Erik Johanssen"), ki18n("Old Swedish translation"), "erre@telia.com", 0);
 
178
    aboutData.addCredit(ki18n("Anders Linden"), ki18n("Old Swedish translation"), "connyosis@gmx.net", 0);
 
179
    aboutData.addCredit(ki18n("Peter Landgren"), ki18n("Swedish translation"), "peter.talken@telia.com", 0);
 
180
    aboutData.addCredit(ki18n("Bekir Sonat"), ki18n("Turkish translation"), "bekirsonat@kde.org.tr", 0);
 
181
    aboutData.addCredit(ki18n("Ivan Petrouchtchak"), ki18n("Ukrainian translation"), "connyosis@gmx.net", 0);
 
182
    aboutData.addCredit(ki18n("Seongnam Jee"), ki18n("Korean translation"), "snjee@intellicam.com", 0);
 
183
 
 
184
    // Command line arguments ...
 
185
    KCmdLineArgs::init(argc, argv, &aboutData);
 
186
 
 
187
    KCmdLineOptions options;
 
188
    options.add("left <path>", ki18n("Start left panel at <path>"));
 
189
    options.add("right <path>", ki18n("Start right panel at <path>"));
 
190
    options.add("profile <panel-profile>", ki18n("Load this profile on startup"));
 
191
 
 
192
    KCmdLineArgs::addCmdLineOptions(options);   // Add our own options.
 
193
 
 
194
    // check for command line arguments
 
195
 
 
196
    // create the application
 
197
    KrusaderApp app;
 
198
 
 
199
    KConfigGroup cfg(KGlobal::config().data(), "Look&Feel");
 
200
    bool singleInstanceMode = cfg.readEntry("Single Instance Mode", _SingleInstanceMode);
 
201
 
 
202
    QString appName = "krusader";
 
203
    if (!singleInstanceMode)
 
204
        appName += QString("%1").arg(getpid());
 
205
 
 
206
    if (!QDBusConnection::sessionBus().isConnected()) {
 
207
        fprintf(stderr, "Cannot connect to the D-BUS session bus.\n"
 
208
                "To start it, run:\n"
 
209
                "\teval `dbus-launch --auto-syntax`\n");
 
210
    }
 
211
 
 
212
    QDBusInterface remoteApp("org.krusader", "/Instances/" + appName,
 
213
                             "org.krusader.Instance", QDBusConnection::sessionBus());
 
214
    QDBusReply<bool> reply;
 
215
    if (remoteApp.isValid())
 
216
        reply = remoteApp.call("isRunning");
 
217
 
 
218
    if (!reply.isValid() && reply.error().type() != QDBusError::ServiceUnknown &&
 
219
            reply.error().type() != QDBusError::UnknownObject)
 
220
        fprintf(stderr, "DBus Error: %s, %s\n", reply.error().name().toLocal8Bit().constData(), reply.error().message().toLocal8Bit().constData());
 
221
 
 
222
    if (reply.isValid() && (bool)reply) {
 
223
        fprintf(stderr, "%s", i18n("Application already running!\n").toLocal8Bit().data());
 
224
        KStartupInfo::appStarted();
 
225
        return 1;
 
226
    }
 
227
 
 
228
    // splash screen - if the user wants one
 
229
    KSplashScreen *splash = 0;
 
230
    { // don't remove bracket
 
231
        KConfigGroup cfg(KGlobal::config().data(), "Look&Feel");
 
232
        if (cfg.readEntry("Show splashscreen", _ShowSplashScreen)) {
 
233
            QString splashFilename = KStandardDirs::locate("data", "krusader/splash.png");
 
234
            QPixmap pixmap(splashFilename);
 
235
            if (!pixmap.isNull()) {
 
236
                splash = new KSplashScreen(pixmap);
 
237
                splash->show();
 
238
            }
 
239
        }
 
240
    } // don't remove bracket
 
241
 
 
242
    Krusader::AppName = appName;
 
243
    Krusader krusader;
 
244
 
 
245
    QDBusConnection dbus = QDBusConnection::sessionBus();
 
246
    if (!dbus.interface()->isServiceRegistered("org.krusader") && !dbus.registerService("org.krusader")) {
 
247
        fprintf(stderr, "DBus Error: %s, %s\n", dbus.lastError().name().toLocal8Bit().constData(), dbus.lastError().message().toLocal8Bit().constData());
 
248
    }
 
249
    if (!dbus.registerObject("/Instances/" + appName, &krusader, QDBusConnection::ExportScriptableSlots)) {
 
250
        fprintf(stderr, "DBus Error: %s, %s\n", dbus.lastError().name().toLocal8Bit().constData(), dbus.lastError().message().toLocal8Bit().constData());
 
251
    }
 
252
 
 
253
    // catching SIGTERM, SIGHUP, SIGQUIT
 
254
    KDE_signal(SIGTERM, sigterm_handler);
 
255
    KDE_signal(SIGPIPE, sigterm_handler);
 
256
    KDE_signal(SIGHUP, sigterm_handler);
 
257
 
 
258
    // make sure we receive X's focus in/out events
 
259
    QObject::connect(&app, SIGNAL(windowActive()), krusader.slot, SLOT(windowActive()));
 
260
    QObject::connect(&app, SIGNAL(windowInactive()), krusader.slot, SLOT(windowInactive()));
 
261
 
 
262
    // hide splashscreen
 
263
    if (splash) {
 
264
        splash->finish(&krusader);
 
265
        delete splash;
 
266
    }
 
267
 
 
268
    // let's go.
 
269
    return app.exec();
269
270
}