Add persistent Boolean option -fixedSize
authorH.G.Muller <hgm@hgm-xboard.(none)>
Thu, 23 Oct 2014 21:33:18 +0000 (23:33 +0200)
committerArun Persaud <arun@nubati.net>
Fri, 24 Oct 2014 07:01:22 +0000 (00:01 -0700)
When set, this option suppresses sizing of the board and clocks when
the window is sized by the user. This is achieved by wrapping the entire
dialog in a non-expanding hbox.

args.h
common.h
dialogs.c
gtk/xboard.c
gtk/xoptions.c

diff --git a/args.h b/args.h
index 304278f..270866d 100644 (file)
--- a/args.h
+++ b/args.h
@@ -610,6 +610,7 @@ ArgDescriptor argDescriptors[] = {
   { "finger", ArgFilename, (void *) &appData.finger, FALSE, (ArgIniType) "" },
   { "inscriptions", ArgString, (void *) &appData.inscriptions, XBOARD, (ArgIniType) "" },
   { "autoInstall", ArgString, (void *) &appData.autoInstall, XBOARD, (ArgIniType) "" },
+  { "fixedSize", ArgBoolean, (void *) &appData.fixedSize, TRUE, (ArgIniType) FALSE },
 
   // [HGM] tournament options
   { "tourneyFile", ArgFilename, (void *) &appData.tourneyFile, FALSE, (ArgIniType) "" },
index 9f54f47..2b0ddf0 100644 (file)
--- a/common.h
+++ b/common.h
@@ -756,6 +756,7 @@ typedef struct {
     char *logo[ENGINES];/* [HGM] logo      */
     char *pairingEngine;/* [HGM] pairing   */
     Boolean autoLogo;
+    Boolean fixedSize;
     Boolean noGUI;      /* [HGM] fast: suppress all display updates */
     char *engOptions[ENGINES]; /* [HGM] options   */
     char *fenOverride[ENGINES];
index 0378c01..2ea3d0a 100644 (file)
--- a/dialogs.c
+++ b/dialogs.c
@@ -2590,13 +2590,14 @@ Option *
 BoardPopUp (int squareSize, int lineGap, void *clockFontThingy)
 {
     int i, size = BOARD_WIDTH*(squareSize + lineGap) + lineGap, logo = appData.logoSize;
+    int f = 2*appData.fixedSize; // width fudge, needed for unknown reasons to not clip board
     mainOptions[W_WHITE].choice = (char**) clockFontThingy;
     mainOptions[W_BLACK].choice = (char**) clockFontThingy;
     mainOptions[W_BOARD].value = BOARD_HEIGHT*(squareSize + lineGap) + lineGap;
     mainOptions[W_BOARD].max = mainOptions[W_SMALL].max = size; // board size
     mainOptions[W_SMALL].max = size - 2; // board title (subtract border!)
     mainOptions[W_BLACK].max = mainOptions[W_WHITE].max = size/2-3; // clock width
-    mainOptions[W_MESSG].max = appData.showButtonBar ? size-135 : size-2; // message
+    mainOptions[W_MESSG].max = appData.showButtonBar ? size-135+f : size-2+f; // message
     mainOptions[W_MENU].max = size-40; // menu bar
     mainOptions[W_TITLE].type = appData.titleInWindow ? Label : Skip ;
     if(logo && logo <= size/4) { // Activate logos
index 8958e3c..a8afcb3 100644 (file)
@@ -1691,7 +1691,7 @@ ReSize (WindowPlacement *wp)
        h = BOARD_HEIGHT * (squareSize + lineGap) + lineGap;
        if(optList[W_BOARD].max   > w) optList[W_BOARD].max = w;
        if(optList[W_BOARD].value > h) optList[W_BOARD].value = h;
-       first = 0;
+       first = appData.fixedSize;
 }
 
 static guint delayedDragTag = 0;
index 31598bd..67675ff 100644 (file)
@@ -1627,6 +1627,11 @@ if(appData.debugMode) printf("n=%d, h=%d, w=%d\n",n,height,width);
     }
 
     gtk_table_resize(GTK_TABLE(table), top+1, r);
+    if(dlgNr == BoardWindow && appData.fixedSize) { // inhibit sizing
+       GtkWidget *h = gtk_hbox_new(FALSE, 0);
+       gtk_box_pack_start (GTK_BOX (h), table, TRUE, FALSE, 2);
+       table = h;
+    }
     if(pane)
        gtk_box_pack_start (GTK_BOX (pane), table, expandable, TRUE, 0);
     else