(svn r4605) -Backported revisions 4304, 4309, 4310, 4312, 4313, 4314 from trunk (chatbox-related stuff)

-The chat box' parent window (the main toolbar, wtf?) doesn't care for the WE_ON_EDIT_TEXT_CANCEL event, so don't send one. This code looks like it was mindlessly copy&pasted from the query box
	-The initial string of the chat box is always the empty string, so don't jump through hoops to check if nothing was entered and simplify the code
	-The chat box has no visible window title, therefore remove the string
	-Calculate the maximum pixel width of the entered text in the chat box from the "text box"-widget instead of hardcoding an arbitrary - and wrong - number
	-The parent window of the chat box is always the main toolbar (?!), therefore don't pass this information as parameter
	-a buffer overflow of the chat box introduced in r1263. Don't tell the Textbuf an arbitrary number as size of the string buffer, but the real lengthof() it
This commit is contained in:
celestar 2006-04-28 07:45:44 +00:00
parent 05b541f63a
commit 6573b46ca3
27 changed files with 11 additions and 59 deletions

2
gui.h
View File

@ -123,7 +123,7 @@ extern const byte _fios_colors[];
/* network gui */
void ShowNetworkGameWindow(void);
void ShowChatWindow(StringID str, StringID caption, int maxlen, int maxwidth, WindowClass window_class, WindowNumber window_number);
void ShowChatWindow(void);
/* bridge_gui.c */
void ShowBuildBridgeWindow(uint start, uint end, byte type);

View File

@ -1313,7 +1313,6 @@ STR_NETWORK_CONNECTING_DOWNLOADING :{BLACK}{NUM} /
STR_NETWORK_DISCONNECT :{BLACK}Disconnect
STR_NETWORK_CHAT_QUERY_CAPTION :{WHITE}Enter your text message to send
STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Enter the amount of money you want to give
STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Server is protected. Enter password
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Company is protected. Enter password

View File

@ -1298,7 +1298,6 @@ STR_NETWORK_CONNECTING_DOWNLOADING :{BLACK}{NUM} /
STR_NETWORK_DISCONNECT :{BLACK}Desconectar
STR_NETWORK_CHAT_QUERY_CAPTION :{WHITE}Digite a mensagem de texto a enviar
STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Digite o valor do dinheiro que pretende dar
STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Servidor protegido. Digite a senha
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Companhia protegida. Digite a senha

View File

@ -1297,7 +1297,6 @@ STR_NETWORK_CONNECTING_DOWNLOADING :{BLACK}{NUM} /
STR_NETWORK_DISCONNECT :{BLACK}Desconnecta
STR_NETWORK_CHAT_QUERY_CAPTION :{WHITE}Entra el text del missatge a enviar
STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Entra la quantitat de diners que vols obtenir
STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Servidor protegit. Entra la contrasenya
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Empresa protegida. Entra la contrasenya

View File

@ -1354,7 +1354,6 @@ STR_NETWORK_CONNECTING_DOWNLOADING :{BLACK}{NUM} /
STR_NETWORK_DISCONNECT :{BLACK}Odpojit se
STR_NETWORK_CHAT_QUERY_CAPTION :{WHITE}Napi¨ zprávu, kterou chce¨ poslat
STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Napi¨ castku, kterou chce¨ poskytnout
STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Server je chraneny. Napi¨ heslo
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Spolecnost je chranena. Napi¨ heslo

View File

@ -1311,7 +1311,6 @@ STR_NETWORK_CONNECTING_DOWNLOADING :{BLACK}{NUM} /
STR_NETWORK_DISCONNECT :{BLACK}Afbryd forbindelse
STR_NETWORK_CHAT_QUERY_CAPTION :{WHITE}Skrive den tekst, som du vil sende
STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Skriv det beløb, som du ønsker at give
STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Serveren er beskyttet. Skriv kodeordet
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Virksomheden er beskyttet. Skriv kodeordet

View File

@ -1313,7 +1313,6 @@ STR_NETWORK_CONNECTING_DOWNLOADING :{BLACK}{NUM} /
STR_NETWORK_DISCONNECT :{BLACK}Verbinding verbroken
STR_NETWORK_CHAT_QUERY_CAPTION :{WHITE}Voer het te versturen bericht in
STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Voer het geldbedrag dat je wilt geven in
STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Server is beveiligd. Voer wachtwoord in.
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Bedrijf is beveiligd. Voer wachtwoord in.

View File

