Fix multi-leg promotions
[xboard.git] / winboard / wchat.c
index 1da04b7..3be1e7f 100644 (file)
@@ -3,7 +3,8 @@
  *\r
  * Author: H.G.Muller (August 2009)\r
  *\r
- * Copyright 2009, 2010 Free Software Foundation, Inc.\r
+ * Copyright 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 Free\r
+ * Software Foundation, Inc.\r
  *\r
  * ------------------------------------------------------------------------\r
  *\r
@@ -62,6 +63,7 @@ extern HWND ChatDialog;
 \r
 extern HINSTANCE hInst;\r
 extern HWND hwndConsole;\r
+extern char ics_handle[];\r
 \r
 extern WindowPlacement wpChat[MAX_CHAT];\r
 extern WindowPlacement wpConsole;\r
@@ -193,7 +195,7 @@ LRESULT CALLBACK ChatProc( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam
        if(partner<0) {\r
                for(i=0; i<MAX_CHAT; i++) if(chatHandle[i] == NULL) { partner = i; break; }\r
                chatHandle[partner] = hDlg;\r
-               snprintf(buf, MSG_SIZ, "Chat Window %s", first.tidy);\r
+               snprintf(buf, MSG_SIZ, T_("Chat Window %s"), ics_handle[0] ? ics_handle : first.tidy);\r
                SetWindowText(hDlg, buf);\r
         }\r
        for(i=0; i<MAX_CHAT; i++) if(chatHandle[i]) {\r
@@ -220,7 +222,7 @@ LRESULT CALLBACK ChatProc( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam
        SendMessage(hMemo, EM_SETEVENTMASK, 0, wMask | ENM_LINK);\r
        SendMessage(hMemo, EM_AUTOURLDETECT, TRUE, 0L);\r
        chatInputWindowProc = (WNDPROC) // cloned from ConsoleWndProc(). Assume they all share same proc.\r
-             SetWindowLong(GetDlgItem(hDlg, OPT_ChatInput), GWL_WNDPROC, (LONG) InterceptArrowKeys);\r
+             SetWindowLongPtr(GetDlgItem(hDlg, OPT_ChatInput), GWLP_WNDPROC, (LONG_PTR) InterceptArrowKeys);\r
         return FALSE;\r
 \r
     case WM_NOTIFY:\r
@@ -360,14 +362,21 @@ void ChatPopUp(char *icsHandle)
 {\r
   FARPROC lpProc;\r
   int i, partner = -1;\r
+  char buf[MSG_SIZ];\r
+  static int first = 1;\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
+  if(icsHandle) { // [HGM] clickbox set handle in advance\r
     safeStrCpy(chatPartner[partner], icsHandle,\r
               sizeof(chatPartner[partner])/sizeof(chatPartner[partner][0]) );\r
-  else chatPartner[partner][0] = NULLCHAR;\r
+    if(sscanf(icsHandle, "%d", &i) == 1) { // make sure channel is on\r
+       snprintf(buf, MSG_SIZ, "addlist ch %d\n", i);\r
+       SendToICS(buf);\r
+       if(first) first=0, SendToICS(buf); // work-around for weirdness: On public FICS code first attempt on login is completely ignored\r
+    }\r
+  } else chatPartner[partner][0] = NULLCHAR;\r
   chatCount++;\r
 \r
     lpProc = MakeProcInstance( (FARPROC) ChatProc, hInst );\r