Only adjust fonts that are actually changed
authorH.G.Muller <hgm@hgm-xboard.(none)>
Wed, 6 Apr 2016 09:56:36 +0000 (11:56 +0200)
committerH.G.Muller <hgm@hgm-xboard.(none)>
Sun, 17 Apr 2016 08:24:58 +0000 (10:24 +0200)
OK-ing the Fonts dialog now checks which fonts have been changed,
and only applies those to the widgets that use them. In addition it
sets a flag to indicate that the changed font no longer is a default.
 A bug that did not apply the gameListFont for preview is now also
fixed.

dialogs.c

index 2cdf6a9..38f163c 100644 (file)
--- a/dialogs.c
+++ b/dialogs.c
@@ -1624,6 +1624,9 @@ ShuffleMenuProc ()
 
 static void AdjustFont P((int n));
 
+static char *oldFont[7];
+char fontChanged[8];
+
 static int
 FontsOK (int n)
 {
@@ -1631,17 +1634,27 @@ FontsOK (int n)
     int i;
     PopDown(TransientDlg); // Early popdown to prevent expose events frommasking each other
     LockBoardSize(0);
-    DisplayBothClocks();
-    ApplyFont(&mainOptions[W_MESSG], NULL);
-    for(i=1; i<6; i++) ApplyFont(&mainOptions[W_BUTTON+i], NULL);
-    LockBoardSize(1);
-    ApplyFont(&tagsOptions[1], NULL);
-    ApplyFont(&historyOptions[0], NULL);
-    ApplyFont(&engoutOptions[5], NULL);
-    ApplyFont(&engoutOptions[12], NULL);
-    ApplyFont(&gamesOptions[0], NULL);
-    ApplyFont(&chatOptions[11], appData.icsFont);
-    AppendColorized(&chatOptions[6], NULL, 0); // kludge to replace font tag
+    if(strcmp(oldFont[0], appData.clockFont)) fontChanged[CLOCK_FONT] = 1, DisplayBothClocks();
+    if(strcmp(oldFont[1], appData.font)) {
+       fontChanged[MESSAGE_FONT] = 1;
+       ApplyFont(&mainOptions[W_MESSG], NULL);
+       for(i=1; i<6; i++) ApplyFont(&mainOptions[W_BUTTON+i], NULL);
+    }
+    LockBoardSize(1); // unlock
+    if(strcmp(oldFont[3], appData.tagsFont)) fontChanged[EDITTAGS_FONT] = 1, ApplyFont(&tagsOptions[1], NULL);
+    if(strcmp(oldFont[4], appData.commentFont)) fontChanged[COMMENT_FONT] = 1, ApplyFont(&commentOptions[1], NULL);
+    if(strcmp(oldFont[5], appData.historyFont)) {
+       fontChanged[MOVEHISTORY_FONT] = 1;
+       ApplyFont(&historyOptions[0], NULL);
+       ApplyFont(&engoutOptions[5], NULL);
+       ApplyFont(&engoutOptions[12], NULL);
+    }
+    if(strcmp(oldFont[6], appData.gameListFont)) fontChanged[GAMELIST_FONT] = 1, ApplyFont(&gamesOptions[0], NULL);
+    if(strcmp(oldFont[2], appData.icsFont)) {
+       fontChanged[CONSOLE_FONT] = 1;
+       ApplyFont(&chatOptions[11], appData.icsFont);
+       AppendColorized(&chatOptions[6], NULL, 0); // kludge to replace font tag
+    }
     DrawPosition(TRUE, NULL); // for coord font
     return 0; // suppress normal popdown because already done
 }
@@ -1745,7 +1758,10 @@ FontsProc ()
     int i;
     if(strstr(appData.font, "-*-")) { DisplayNote(_("This only works in the GTK build")); return; }
     GenericPopUp(fontOptions, _("Fonts"), TransientDlg, BoardWindow, MODAL, 0);
-    for(i=0; i<6; i++) ApplyFont(&fontOptions[6*i], *(char**)fontOptions[6*i].target);
+    for(i=0; i<7; i++) {
+       ApplyFont(&fontOptions[6*i], *(char**)fontOptions[6*i].target);
+       ASSIGN(oldFont[i], *(char**)fontOptions[6*i].target);
+    }
 }
 
 //------------------------------------------------------ Time Control -----------------------------------