fix: preserve special menu item text flags (#1011)

* fix: preserve T4 special menu item text flags

* fix: preserve IW3 special menu item text flags

* refactor: define IW3 and T4 dynamic window flags

* chore: also apply WindowDefDynamicFlag changes to iw4 and iw5

---------

Co-authored-by: Jan Laupetin <[email protected]>
This commit is contained in:
mo
2026-09-20 21:20:54 +02:00
committed by GitHub
co-authored by Jan Laupetin
parent f16dd0cffd
commit 6ca37c43fa
12 changed files with 271 additions and 18 deletions
@@ -104,6 +104,16 @@ namespace
exp material (localvarstring("ui_material"));
}
itemDef
{
name "save_game_info"
textsavegame
}
itemDef
{
name "cinematic_subtitle"
textcinematicsubtitle
}
itemDef
{
name "server_list"
rect 20 60 300 200 0 0
@@ -171,7 +181,7 @@ namespace
REQUIRE(mainMenu->visibleExp.entries[2]->data.op == OP_RIGHTPAREN);
REQUIRE(mainMenu->onOpen == R"("play" "menu_open" ; "setLocalVarInt" "ui_highlight" "5" ; )"s);
REQUIRE(mainMenu->itemCount == 3);
REQUIRE(mainMenu->itemCount == 5);
const auto* emptyTextItem = mainMenu->items[0];
REQUIRE(emptyTextItem->parent == mainMenu);
REQUIRE(emptyTextItem->text != nullptr);
@@ -185,7 +195,15 @@ namespace
REQUIRE(emptyTextItem->materialExp.numEntries == 3);
REQUIRE(emptyTextItem->materialExp.entries[0]->data.op == OP_LOCALVARSTRING);
const auto* listItem = mainMenu->items[1];
const auto* saveGameInfoItem = mainMenu->items[1];
REQUIRE(saveGameInfoItem->text == "savegameinfo"s);
REQUIRE(saveGameInfoItem->itemFlags == ITEM_FLAG_SAVE_GAME_INFO);
const auto* cinematicSubtitleItem = mainMenu->items[2];
REQUIRE(cinematicSubtitleItem->text == "cinematicsubtitle"s);
REQUIRE(cinematicSubtitleItem->itemFlags == ITEM_FLAG_CINEMATIC_SUBTITLE);
const auto* listItem = mainMenu->items[3];
REQUIRE(listItem->typeData.listBox);
REQUIRE(listItem->typeData.listBox->numColumns == 2);
REQUIRE(listItem->typeData.listBox->columnInfo[1].pos == 120);
@@ -197,7 +215,7 @@ namespace
REQUIRE(listItem->typeData.listBox->selectIcon == selectMaterial);
REQUIRE(listItem->typeData.listBox->onDoubleClick == R"("play" "mouse_click" ; )"s);
const auto* defaultTextItem = mainMenu->items[2];
const auto* defaultTextItem = mainMenu->items[4];
REQUIRE(defaultTextItem->type == 0);
REQUIRE(defaultTextItem->typeData.editField);
REQUIRE(defaultTextItem->typeData.editField->maxChars == 2);