@ -1313,7 +1313,6 @@ STR_NETWORK_CONNECTING_DOWNLOADING :{BLACK}{NUM} /
STR_NETWORK_DISCONNECT :{BLACK}Disconnect
STR_NETWORK_CHAT_QUERY_CAPTION :{WHITE}Enter your text message to send
STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Enter the amount of money you want to give
STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Server is protected. Enter password
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Company is protected. Enter password

View File

@ -1294,7 +1294,6 @@ STR_NETWORK_CONNECTING_DOWNLOADING :{BLACK}{NUM} /
STR_NETWORK_DISCONNECT :{BLACK}Katkesta
STR_NETWORK_CHAT_QUERY_CAPTION :{WHITE}Sõnumi kirjutamine saatmiseks teistele mängijatele
STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Teisele mängijale saadetava rahasumma sisestamine
STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Server on kaitstud. Sisesta parool
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Ettevõte on kaitstud. Sisesta parool

View File

@ -1312,7 +1312,6 @@ STR_NETWORK_CONNECTING_DOWNLOADING :{BLACK}{NUM} /
STR_NETWORK_DISCONNECT :{BLACK}Pura yhteys
STR_NETWORK_CHAT_QUERY_CAPTION :{WHITE}Syötä lähetettävä teksti
STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Syötä annettava rahamäärä
STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Palvelin on suojattu. Anna salasana
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Yhtiö on suojattu. Anna salasana

View File

@ -1314,7 +1314,6 @@ STR_NETWORK_CONNECTING_DOWNLOADING :{BLACK}{NUM} /
STR_NETWORK_DISCONNECT :{BLACK}Déconnecter
STR_NETWORK_CHAT_QUERY_CAPTION :{WHITE}Saisir le message à envoyer
STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Saisir le montant d'argent que vous désirez transférer
STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Le serveur est protégé. Entrez le mot de passe
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}La compagnie est protégée. Entrez le mot de passe

View File

@ -1283,7 +1283,6 @@ STR_NETWORK_CONNECTING_DOWNLOADING :{BLACK}{NUM} /
STR_NETWORK_DISCONNECT :{BLACK}Desconectar
STR_NETWORK_CHAT_QUERY_CAPTION :{WHITE}Introduce o texto a enviar
STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Introduce a cantidade de diñeiro a dar
STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}O servidor está protexido. Introduce clave
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}A comañía está protexida. Introduce clave

View File

@ -1314,7 +1314,6 @@ STR_NETWORK_CONNECTING_DOWNLOADING :{BLACK}{NUM} /
STR_NETWORK_DISCONNECT :{BLACK}Trennen
STR_NETWORK_CHAT_QUERY_CAPTION :{WHITE}Gib deine Nachricht ein
STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Gib an, wieviel Geld du geben möchtest
STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Server ist geschützt. Gib das Passwort ein
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Firma ist geschützt! Passwort eingeben

View File

@ -1378,7 +1378,6 @@ STR_NETWORK_CONNECTING_DOWNLOADING :{BLACK}{NUM} /
STR_NETWORK_DISCONNECT :{BLACK}Lebontás
STR_NETWORK_CHAT_QUERY_CAPTION :{WHITE}Írd be az elküldendõ üzenetet
STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Írd be mennyi pénzt akarsz adományozni
STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}A szerver jelszóval van védve. Írd be
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}A cég jelszóval van védve. Írd be

View File

@ -1298,7 +1298,6 @@ STR_NETWORK_CONNECTING_DOWNLOADING :{BLACK}{NUM} /
STR_NETWORK_DISCONNECT :{BLACK}Aftengjast
STR_NETWORK_CHAT_QUERY_CAPTION :{WHITE}Sláðu inn skilaboð til að senda
STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Sláðu inn upphæð fjár sem þú villt gefa
STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Þjónn er varinn. Sláðu inn lykilorð
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Fyrirtæki er varið. Sláðu inn lykilorð

View File

@ -1313,7 +1313,6 @@ STR_NETWORK_CONNECTING_DOWNLOADING :{BLACK}{NUM} /
STR_NETWORK_DISCONNECT :{BLACK}Disconnessione
STR_NETWORK_CHAT_QUERY_CAPTION :{WHITE}Inserisci il messaggio di testo da inviare
STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Inserisci l'ammontare di denaro che vuoi donare
STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Server protetto. Inserisci la password
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Compagnia protetta. Inserisci la password

View File

