Call DoEvents during time-consuming operations
authorH.G.Muller <hgm@hgm-xboard.(none)>
Sun, 7 Sep 2014 11:43:48 +0000 (13:43 +0200)
committerH.G.Muller <hgm@hgm-xboard.(none)>
Sun, 7 Sep 2014 11:43:48 +0000 (13:43 +0200)
Processing of a game file for reading it, searching positions, saving
selected games or creating a book from them can take minutes. To keep
the application responsive during that time, the main loops of those
tasks calls DoEvents(). A possible risk is that the user can now do
too much, and will initiate actions that interfere with the tast in
progress.

backend.c
gamelist.c
ngamelist.c
winboard/wgamelist.c

index 948081f..36eca33 100644 (file)
--- a/backend.c
+++ b/backend.c
@@ -15851,7 +15851,7 @@ SaveSelected (FILE *g, int dummy, char *dummy2)
        if(lg->position >= 0) { // selected?
            LoadGame(f, nItem, "", TRUE);
            SaveGamePGN2(g); // leaves g open
-           cnt++;
+           cnt++; DoEvents();
        }
         lg = (ListGame *) lg->node.succ;
     }
@@ -15890,6 +15890,7 @@ CreateBookEvent ()
        if(lg->position >= 0) {
            LoadGame(f, nItem, "", TRUE);
            AddGameToBook(TRUE);
+           DoEvents();
        }
         lg = (ListGame *) lg->node.succ;
     }
index 62b4e83..2055e96 100644 (file)
@@ -373,7 +373,7 @@ GameListBuild (FILE *f)
        }
        if(gameNumber % 1000 == 0) {
            snprintf(buf, MSG_SIZ, _("Reading game file (%d)"), gameNumber);
-           DisplayTitle(buf);
+           DisplayTitle(buf); DoEvents();
        }
     }
     while (cm != (ChessMove) 0);
index 43de988..b415d19 100644 (file)
@@ -190,7 +190,7 @@ GameListPrepare (int byPos, int narrow)
        if(lg->number % 2000 == 0) {
            char buf[MSG_SIZ];
            snprintf(buf, MSG_SIZ, _("Scanning through games (%d)"), lg->number);
-           DisplayTitle(buf);
+           DisplayTitle(buf); DoEvents();
        }
        lg->position = pos;
        lg = (ListGame *) lg->node.succ;
index 196c837..feda2ca 100644 (file)
@@ -95,7 +95,7 @@ static int GameListToListBox( HWND hDlg, BOOL boReset, char * pszFilter, struct
 \r
         if(nItem % 2000 == 0) {\r
           snprintf(buf, MSG_SIZ, _("Scanning through games (%d)"), nItem);\r
-          SetWindowText(hwndMain, buf);\r
+          SetWindowText(hwndMain, buf); DoEvents();\r
         }\r
 \r
       if(!narrow || lg->position >= 0) {\r