Files
BiLauncher/main.cpp
T

66 lines
3.2 KiB
C++
Raw Normal View History

#include "localization.h"
2025-12-29 02:18:35 +03:00
#include <QGuiApplication>
2026-09-21 00:27:52 +03:00
#include <QIcon>
2025-12-29 02:18:35 +03:00
#include <QQmlApplicationEngine>
2026-08-22 18:19:13 +03:00
#include <QQuickStyle>
2025-10-25 15:49:45 +03:00
2026-09-01 22:25:23 +03:00
#ifdef LAUNCHER_HAS_WEBENGINE
#include <QtWebEngineQuick>
#endif
2025-10-25 15:49:45 +03:00
int main(int argc, char *argv[])
{
2026-09-01 22:25:23 +03:00
#ifdef LAUNCHER_HAS_WEBENGINE
// Вход в аккаунт Microsoft показывается встроенным окном браузера.
// Инициализация обязана идти до QGuiApplication: она выставляет общий
// контекст OpenGL, а после создания приложения это уже не действует.
QtWebEngineQuick::initialize();
#endif
2025-12-29 02:18:35 +03:00
QGuiApplication app(argc, argv);
2026-09-21 00:27:52 +03:00
// Иконка окна и панели задач. Отдаём все размеры сразу: оконный менеджер
// сам выберет подходящий, а готовый растр всегда чётче, чем полученный
// масштабированием одной большой картинки.
//
// На macOS этого делать нельзя: setWindowIcon подменяет иконку в доке
// растром во весь холст, и лаунчер выглядит заметно крупнее соседей. Там
// иконку берут из icon.icns внутри бандла — он нарисован по сетке Apple,
// с полями вокруг арта.
#ifndef Q_OS_MACOS
QIcon appIcon;
for (int size : {16, 24, 32, 48, 64, 128, 256, 512})
appIcon.addFile(QStringLiteral(":/icons/icon_%1x%1.png").arg(size));
for (int size : {16, 32, 128, 256, 512})
appIcon.addFile(QStringLiteral(":/icons/icon_%1x%1@2x.png").arg(size));
QGuiApplication::setWindowIcon(appIcon);
#endif
// На Wayland окно связывается с установленным .desktop-файлом только по
// этому имени; без него композитор покажет иконку по умолчанию.
QGuiApplication::setDesktopFileName(QStringLiteral("bilauncher"));
// Язык интерфейса нужно знать до того, как QML вычислит первую привязку,
// поэтому каталог читается здесь, а не в LauncherBackend: тот появляется
// только вместе с движком. Каталог лежит в ресурсах — не прочитался, значит
// сломана сборка, и запускаться дальше незачем.
if (!Localization::instance().load())
return -1;
2026-08-22 18:19:13 +03:00
// Нативный стиль Windows игнорирует пользовательские contentItem/background
// и сыплет предупреждениями, а всё окно стилизовано вручную — берём Basic.
QQuickStyle::setStyle("Basic");
2025-12-29 02:18:35 +03:00
QQmlApplicationEngine engine;
QObject::connect(
&engine,
&QQmlApplicationEngine::objectCreationFailed,
&app,
[]() { QCoreApplication::exit(-1); },
Qt::QueuedConnection);
2026-09-21 01:23:00 +03:00
engine.loadFromModule("BiLauncher", "Main");
2025-12-29 02:18:35 +03:00
return app.exec();
2025-10-25 15:49:45 +03:00
}