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:
@@ -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);
|
||||
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@@ -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.
|
||||
*/
|
||||
|
||||
@@ -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. */
|
||||
|
||||
Reference in New Issue
Block a user