6#include "singleapplication.h"
48static auto joinRemainingArgs(
const QStringList &args,
int start) -> QString {
49 Q_ASSERT(start >= 0 && start <= args.size());
50 return args.mid(start).join(
" ");
62static auto appendWithSpaceIfSuffixNotEmpty(QString &target,
63 const QString &suffix) ->
void {
64 if (!suffix.isEmpty()) {
65 if (!target.isEmpty())
78auto main(
int argc,
char *argv[]) ->
int {
79#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
80 QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
81 QApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);
86 QString name = qgetenv(
"USER");
88 name = qgetenv(
"USERNAME");
89 SingleApplication app(argc, argv, name +
"QtPass");
91 QApplication app(argc, argv);
94 const QStringList args = app.arguments();
95 bool consumeNextArg =
false;
96 for (
int i = 1; i < args.count(); ++i) {
97 const auto &arg = args.at(i);
100 consumeNextArg =
false;
101 appendWithSpaceIfSuffixNotEmpty(text, joinRemainingArgs(args, i + 1));
105 if (consumeNextArg) {
106 consumeNextArg =
false;
110 if (arg.startsWith(
'-')) {
115 const bool optionTakesSeparateValue =
116 !arg.contains(
'=') && i + 1 < args.count() && arg.startsWith(
"--") &&
117 !arg.startsWith(
"---") && !args[i + 1].startsWith(
'-');
118 if (optionTakesSeparateValue)
119 consumeNextArg =
true;
128 if ((text.indexOf(
"-psn_") == 0) || (text.indexOf(
"-session") == 0)) {
133 if (app.isRunning()) {
134 app.sendMessage(text);
139 Q_INIT_RESOURCE(resources);
140 Q_INIT_RESOURCE(qmake_qmake_qm_files);
142 QCoreApplication::setOrganizationName(
"IJHack");
143 QCoreApplication::setOrganizationDomain(
"ijhack.org");
144 QCoreApplication::setApplicationName(
"QtPass");
145 QCoreApplication::setApplicationVersion(VERSION);
148 QTranslator translator;
149 QString locale = QLocale::system().name();
151 QString(
":localization/localization_%1.qm").arg(locale))) {
153 SingleApplication::installTranslator(&translator);
154 SingleApplication::setLayoutDirection(
155 QObject::tr(
"LTR") ==
"RTL" ? Qt::RightToLeft : Qt::LeftToRight);
157 QApplication::installTranslator(&translator);
158 QApplication::setLayoutDirection(
159 QObject::tr(
"LTR") ==
"RTL" ? Qt::RightToLeft : Qt::LeftToRight);
167 QApplication::setWindowIcon(QIcon(
":artwork/icon.png"));
170 QObject::connect(&app, &SingleApplication::messageAvailable, &w,
174 QGuiApplication::setDesktopFileName(
"qtpass");
177#if QT_VERSION < QT_VERSION_CHECK(5, 12, 0)
178 static int cursorScreen =
179 app.desktop()->screenNumber(app.desktop()->cursor().pos());
180 QPoint cursorScreenCenter =
181 app.desktop()->screenGeometry(cursorScreen).center();
182 QRect windowFrameGeo = w.frameGeometry();
183 windowFrameGeo.moveCenter(cursorScreenCenter);
184 w.move(windowFrameGeo.topLeft());
186 QScreen *screen = QGuiApplication::screenAt(QCursor::pos());
188 screen = QGuiApplication::primaryScreen();
190 const QPoint cursorScreenCenter = screen->geometry().center();
191 QRect windowFrameGeo = w.frameGeometry();
192 windowFrameGeo.moveCenter(cursorScreenCenter);
193 w.move(windowFrameGeo.topLeft());
200 return SingleApplication::exec();
202 return QApplication::exec();
Main application window orchestrating UI, user interactions, and external process handlers.
void messageAvailable(const QString &message)
Handle an incoming inter-process message (single-instance mode).