1
0
mirror of https://github.com/OpenTTD/OpenTTD synced 2026-01-24 04:34:16 +01:00

Fix: Company query popups do not update in multiplayer.

This commit is contained in:
Rito12
2025-12-20 23:34:04 +01:00
committed by rubidium42
parent 0ec507d4c5
commit f57c2cc56e
4 changed files with 32 additions and 8 deletions

View File

@@ -1206,6 +1206,8 @@ CommandCost CmdRenameCompany(DoCommandFlags flags, const std::string &text)
} else {
c->name = text;
}
InvalidateWindowClassesData(WC_COMPANY, WID_C_COMPANY_NAME);
MarkWholeScreenDirty();
CompanyAdminUpdate(c);
@@ -1259,7 +1261,7 @@ CommandCost CmdRenamePresident(DoCommandFlags flags, const std::string &text)
}
}
InvalidateWindowClassesData(WC_COMPANY, 1);
InvalidateWindowClassesData(WC_COMPANY, WID_C_PRESIDENT_NAME);
MarkWholeScreenDirty();
CompanyAdminUpdate(c);

View File

@@ -1926,6 +1926,9 @@ static const StringID _company_view_vehicle_count_strings[] = {
*/
struct CompanyWindow : Window
{
/** WID_C_CAPTION does not have a query string, so it can be safely used as invalid value. */
static constexpr CompanyWidgets INVALID_QUERY_WIDGET = WID_C_CAPTION;
CompanyWidgets query_widget{};
/** Display planes in the company window. */
@@ -2169,13 +2172,13 @@ struct CompanyWindow : Window
break;
case WID_C_PRESIDENT_NAME:
this->query_widget = WID_C_PRESIDENT_NAME;
ShowQueryString(GetString(STR_PRESIDENT_NAME, this->window_number), STR_COMPANY_VIEW_PRESIDENT_S_NAME_QUERY_CAPTION, MAX_LENGTH_PRESIDENT_NAME_CHARS, this, CS_ALPHANUMERAL, {QueryStringFlag::EnableDefault, QueryStringFlag::LengthIsInChars});
this->query_widget = WID_C_PRESIDENT_NAME;
break;
case WID_C_COMPANY_NAME:
this->query_widget = WID_C_COMPANY_NAME;
ShowQueryString(GetString(STR_COMPANY_NAME, this->window_number), STR_COMPANY_VIEW_COMPANY_NAME_QUERY_CAPTION, MAX_LENGTH_COMPANY_NAME_CHARS, this, CS_ALPHANUMERAL, {QueryStringFlag::EnableDefault, QueryStringFlag::LengthIsInChars});
this->query_widget = WID_C_COMPANY_NAME;
break;
case WID_C_VIEW_HQ: {
@@ -2218,8 +2221,8 @@ struct CompanyWindow : Window
break;
case WID_C_GIVE_MONEY:
this->query_widget = WID_C_GIVE_MONEY;
ShowQueryString({}, STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION, 30, this, CS_NUMERAL, {});
this->query_widget = WID_C_GIVE_MONEY;
break;
case WID_C_HOSTILE_TAKEOVER:
@@ -2261,9 +2264,12 @@ struct CompanyWindow : Window
void OnQueryTextFinished(std::optional<std::string> str) override
{
CompanyWidgets widget = this->query_widget;
this->query_widget = CompanyWindow::INVALID_QUERY_WIDGET;
if (!str.has_value()) return;
switch (this->query_widget) {
switch (widget) {
default: NOT_REACHED();
case WID_C_GIVE_MONEY: {
@@ -2286,9 +2292,14 @@ struct CompanyWindow : Window
void OnInvalidateData([[maybe_unused]] int data = 0, [[maybe_unused]] bool gui_scope = true) override
{
if (gui_scope && data == 1) {
/* Manually call OnResize to adjust minimum height of president name widget. */
OnResize();
if (!gui_scope) return;
/* Manually call OnResize to adjust minimum height of president name widget. */
if (data == WID_C_PRESIDENT_NAME) this->OnResize();
/* If a query string is visible, update its default value. */
if (this->query_widget != CompanyWindow::INVALID_QUERY_WIDGET && data == this->query_widget) {
UpdateQueryStringDefault(GetString(data == WID_C_COMPANY_NAME ? STR_COMPANY_NAME : STR_PRESIDENT_NAME, this->window_number));
}
}
};

View File

@@ -1069,6 +1069,16 @@ void ShowQueryString(std::string_view str, StringID caption, uint maxsize, Windo
new QueryStringWindow(str, caption, (flags.Test(QueryStringFlag::LengthIsInChars) ? MAX_CHAR_LENGTH : 1) * maxsize, maxsize, _query_string_desc, parent, afilter, flags);
}
/**
* Updates default text value of query strign window.
* @param str String for the default text shown in the textbox.
*/
void UpdateQueryStringDefault(std::string_view str)
{
QueryStringWindow *w = dynamic_cast<QueryStringWindow *>(FindWindowByClass(WC_QUERY_STRING));
if (w != nullptr) w->editbox.orig = str;
}
/**
* Window used for asking the user a YES/NO question.
*/

View File

@@ -28,6 +28,7 @@ using QueryStringFlags = EnumBitSet<QueryStringFlag, uint8_t>;
typedef void QueryCallbackProc(Window*, bool);
void ShowQueryString(std::string_view str, StringID caption, uint max_len, Window *parent, CharSetFilter afilter, QueryStringFlags flags);
void UpdateQueryStringDefault(std::string_view str);
void ShowQuery(EncodedString &&caption, EncodedString &&message, Window *w, QueryCallbackProc *callback, bool focus = false);
/** The number of 'characters' on the on-screen keyboard. */