Skip to content

Commit 9557cd6

Browse files
authored
Make loading of languages consistent across invocation types (flameshot-org#3313)
1 parent 6228b19 commit 9557cd6

File tree

1 file changed

+46
-39
lines changed

1 file changed

+46
-39
lines changed

src/main.cpp

Lines changed: 46 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,45 @@ QSharedMemory* guiMutexLock()
8585
return shm;
8686
}
8787

88+
QTranslator translator, qtTranslator;
89+
90+
void configureApp(bool gui)
91+
{
92+
if (gui) {
93+
QApplication::setStyle(new StyleOverride);
94+
}
95+
96+
// Configure translations
97+
for (const QString& path : PathInfo::translationsPaths()) {
98+
bool match = translator.load(QLocale(),
99+
QStringLiteral("Internationalization"),
100+
QStringLiteral("_"),
101+
path);
102+
if (match) {
103+
break;
104+
}
105+
}
106+
107+
qtTranslator.load(QLocale::system(),
108+
"qt",
109+
"_",
110+
QLibraryInfo::location(QLibraryInfo::TranslationsPath));
111+
112+
auto app = QCoreApplication::instance();
113+
app->installTranslator(&translator);
114+
app->installTranslator(&qtTranslator);
115+
app->setAttribute(Qt::AA_DontCreateNativeWidgetSiblings, true);
116+
}
117+
118+
// TODO find a way so we don't have to do this
119+
/// Recreate the application as a QApplication
120+
void reinitializeAsQApplication(int argc, char* argv[])
121+
{
122+
delete QCoreApplication::instance();
123+
new QApplication(argc, argv);
124+
configureApp(true);
125+
}
126+
88127
int main(int argc, char* argv[])
89128
{
90129
#ifdef Q_OS_LINUX
@@ -105,31 +144,7 @@ int main(int argc, char* argv[])
105144
#else
106145
QtSingleApplication app(argc, argv);
107146
#endif
108-
QApplication::setStyle(new StyleOverride);
109-
110-
QTranslator translator, qtTranslator;
111-
QStringList trPaths = PathInfo::translationsPaths();
112-
113-
for (const QString& path : trPaths) {
114-
bool match = translator.load(QLocale(),
115-
QStringLiteral("Internationalization"),
116-
QStringLiteral("_"),
117-
path);
118-
if (match) {
119-
break;
120-
}
121-
}
122-
123-
qtTranslator.load(
124-
QLocale::system(),
125-
"qt",
126-
"_",
127-
QLibraryInfo::location(QLibraryInfo::TranslationsPath));
128-
129-
qApp->installTranslator(&translator);
130-
qApp->installTranslator(&qtTranslator);
131-
qApp->setAttribute(Qt::AA_DontCreateNativeWidgetSiblings, true);
132-
147+
configureApp(true);
133148
auto c = Flameshot::instance();
134149
FlameshotDaemon::start();
135150

@@ -151,6 +166,7 @@ int main(int argc, char* argv[])
151166
* CLI parsing |
152167
* ------------*/
153168
new QCoreApplication(argc, argv);
169+
configureApp(false);
154170
CommandLineParser parser;
155171
// Add description
156172
parser.setDescription(
@@ -344,14 +360,12 @@ int main(int argc, char* argv[])
344360
Flameshot::setOrigin(Flameshot::CLI);
345361
if (parser.isSet(helpOption) || parser.isSet(versionOption)) {
346362
} else if (parser.isSet(launcherArgument)) { // LAUNCHER
347-
delete qApp;
348-
new QApplication(argc, argv);
363+
reinitializeAsQApplication(argc, argv);
349364
Flameshot* flameshot = Flameshot::instance();
350365
flameshot->launcher();
351366
qApp->exec();
352367
} else if (parser.isSet(guiArgument)) { // GUI
353-
delete qApp;
354-
new QApplication(argc, argv);
368+
reinitializeAsQApplication(argc, argv);
355369
// Prevent multiple instances of 'flameshot gui' from running if not
356370
// configured to do so.
357371
if (!ConfigHandler().allowMultipleGuiInstances()) {
@@ -414,10 +428,7 @@ int main(int argc, char* argv[])
414428
}
415429
requestCaptureAndWait(req);
416430
} else if (parser.isSet(fullArgument)) { // FULL
417-
// Recreate the application as a QApplication
418-
// TODO find a way so we don't have to do this
419-
delete qApp;
420-
new QApplication(argc, argv);
431+
reinitializeAsQApplication(argc, argv);
421432

422433
// Option values
423434
QString path = parser.value(pathOption);
@@ -452,10 +463,7 @@ int main(int argc, char* argv[])
452463
}
453464
requestCaptureAndWait(req);
454465
} else if (parser.isSet(screenArgument)) { // SCREEN
455-
// Recreate the application as a QApplication
456-
// TODO find a way so we don't have to do this
457-
delete qApp;
458-
new QApplication(argc, argv);
466+
reinitializeAsQApplication(argc, argv);
459467

460468
QString numberStr = parser.value(screenNumberOption);
461469
// Option values
@@ -526,8 +534,7 @@ int main(int argc, char* argv[])
526534
}
527535
if (!someFlagSet) {
528536
// Open gui when no options are given
529-
delete qApp;
530-
new QApplication(argc, argv);
537+
reinitializeAsQApplication(argc, argv);
531538
QObject::connect(
532539
qApp, &QApplication::lastWindowClosed, qApp, &QApplication::quit);
533540
Flameshot::instance()->config();

0 commit comments

Comments
 (0)