@ -1296,7 +1296,6 @@ STR_NETWORK_CONNECTING_DOWNLOADING :{BLACK}{NUM} /
STR_NETWORK_DISCONNECT :{BLACK}Koble fra
STR_NETWORK_CHAT_QUERY_CAPTION :{WHITE}Skriv inn teksten du vil sende
STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Skriv inn hvor mange penger du vil gi
STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Tjeneren er beskyttet. Skriv inn passord
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Firmaet er beskyttet. Skriv inn passord

View File

@ -1313,7 +1313,6 @@ STR_NETWORK_CONNECTING_DOWNLOADING :{BLACK}{NUM} /
STR_NETWORK_DISCONNECT :{BLACK}Rozlaczony
STR_NETWORK_CHAT_QUERY_CAPTION :{WHITE}Wprowadz tekst do wyslania
STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Wprowadz ilosc pieniedzy jaka chcesz przekazac
STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Serwer jest chroniony. Wprowadz haslo
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Firma jest chroniona. Wprowadz haslo

View File

@ -1298,7 +1298,6 @@ STR_NETWORK_CONNECTING_DOWNLOADING :{BLACK}{NUM} /
STR_NETWORK_DISCONNECT :{BLACK}Desligar
STR_NETWORK_CHAT_QUERY_CAPTION :{WHITE}Introduza a mensagem de texto a enviar
STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Introduza o valor do dinheiro que pretende dar
STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Servidor protegido. Introduza palavra-chave
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Companhia protegida. Introduza palavra-chave

View File

@ -1298,7 +1298,6 @@ STR_NETWORK_CONNECTING_DOWNLOADING :{BLACK}{NUM} /
STR_NETWORK_DISCONNECT :{BLACK}Deconectare
STR_NETWORK_CHAT_QUERY_CAPTION :{WHITE}Introdu textul de trimis
STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Introdu suma de bani pe care vrei sa o cedezi
STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Server protejat. Introdu parola
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Companie protejata. Introdu parola

View File

@ -1304,7 +1304,6 @@ STR_NETWORK_CONNECTING_DOWNLOADING :{BLACK}{NUM} /
STR_NETWORK_DISCONNECT :{BLACK}Odpojit sa
STR_NETWORK_CHAT_QUERY_CAPTION :{WHITE}Napis spravu, ktoru chces poslat
STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Napis sumu, ktoru chces poskytnut
STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Server je chraneny. Napis heslo
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Spolocnost je chranena. Napis heslo

View File

@ -1298,7 +1298,6 @@ STR_NETWORK_CONNECTING_DOWNLOADING :{BLACK}{NUM} /
STR_NETWORK_DISCONNECT :{BLACK}Desconectado
STR_NETWORK_CHAT_QUERY_CAPTION :{WHITE}Teclee el mensaje de texto a enviar
STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Introduce la cantidad de dinero que desea dar
STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Servidor protegido. Teclee la contraseña
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Empresa protegida. Introduce contraseña

View File

@ -1313,7 +1313,6 @@ STR_NETWORK_CONNECTING_DOWNLOADING :{BLACK}{NUM} /
STR_NETWORK_DISCONNECT :{BLACK}Frånkopplad
STR_NETWORK_CHAT_QUERY_CAPTION :{WHITE}Ange meddelandet du vill skicka
STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Ange beloppet du vill ge
STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Servern är skyddad. Ange lösenord
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Företaget är skyddat. Ange lösenord

View File

@ -1313,7 +1313,6 @@ STR_NETWORK_CONNECTING_DOWNLOADING :{BLACK}{NUM} /
STR_NETWORK_DISCONNECT :{BLACK}Baglantiyi kes
STR_NETWORK_CHAT_QUERY_CAPTION :{WHITE}Göndereceginiz mesaji girin
STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Vereceginiz para miktarini girin
STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Sunucu korumali. Parola girin
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Sirket korumali. Parola girin

View File

@ -1248,7 +1248,6 @@ STR_NETWORK_CONNECTING_DOWNLOADING :{BLACK}{NUM} /
STR_NETWORK_DISCONNECT :{BLACK}Atsijungti
STR_NETWORK_CHAT_QUERY_CAPTION :{WHITE}Ivesk teksta kuri nori siusti
STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Ivesk pinigu kieki kuri nori duoti
STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Serveris apsaugotas. Ivesk slaptazodi
STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Kompanija apsaugota. Ivesk slaptazodi

View File

