Adjust window height after clock-font change
authorH.G.Muller <hgm@hgm-xboard.(none)>
Tue, 5 Apr 2016 12:32:54 +0000 (14:32 +0200)
committerH.G.Muller <hgm@hgm-xboard.(none)>
Sun, 17 Apr 2016 08:24:57 +0000 (10:24 +0200)
A routine LockBoardSize are added, and called to protect the board's
Graph widget from absorbing the height change pf clock and message field.
Enlarging these now forces the top-level window to expand, and after the
change we try to reduce this window size to tightly fit the board to
squeeze out empty area after shrinking.

dialogs.c
dialogs.h
gtk/xboard.c
xaw/xoptions.c

index 306bc97..2cdf6a9 100644 (file)
--- a/dialogs.c
+++ b/dialogs.c
@@ -1629,9 +1629,12 @@ FontsOK (int n)
 {
     extern Option historyOptions[], engoutOptions[], gamesOptions[], chatOptions[];
     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);
@@ -1640,7 +1643,7 @@ FontsOK (int n)
     ApplyFont(&chatOptions[11], appData.icsFont);
     AppendColorized(&chatOptions[6], NULL, 0); // kludge to replace font tag
     DrawPosition(TRUE, NULL); // for coord font
-    return 1;
+    return 0; // suppress normal popdown because already done
 }
 
 static Option fontOptions[] = {
index 28f7abb..0d933d9 100644 (file)
--- a/dialogs.h
+++ b/dialogs.h
@@ -205,6 +205,7 @@ void DisplayHelp P((char *name));
 void WidgetEcho P((Option *opt, int n));
 int  ErrorOK P((int n));
 void ApplyFont P((Option *opt, char *font));
+void LockBoardSize P((int after));
 
 
 // in ngamelist.c
index 8dc5253..03f2f9a 100644 (file)
@@ -2057,6 +2057,25 @@ DisplayIcsInteractionTitle (String message)
 #endif
 }
 
+void
+LockBoardSize (int after)
+{
+    static char *oldClockFont, *oldMessgFont;
+    int w, h;
+    if(oldMessgFont && !strcmp(oldMessgFont, appData.font) &&
+       oldClockFont && !strcmp(oldClockFont, appData.clockFont) ) return; // only do something when font changed
+    w = BOARD_WIDTH*(squareSize + lineGap) + lineGap;
+    h = BOARD_HEIGHT*(squareSize + lineGap) + lineGap;
+    if(after) {
+       ASSIGN(oldClockFont, appData.clockFont);
+       ASSIGN(oldMessgFont, appData.font);
+       gtk_window_resize(GTK_WINDOW(shellWidget), w, h);
+       DoEvents();
+       gtk_widget_set_size_request(optList[W_BOARD].handle, -1, -1); // liberate board
+    } else { // before
+       gtk_widget_set_size_request(optList[W_BOARD].handle, w, h);   // protect board widget
+    }
+}
 
 void
 DisplayTimerLabel (Option *opt, char *color, long timer, int highlight)
index 5feb56a..1c0a897 100644 (file)
@@ -1446,3 +1446,8 @@ FileNamePopUpWrapper (char *label, char *def, char *filter, FileProc proc, Boole
 {
     Browse(BoardWindow, label, (def[0] ? def : NULL), filter, False, openMode, openName, openFP);
 }
+
+void
+LockBoardSize (int after)
+{
+}