goldendict-ng/src/main.cc

101 lines
2.3 KiB
C++
Raw Normal View History

/* This file is (c) 2008-2009 Konstantin Isakov <ikm@users.berlios.de>
* Part of GoldenDict. Licensed under GPLv3 or later, see the LICENSE file */
#include <QIcon>
#include "mainwindow.hh"
#include "config.hh"
#include "processwrapper.hh"
#include "hotkeywrapper.hh"
2009-04-03 12:53:35 +00:00
//#define __DO_DEBUG
#ifdef __DO_DEBUG
#include <sys/resource.h>
#endif
int main( int argc, char ** argv )
{
#ifdef __DO_DEBUG
{
rlimit limit;
memset( &limit, 0, sizeof( limit ) );
limit.rlim_cur = RLIM_INFINITY;
limit.rlim_max = RLIM_INFINITY;
setrlimit( RLIMIT_CORE, &limit );
}
#endif
QHotkeyApplication app( argc, argv );
app.setApplicationName( "GoldenDict" );
app.setOrganizationDomain( "http://goldendict.berlios.de/" );
app.setWindowIcon( QIcon( ":/icons/programicon.png" ) );
Config::Class cfg( Config::load() );
// Prevent execution of the 2nd copy
// get pid
quint64 current_pid = QCoreApplication::applicationPid();
QString app_fname = QFileInfo(QCoreApplication::applicationFilePath()).baseName();
quint64 pid = ProcessWrapper::findProcess(
app_fname.toAscii().data(),
current_pid);
// check pid file
QString pid_name = QDir::homePath() + "/.pid";
QFile pid_file(pid_name);
if (pid_file.exists()) // pid file exists, check it
{
pid_file.open(QIODevice::ReadWrite);
QDataStream ds(&pid_file);
quint64 tmp; ds >> tmp;
if (tmp == pid) // it is active - exiting
{
// to do: switch to pid ?
pid_file.close();
return 1;
}
}
pid_file.open(QIODevice::WriteOnly);
QDataStream ds(&pid_file);
ds << current_pid;
pid_file.close();
// Load translations
QTranslator qtTranslator;
QString localeName = cfg.preferences.interfaceLanguage;
if ( localeName.isEmpty() )
localeName = QLocale::system().name();
qtTranslator.load( "qt_" + localeName,
QLibraryInfo::location( QLibraryInfo::TranslationsPath ) );
app.installTranslator( &qtTranslator );
QTranslator translator;
translator.load( QString( Config::getProgramDataDir() ) + "/locale/" + localeName );
app.installTranslator( &translator );
// Apply qt stylesheet
MainWindow::applyQtStyleSheet( cfg.preferences.displayStyle );
MainWindow m( cfg );
int r = app.exec();
// remove pid file
pid_file.remove();
return r;
}