*\r
* Author: H.G.Muller (August 2009)\r
*\r
+ * Copyright 2009, 2010 Free Software Foundation, Inc. \r
+ *\r
* ------------------------------------------------------------------------\r
*\r
* GNU XBoard is free software: you can redistribute it and/or modify\r
HANDLE chatHandle[MAX_CHAT];\r
\r
void SendToICS P((char *s));\r
-void ChatPopUp();\r
+void ChatPopUp P((char *s));\r
void ChatPopDown();\r
\r
/* Imports from backend.c */\r
-char * SavePart(char *str);\r
extern int opponentKibitzes;\r
\r
/* Imports from winboard.c */\r
static SnapData sd;\r
char buf[MSG_SIZ], mess[MSG_SIZ];\r
int partner = -1, i;\r
+ static BOOL filterHasFocus[MAX_CHAT];\r
\r
for(i=0; i<MAX_CHAT; i++) if(hDlg == chatHandle[i]) { partner = i; break; }\r
\r
sprintf(buf, "Chat Window %s", first.tidy);\r
SetWindowText(hDlg, buf);\r
}\r
- chatPartner[partner][0] = 0;\r
-\r
+// chatPartner[partner][0] = 0;\r
+ SendMessage( GetDlgItem(hDlg, IDC_ChatPartner), // [HGM] clickbox: initialize with requested handle\r
+ WM_SETTEXT, 0, (LPARAM) chatPartner[partner] );\r
+ filterHasFocus[partner] = TRUE;\r
+ if(chatPartner[partner][0]) {\r
+ filterHasFocus[partner] = FALSE;\r
+ SetFocus( GetDlgItem(hDlg, OPT_ChatInput) );\r
+ }\r
return FALSE;\r
\r
case WM_COMMAND:\r
+ /* \r
+ [AS]\r
+ If <Enter> is pressed while editing the filter, it's better to apply\r
+ the filter rather than selecting the current game.\r
+ */\r
+ if( LOWORD(wParam) == IDC_ChatPartner ) {\r
+ switch( HIWORD(wParam) ) {\r
+ case EN_SETFOCUS:\r
+ filterHasFocus[partner] = TRUE;\r
+ break;\r
+ case EN_KILLFOCUS:\r
+ filterHasFocus[partner] = FALSE;\r
+ break;\r
+ }\r
+ }\r
+\r
+ if( filterHasFocus[partner] && (LOWORD(wParam) == IDC_Send) ) {\r
+ SetFocus(GetDlgItem(hDlg, OPT_ChatInput));\r
+ wParam = IDC_Change;\r
+ }\r
+ /* [AS] End command replacement */\r
+\r
switch (LOWORD(wParam)) {\r
\r
case IDCANCEL:\r
if(!atoi(chatPartner[partner])) {\r
sprintf(buf, "> %s\n", mess); // echo only tells to handle, not channel\r
InsertIntoMemo(hDlg, buf);\r
- }\r
sprintf(buf, "xtell %s %s\n", chatPartner[partner], mess);\r
+ } else\r
+ sprintf(buf, "tell %s %s\n", chatPartner[partner], mess);\r
}\r
SendToICS(buf);\r
break;\r
}\r
\r
// front end\r
-void ChatPopUp()\r
+void ChatPopUp(char *icsHandle)\r
{\r
FARPROC lpProc;\r
+ int i, partner = -1;\r
\r
- if(chatCount >= MAX_CHAT) return;\r
-\r
CheckMenuItem(GetMenu(hwndMain), IDM_NewChat, MF_CHECKED);\r
+ for(i=0; i<MAX_CHAT; i++) if(chatHandle[i] == NULL) { partner = i; break; }\r
+ if(partner == -1) { DisplayError("You first have to close a Chat Box\nbefore you can open a new one", 0); return; }\r
+ if(icsHandle) // [HGM] clickbox set handle in advance\r
+ strcpy(chatPartner[partner], icsHandle);\r
+ else chatPartner[partner][0] = NULLCHAR;\r
chatCount++;\r
\r
lpProc = MakeProcInstance( (FARPROC) ChatProc, hInst );\r