2 #include <qtsingleapplication.h>
4 #include "mainwindow.h"
5 #include "searchparams.h"
11 #include "mac_startup.h"
15 QString getThemeName() {
19 process.start("dconf",
20 QStringList() << "read" << "/org/gnome/desktop/interface/gtk-theme");
21 if (process.waitForFinished()) {
22 themeName = process.readAllStandardOutput();
23 themeName = themeName.trimmed();
24 themeName.remove('\'');
25 if (!themeName.isEmpty()) return themeName;
28 QString rcPaths = QString::fromLocal8Bit(qgetenv("GTK2_RC_FILES"));
29 if (!rcPaths.isEmpty()) {
30 QStringList paths = rcPaths.split(QLatin1String(":"));
31 foreach (const QString &rcPath, paths) {
32 if (!rcPath.isEmpty()) {
34 if (rcFile.exists() && rcFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
35 QTextStream in(&rcFile);
37 QString line = in.readLine();
38 if (line.contains(QLatin1String("gtk-theme-name"))) {
39 line = line.right(line.length() - line.indexOf(QLatin1Char('=')) - 1);
40 line.remove(QLatin1Char('\"'));
41 line = line.trimmed();
48 if (!themeName.isEmpty())
54 if (themeName.isEmpty())
55 themeName = QGtkStyle::getGConfString(QLatin1String("/desktop/gnome/interface/gtk_theme"));
61 int main(int argc, char **argv) {
67 QtSingleApplication app(argc, argv);
68 QString message = app.arguments().size() > 1 ? app.arguments().at(1) : QString();
69 if (message == QLatin1String("--help")) {
70 MainWindow::printHelp();
73 if (app.sendMessage(message))
76 app.setApplicationName(QLatin1String(Constants::NAME));
77 app.setOrganizationName(QLatin1String(Constants::ORG_NAME));
78 app.setOrganizationDomain(QLatin1String(Constants::ORG_DOMAIN));
79 app.setWheelScrollLines(1);
80 app.setAttribute(Qt::AA_DontShowIconsInMenus);
83 Extra::appSetup(&app);
85 bool isGtk = app.style()->metaObject()->className() == QLatin1String("QGtkStyle");
87 app.setProperty("gtk", isGtk);
88 QString themeName = getThemeName();
89 app.setProperty("style", themeName);
91 QFile cssFile(":/style.css");
92 cssFile.open(QFile::ReadOnly);
93 QString styleSheet = QLatin1String(cssFile.readAll());
94 app.setStyleSheet(styleSheet);
98 QTranslator qtTranslator;
99 qtTranslator.load("qt_" + QLocale::system().name(),
100 QLibraryInfo::location(QLibraryInfo::TranslationsPath));
101 app.installTranslator(&qtTranslator);
105 QString dataDir = QLatin1String(PKGDATADIR);
107 QString dataDir = "";
109 QString localeDir = qApp->applicationDirPath() + "/locale";
110 if (!QDir(localeDir).exists()) {
111 localeDir = dataDir + "/locale";
113 // qDebug() << "Using locale dir" << localeDir << locale;
114 QTranslator translator;
115 translator.load(QLocale::system(), localeDir);
116 app.installTranslator(&translator);
117 QTextCodec::setCodecForTr(QTextCodec::codecForName("utf8"));
120 mainWin.setWindowTitle(Constants::NAME);
123 Extra::windowSetup(&mainWin);
125 mainWin.setProperty("style", app.property("style"));
128 // no window icon on Mac
131 if (QDir(dataDir).exists()) {
132 appIcon = Utils::icon(Constants::UNIX_NAME);
134 dataDir = qApp->applicationDirPath() + "/data";
135 const int iconSizes [] = { 16, 22, 32, 48, 64, 128, 256, 512 };
136 for (int i = 0; i < 8; i++) {
137 QString size = QString::number(iconSizes[i]);
138 QString png = dataDir + "/" + size + "x" + size + "/" + Constants::UNIX_NAME + ".png";
139 appIcon.addFile(png, QSize(iconSizes[i], iconSizes[i]));
142 if (appIcon.isNull()) {
143 appIcon.addFile(":/images/app.png");
145 mainWin.setWindowIcon(appIcon);
148 mainWin.connect(&app, SIGNAL(messageReceived(const QString &)), &mainWin, SLOT(messageReceived(const QString &)));
149 app.setActivationWindow(&mainWin, true);
151 // all string literals are UTF-8
152 // QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
154 if (app.arguments().size() > 1) {
155 QString query = app.arguments().at(1);
156 if (query.startsWith(QLatin1String("--"))) {
157 mainWin.messageReceived(query);
160 SearchParams *searchParams = new SearchParams();
161 searchParams->setKeywords(query);
162 mainWin.showMedia(searchParams);
168 // Seed random number generator
169 qsrand(QDateTime::currentDateTime().toTime_t());