(svn r17737) -Codechange: remove the chat window when you were chatting with someone who lost his/her connection or when you were team chatting and moved out of the company.

This commit is contained in:
rubidium 2009-10-07 17:36:33 +00:00
parent c53682810f
commit 58a36f038b
4 changed files with 23 additions and 6 deletions

View File

@ -89,6 +89,9 @@ void SetLocalCompany(CompanyID new_company)
/* company could also be COMPANY_SPECTATOR or OWNER_NONE */
assert(Company::IsValidID(new_company) || new_company == COMPANY_SPECTATOR || new_company == OWNER_NONE);
/* Delete the chat window, if you were team chatting. */
InvalidateWindowData(WC_SEND_NETWORK_MSG, DESTTYPE_TEAM, _local_company);
_local_company = new_company;
/* Delete any construction windows... */

View File

@ -94,6 +94,15 @@ static ClientID _network_client_id = CLIENT_ID_FIRST;
/* Some externs / forwards */
extern void StateGameLoop();
/**
* Basically a client is leaving us right now.
*/
NetworkClientInfo::~NetworkClientInfo()
{
/* Delete the chat window, if you were chatting with this client. */
InvalidateWindowData(WC_SEND_NETWORK_MSG, DESTTYPE_CLIENT, this->client_id);
}
/**
* Return the CI given it's raw index
* @param index the index to search for

View File

@ -30,7 +30,7 @@ struct NetworkClientInfo : NetworkClientInfoPool::PoolItem<&_networkclientinfo_p
char unique_id[NETWORK_UNIQUE_ID_LENGTH]; ///< Every play sends an unique id so we can indentify him
NetworkClientInfo(ClientID client_id = INVALID_CLIENT_ID) : client_id(client_id) {}
~NetworkClientInfo() { client_id = INVALID_CLIENT_ID; }
~NetworkClientInfo();
};
#define FOR_ALL_CLIENT_INFOS_FROM(var, start) FOR_ALL_ITEMS_FROM(NetworkClientInfo, clientinfo_index, var, start)

View File

@ -277,7 +277,7 @@ struct NetworkChatWindow : public QueryStringBaseWindow {
StringID dest_string;
int dest;
NetworkChatWindow (const WindowDesc *desc, DestType type, int dest) : QueryStringBaseWindow(NETWORK_CHAT_LENGTH)
NetworkChatWindow(const WindowDesc *desc, DestType type, int dest) : QueryStringBaseWindow(NETWORK_CHAT_LENGTH)
{
this->dtype = type;
this->dest = dest;
@ -292,14 +292,14 @@ struct NetworkChatWindow : public QueryStringBaseWindow {
assert((uint)this->dtype < lengthof(chat_captions));
this->dest_string = chat_captions[this->dtype];
this->InitNested(desc);
this->InitNested(desc, type);
this->SetFocusedWidget(NWCW_TEXTBOX);
InvalidateWindowData(WC_NEWS_WINDOW, 0, this->height);
_chat_tab_completion_active = false;
}
~NetworkChatWindow ()
~NetworkChatWindow()
{
InvalidateWindowData(WC_NEWS_WINDOW, 0, 0);
}
@ -505,6 +505,11 @@ struct NetworkChatWindow : public QueryStringBaseWindow {
{
ShowOnScreenKeyboard(this, wid, NWCW_CLOSE, NWCW_SENDBUTTON);
}
virtual void OnInvalidateData(int data)
{
if (data == this->dest) delete this;
}
};
static const NWidgetPart _nested_chat_window_widgets[] = {
@ -530,8 +535,8 @@ static const WindowDesc _chat_window_desc(
void ShowNetworkChatQueryWindow(DestType type, int dest)
{
DeleteWindowById(WC_SEND_NETWORK_MSG, 0);
new NetworkChatWindow (&_chat_window_desc, type, dest);
DeleteWindowByClass(WC_SEND_NETWORK_MSG);
new NetworkChatWindow(&_chat_window_desc, type, dest);
}
#endif /* ENABLE_NETWORK */