fix #25 by allowing user to close model windows while backend is busy
tests / macos (push) Successful in 1m18s
tests / package-smoke-linux (push) Skipped
tests / package-smoke-windows (push) Skipped
tests / package-smoke-macos (push) Skipped
tests / linux (push) Successful in 2m17s
tests / windows (push) Failing after 14m10s

Signed-off-by: galeon <dertiellis@gmail.com>
This commit is contained in:
galeon committed 2026-10-20 17:43:43 +03:00
1 parent acd9334c16
commit 92531c6e9a
6 files changed
+24 -33

No files matched your search

+3 -2
View File
@@ -15,8 +15,9 @@ Dialog {
padding: 0 padding: 0
width: 880 width: 880
height: 600 height: 600
closePolicy: buildsDialog.backend.switching ? Popup.NoAutoClose closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutside
: Popup.CloseOnEscape | Popup.CloseOnPressOutside //closePolicy: buildsDialog.backend.switching ? Popup.NoAutoClose
// : Popup.CloseOnEscape | Popup.CloseOnPressOutside
background: Rectangle { background: Rectangle {
color: "#1e1e1e" color: "#1e1e1e"
+5 -23
View File
@@ -19,15 +19,6 @@ endif()
qt_standard_project_setup(REQUIRES 6.8) qt_standard_project_setup(REQUIRES 6.8)
# Иконку самого файла приложения (то, что видно до запуска) каждая система берёт
# по-своему: Windows — из ресурса, вкомпилированного в .exe, macOS — из .icns
# внутри бандла. На Linux такого механизма нет, там иконку даёт .desktop-файл,
# который ставится ниже вместе с темой hicolor.
#
# Растры и .icns/.ico собираются из одного исходника скриптом icons/generate_icons.sh:
# у macOS арт по сетке Apple занимает 824 из 1024 точек холста, у Windows и Linux
# идёт без полей. Правки иконки вносятся в icons/master/icon_master.png с
# последующим перезапуском скрипта, а не в отдельные файлы размеров.
set(LAUNCHER_ICON_DIR "${CMAKE_CURRENT_SOURCE_DIR}/icons") set(LAUNCHER_ICON_DIR "${CMAKE_CURRENT_SOURCE_DIR}/icons")
if(WIN32) if(WIN32)
@@ -47,10 +38,6 @@ qt_add_executable(BiLauncher
${LAUNCHER_APP_ICON} ${LAUNCHER_APP_ICON}
) )
# Иконка окна выставляется в main.cpp через setWindowIcon() и обязана быть
# доступна на всех платформах, поэтому лежит в отдельном ресурсе, а не в
# ресурсах QML-модуля: путь :/icons/... не зависит от URI модуля.
# Размеры 24, 48 и 64 нужны панели задач Windows и значкам рабочих столов Linux.
qt_add_resources(BiLauncher "appicon" qt_add_resources(BiLauncher "appicon"
PREFIX "/icons" PREFIX "/icons"
BASE "icons" BASE "icons"
@@ -70,9 +57,11 @@ qt_add_resources(BiLauncher "appicon"
icons/icon_512x512@2x.png icons/icon_512x512@2x.png
) )
# OUTPUT_DIRECTORY: по умолчанию модуль с URI BiLauncher кладёт qmldir в # Путь импорта для QML code model Qt Creator / qmlls: модуль лежит в
# ${CMAKE_BINARY_DIR}/BiLauncher — на Linux это имя занято самим исполняемым # ${CMAKE_CURRENT_BINARY_DIR}/qml, а не в корне каталога сборки.
# файлом (у него нет расширения), и линковка падает с «Is a directory». set(QML_IMPORT_PATH "${CMAKE_CURRENT_BINARY_DIR}/qml"
CACHE STRING "Пути импорта QML для Qt Creator" FORCE)
qt_add_qml_module(BiLauncher qt_add_qml_module(BiLauncher
URI BiLauncher URI BiLauncher
OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/qml/BiLauncher" OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/qml/BiLauncher"
@@ -144,8 +133,6 @@ set_target_properties(BiLauncher PROPERTIES
MACOSX_BUNDLE_GUI_IDENTIFIER com.galeondev.BiLauncher MACOSX_BUNDLE_GUI_IDENTIFIER com.galeondev.BiLauncher
MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION} MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION} MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION}
# Попадает в CFBundleIconFile сгенерированного Info.plist — только имя
# файла, без пути: сам .icns кладётся в Contents/Resources выше.
MACOSX_BUNDLE_ICON_FILE icon.icns MACOSX_BUNDLE_ICON_FILE icon.icns
MACOSX_BUNDLE TRUE MACOSX_BUNDLE TRUE
WIN32_EXECUTABLE TRUE WIN32_EXECUTABLE TRUE
@@ -206,8 +193,6 @@ if(UNIX AND NOT APPLE)
) )
install(TARGETS launcher_zlib_reference LIBRARY DESTINATION ${LAUNCHER_ZLIB_DIR}) install(TARGETS launcher_zlib_reference LIBRARY DESTINATION ${LAUNCHER_ZLIB_DIR})
# Рабочие столы ищут иконку не по имени файла, а по имени из ключа Icon=
# .desktop-файла, перебирая размеры в теме hicolor, — отсюда переименование.
foreach(icon_size IN ITEMS 16 24 32 48 64 128 256 512) foreach(icon_size IN ITEMS 16 24 32 48 64 128 256 512)
install(FILES "${LAUNCHER_ICON_DIR}/icon_${icon_size}x${icon_size}.png" install(FILES "${LAUNCHER_ICON_DIR}/icon_${icon_size}x${icon_size}.png"
DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/${icon_size}x${icon_size}/apps" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/${icon_size}x${icon_size}/apps"
@@ -243,9 +228,6 @@ qt_generate_deploy_qml_app_script(
DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
DEPLOY_TOOL_OPTIONS ${deploy_opts}) DEPLOY_TOOL_OPTIONS ${deploy_opts})
install(SCRIPT ${deploy_script}) install(SCRIPT ${deploy_script})
# Автотесты: собираются только по запросу и в установку не попадают.
# Код лаунчера при этом не меняется — тесты компилируют те же исходники
# в отдельную статическую библиотеку, см. tests/CMakeLists.txt и doc/testing.md.
option(BILAUNCHER_BUILD_TESTS "Собрать автотесты (ctest)" OFF) option(BILAUNCHER_BUILD_TESTS "Собрать автотесты (ctest)" OFF)
if(BILAUNCHER_BUILD_TESTS) if(BILAUNCHER_BUILD_TESTS)
enable_testing() enable_testing()
+7 -1
View File
@@ -192,6 +192,10 @@ Window {
rotation: 0 rotation: 0
editable: false editable: false
hoverEnabled: true hoverEnabled: true
// Пока идёт загрузка или установка, профиль и сборку не меняем:
// единственное доступное действие — отмена на панели загрузки.
enabled: !backend.busy && !backend.gameRunning
opacity: enabled ? 1.0 : 0.45
model: backend.profileNames model: backend.profileNames
@@ -390,7 +394,8 @@ Window {
anchors.rightMargin: 0 anchors.rightMargin: 0
anchors.bottomMargin: -218 anchors.bottomMargin: -218
hoverEnabled: true hoverEnabled: true
enabled: !backend.gameRunning && !backend.switching enabled: !backend.gameRunning || !backend.switching
opacity: enabled ? 1.0 : 0.45
contentItem: Text { contentItem: Text {
text: backend.activeBuildName !== "" ? backend.activeBuildName text: backend.activeBuildName !== "" ? backend.activeBuildName
@@ -464,6 +469,7 @@ Window {
anchors.verticalCenter: folderButton.verticalCenter anchors.verticalCenter: folderButton.verticalCenter
anchors.leftMargin: 8 anchors.leftMargin: 8
hoverEnabled: true hoverEnabled: true
enabled: !backend.busy && !backend.gameRunning
background: Image { background: Image {
anchors.fill: parent anchors.fill: parent
+3 -3
View File
@@ -22,9 +22,9 @@ Dialog {
padding: 0 padding: 0
width: 960 width: 960
height: 560 height: 560
closePolicy: seasons.backend.seasonalInstalling // Закрывается и во время установки: отменить её можно только на панели
? Popup.NoAutoClose // загрузки главного окна, а модальное окно эту панель перекрывает.
: (Popup.CloseOnEscape | Popup.CloseOnPressOutside) closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutside
background: Rectangle { background: Rectangle {
color: "#1e1e1e" color: "#1e1e1e"
+3 -2
View File
@@ -63,8 +63,9 @@
| `seasonalInstallFinished` | сообщение «сборка установлена, можно играть» | | `seasonalInstallFinished` | сообщение «сборка установлена, можно играть» |
| `javaRuntimeInstalled` | обновляет строку Java в настройках | | `javaRuntimeInstalled` | обновляет строку Java в настройках |
Кнопка запуска выключена, пока `busy` или `gameRunning`. Кнопка активной сборки выключена во время Кнопка запуска выключена, пока `busy` или `gameRunning`. Список профилей выключен, пока `busy`;
игры и смены сборки. кнопка активной сборки — пока `busy` или `gameRunning`. Так во время загрузки и установки (в том
числе сезонной сборки) доступна только отмена на панели загрузки.
## Профили ## Профили
+3 -2
View File
@@ -48,8 +48,9 @@
Каталог обновляется при каждом открытии окна (`refreshSeasonalCatalog(false)`). Свежий кэш отвечает Каталог обновляется при каждом открытии окна (`refreshSeasonalCatalog(false)`). Свежий кэш отвечает
без сети. без сети.
Пока идёт установка, окно закрывается только кнопкой. Отменить установку можно на панели загрузки Окно закрывается по Esc и щелчку мимо него и во время установки: отменить установку можно только
главного окна, и случайный щелчок мимо окна не должен её закрыть. на панели загрузки главного окна, которую модальное окно перекрывает. Установка при закрытии окна
продолжается.
--- ---