@ -331,7 +331,7 @@ void ShowNetworkChatQueryWindow(byte desttype, byte dest)
{
_rename_id = desttype + (dest << 8);
_rename_what = 2;
ShowChatWindow(STR_EMPTY, STR_NETWORK_CHAT_QUERY_CAPTION, 150, 338, 1, 0);
ShowChatWindow();
}
void ShowNetworkGiveMoneyWindow(byte player)

View File

@ -51,7 +51,7 @@ typedef struct NetworkGameSorting {
/* Global to remember sorting after window has been closed */
static NetworkGameSorting _ng_sorting;
static char _edit_str_buf[MAX_QUERYSTR_LEN*2];
static char _edit_str_buf[MAX_QUERYSTR_LEN];
static void ShowNetworkStartServerWindow(void);
static void ShowNetworkLobbyWindow(NetworkGameList *ngl);
@ -1463,19 +1463,13 @@ void ShowJoinStatusWindowAfterJoin(void)
}
#define MAX_QUERYSTR_LEN 64
/* uses querystr_d WP macro */
static void ChatWindowWndProc(Window *w, WindowEvent *e)
{
static bool closed = false;
switch (e->event) {
case WE_CREATE:
SendWindowMessage(WC_NEWS_WINDOW, 0, WE_CREATE, w->height, 0);
SETBIT(_no_scroll, SCROLL_CHAT); // do not scroll the game with the arrow-keys
closed = false;
break;
case WE_PAINT:
@ -1488,7 +1482,7 @@ static void ChatWindowWndProc(Window *w, WindowEvent *e)
case 3: DeleteWindow(w); break; // Cancel
case 2: // Send
press_ok:;
if (strcmp(WP(w, querystr_d).text.buf, WP(w, querystr_d).text.buf + MAX_QUERYSTR_LEN) == 0) {
if (WP(w, querystr_d).text.buf[0] == '\0') {
DeleteWindow(w);
} else {
char *buf = WP(w, querystr_d).text.buf;
@ -1496,9 +1490,6 @@ press_ok:;
WindowNumber wnd_num = WP(w, querystr_d).wnd_num;
Window *parent;
// Mask the edit-box as closed, so we don't send out a CANCEL
closed = true;
DeleteWindow(w);
parent = FindWindowById(wnd_class, wnd_num);
@ -1534,15 +1525,6 @@ press_ok:;
case WE_DESTROY:
SendWindowMessage(WC_NEWS_WINDOW, 0, WE_DESTROY, 0, 0);
CLRBIT(_no_scroll, SCROLL_CHAT);
// If the window is not closed yet, it means it still needs to send a CANCEL
if (!closed) {
Window *parent = FindWindowById(WP(w,querystr_d).wnd_class, WP(w,querystr_d).wnd_num);
if (parent != NULL) {
WindowEvent e;
e.event = WE_ON_EDIT_TEXT_CANCEL;
parent->wndproc(parent, &e);
}
}
break;
}
}
@ -1563,29 +1545,23 @@ static const WindowDesc _chat_window_desc = {
ChatWindowWndProc
};
void ShowChatWindow(StringID str, StringID caption, int maxlen, int maxwidth, WindowClass window_class, WindowNumber window_number)
void ShowChatWindow(void)
{
Window *w;
#define _orig_edit_str_buf (_edit_str_buf+MAX_QUERYSTR_LEN)
DeleteWindowById(WC_SEND_NETWORK_MSG, 0);
GetString(_orig_edit_str_buf, str);
_orig_edit_str_buf[maxlen] = '\0';
memcpy(_edit_str_buf, _orig_edit_str_buf, MAX_QUERYSTR_LEN);
_edit_str_buf[0] = '\0';
w = AllocateWindowDesc(&_chat_window_desc);
w->click_state = 1 << 1;
WP(w,querystr_d).caption = caption;
WP(w,querystr_d).wnd_class = window_class;
WP(w,querystr_d).wnd_num = window_number;
WP(w,querystr_d).caption = STR_NULL;
WP(w,querystr_d).wnd_class = WC_MAIN_TOOLBAR;
WP(w,querystr_d).wnd_num = 0;
WP(w,querystr_d).text.caret = false;
WP(w,querystr_d).text.maxlength = maxlen - 1;
WP(w,querystr_d).text.maxwidth = maxwidth;
WP(w,querystr_d).text.maxlength = lengthof(_edit_str_buf);
WP(w,querystr_d).text.maxwidth = w->widget[1].right - w->widget[1].left - 2; // widget[1] is the "text box"
WP(w,querystr_d).text.buf = _edit_str_buf;
UpdateTextBufferSize(&WP(w, querystr_d).text);
}