bugfix: User close analysis windows while active ics analyze + message shows action
[xboard.git] / winboard / winboard.c
index 89051aa..55a5b00 100644 (file)
@@ -3650,7 +3650,8 @@ WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
                        DisplayError(buf, 0);
                        /* secure check */
                        if (appData.icsEngineAnalyze) {
-                               appData.icsEngineAnalyze = FALSE;
+                               if (appData.debugMode) 
+                                       fprintf(debugFP, "Found unexpected active ICS engine analyze \n");
                                ExitAnalyzeMode();
                                ModeHighlight();
                                break;
@@ -3659,12 +3660,12 @@ WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
                } else {
                        /* if enable, user want disable icsEngineAnalyze */
                        if (appData.icsEngineAnalyze) {
-                               appData.icsEngineAnalyze = FALSE;
                                ExitAnalyzeMode();
                                ModeHighlight();
                                break;
                        }
                        appData.icsEngineAnalyze = TRUE;
+                       if (appData.debugMode) fprintf(debugFP, "ICS engine analyze starting...\n");
                }
        } 
        if (!appData.showThinking) ToggleShowThinking();
@@ -6243,13 +6244,16 @@ ModeHighlight()
   }
 
   prevChecked = nowChecked;
+
   /* icsEngineAnalyze - Do a sceure check too */
-  if (appData.icsEngineAnalyze) {
-       (void) CheckMenuItem(GetMenu(hwndMain), IDM_AnalysisMode,
-               MF_BYCOMMAND|MF_CHECKED);
-  } else {
-       (void) CheckMenuItem(GetMenu(hwndMain), IDM_AnalysisMode,
-               MF_BYCOMMAND|MF_UNCHECKED);
+  if (appData.icsActive) {
+       if (appData.icsEngineAnalyze) {
+               (void) CheckMenuItem(GetMenu(hwndMain), IDM_AnalysisMode,
+                       MF_BYCOMMAND|MF_CHECKED);
+       } else {
+               (void) CheckMenuItem(GetMenu(hwndMain), IDM_AnalysisMode,
+                       MF_BYCOMMAND|MF_UNCHECKED);
+       }
   }
 }
 
@@ -7608,6 +7612,12 @@ AnalysisDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
   case WM_COMMAND: /* message: received a command */
     switch (LOWORD(wParam)) {
     case IDCANCEL:
+          /* icsEngineAnalyze */
+          if (appData.icsActive && appData.icsEngineAnalyze) {
+                  ExitAnalyzeMode();
+                  ModeHighlight();
+                  return TRUE;
+          }
       EditGameEvent();
       return TRUE;
     default: