29
29
***************************************************************************/
32
#include <kcmdlineargs.h>
33
#include <kaboutdata.h>
34
#include <kactionmenu.h>
36
#include <kstandarddirs.h>
37
#include <ksplashscreen.h>
38
32
#include <unistd.h>
39
33
#include <signal.h>
40
#include <qeventloop.h>
35
#include <QtCore/QEventLoop>
36
#include <QtCore/QAbstractEventDispatcher>
37
#include <QtGui/QPixmap>
41
38
#include <QtDBus/QtDBus>
43
#include <QAbstractEventDispatcher>
41
#include <KCmdLineArgs>
43
#include <KActionMenu>
45
#include <KStandardDirs>
46
#include <KSplashScreen>
47
#include <KStartupInfo>
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>
54
#include "Panel/krviewfactory.h"
55
56
static const char *description = "Krusader\nTwin-Panel File Manager for KDE";
57
58
static void sigterm_handler(int i)
59
fprintf(stderr,"Signal: %d\n",i);
60
fprintf(stderr, "Signal: %d\n", i);
61
QAbstractEventDispatcher *instance = QAbstractEventDispatcher::instance();
64
KApplication::exit( - 15 );
62
QAbstractEventDispatcher *instance = QAbstractEventDispatcher::instance();
65
KApplication::exit(- 15);
67
int main(int argc, char *argv[]) {
68
int main(int argc, char *argv[])
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();
76
char * myArgv[argc+2];
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!
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];
89
for ( i = 0; i < argc; ++i )
90
myArgv[ i ] = argv[ i ];
92
strcpy(addedParams,icon_text);
93
strcpy(addedParams+strlen(icon_text)+1,icon_name);
95
myArgv[ argc ] = addedParams;
96
myArgv[ ++argc ] = addedParams+strlen(icon_text)+1;
72
// this is according to the users privileges. The icons are in Krusader::privIcon()
73
KrViewFactory::init();
78
char * myArgv[argc+2];
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!
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];
91
for (i = 0; i < argc; ++i)
92
myArgv[ i ] = argv[ i ];
94
strcpy(addedParams, icon_text);
95
strcpy(addedParams + strlen(icon_text) + 1, icon_name);
97
myArgv[ argc ] = addedParams;
98
myArgv[ ++argc ] = addedParams + strlen(icon_text) + 1;
101
103
// ============ end icon-stuff ===========
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);
107
QString versionName = VERSION;
109
QString versionName = VERSION;
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");
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);
181
// Command line arguments ...
182
KCmdLineArgs::init( argc, argv, &aboutData );
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") );
189
KCmdLineArgs::addCmdLineOptions( options ); // Add our own options.
191
// check for command line arguments
193
// create the application
196
KConfigGroup cfg( KGlobal::config().data(), "Look&Feel");
197
bool singleInstanceMode = cfg.readEntry( "Single Instance Mode", _SingleInstanceMode );
199
QString appName = "krusader";
200
if( !singleInstanceMode )
201
appName += QString( "%1" ).arg( getpid() );
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");
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");
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() );
219
if( reply.isValid() && (bool)reply ) {
220
fprintf( stderr, i18n( "Application already running!\n" ).toLocal8Bit() );
221
KStartupInfo::appStarted();
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 );
237
} // don't remove bracket
239
Krusader::AppName = appName;
242
QDBusConnection dbus = QDBusConnection::sessionBus();
243
if( !dbus.interface()->isServiceRegistered( "org.krusader" ) && !dbus.registerService( "org.krusader" ) )
245
fprintf( stderr, "DBus Error: %s, %s\n", dbus.lastError().name().toLocal8Bit().constData(), dbus.lastError().message().toLocal8Bit().constData() );
247
if( !dbus.registerObject( "/Instances/" + appName, &krusader, QDBusConnection::ExportScriptableSlots ) )
249
fprintf( stderr, "DBus Error: %s, %s\n", dbus.lastError().name().toLocal8Bit().constData(), dbus.lastError().message().toLocal8Bit().constData() );
252
// catching SIGTERM, SIGHUP, SIGQUIT
253
signal(SIGTERM,sigterm_handler);
254
signal(SIGPIPE,sigterm_handler);
255
signal(SIGHUP,sigterm_handler);
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()));
263
splash->finish( &krusader );
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");
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);
184
// Command line arguments ...
185
KCmdLineArgs::init(argc, argv, &aboutData);
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"));
192
KCmdLineArgs::addCmdLineOptions(options); // Add our own options.
194
// check for command line arguments
196
// create the application
199
KConfigGroup cfg(KGlobal::config().data(), "Look&Feel");
200
bool singleInstanceMode = cfg.readEntry("Single Instance Mode", _SingleInstanceMode);
202
QString appName = "krusader";
203
if (!singleInstanceMode)
204
appName += QString("%1").arg(getpid());
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");
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");
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());
222
if (reply.isValid() && (bool)reply) {
223
fprintf(stderr, "%s", i18n("Application already running!\n").toLocal8Bit().data());
224
KStartupInfo::appStarted();
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);
240
} // don't remove bracket
242
Krusader::AppName = appName;
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());
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());
253
// catching SIGTERM, SIGHUP, SIGQUIT
254
KDE_signal(SIGTERM, sigterm_handler);
255
KDE_signal(SIGPIPE, sigterm_handler);
256
KDE_signal(SIGHUP, sigterm_handler);
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()));
264
splash->finish(&krusader);