Make user-adjusted board size quasi-persistent (GTK)
authorH.G.Muller <hgm@hgm-xboard.(none)>
Tue, 5 Apr 2016 14:49:12 +0000 (16:49 +0200)
committerH.G.Muller <hgm@hgm-xboard.(none)>
Sun, 17 Apr 2016 08:24:57 +0000 (10:24 +0200)
After adjusting the board-window size the newly calculated square size
will be used to derive a new -boardSize for saving in the settings file,
by rounding it down to the nearest standard size. (But the size actually
used for display will not be rounded!) This will cause the board to pop
up with approximately the same size next time. The remembered initial
square size will also be adapted to the rounded value, so that the fonts
will start to apply to the new -boardSize as well on saving settings.
This will only be done if the old -boardSize value did not contain
commas (meaning it specified more than just square size).

gtk/xboard.c

index 03f2f9a..aa723b7 100644 (file)
@@ -653,7 +653,7 @@ ResizeBoardWindow (int w, int h, int inhibit)
     gtk_widget_set_size_request(optList[W_BOARD].handle, w, h);   // protect board widget
 //    w += marginW + 1; // [HGM] not sure why the +1 is (sometimes) needed...
 //    h += marginH + a.height + 1;
     gtk_widget_set_size_request(optList[W_BOARD].handle, w, h);   // protect board widget
 //    w += marginW + 1; // [HGM] not sure why the +1 is (sometimes) needed...
 //    h += marginH + a.height + 1;
-    gtk_window_resize(GTK_WINDOW(shellWidget), w, h);
+    gtk_window_resize(GTK_WINDOW(shellWidget), w, 10);
     DoEvents();
     gtk_widget_set_size_request(optList[W_BOARD].handle, -1, -1); // liberate board again
 }
     DoEvents();
     gtk_widget_set_size_request(optList[W_BOARD].handle, -1, -1); // liberate board again
 }
@@ -1664,6 +1664,7 @@ ReSize (WindowPlacement *wp)
        GtkAllocation a;
        int sqx, sqy, w, h, lg = lineGap;
        static int first = 1;
        GtkAllocation a;
        int sqx, sqy, w, h, lg = lineGap;
        static int first = 1;
+//     DisplayBothClocks();
        if(wp->width == wpMain.width && wp->height == wpMain.height && !first) return; // not sized
        gtk_widget_get_allocation(optList[W_DROP+1].handle, &a); // table that should contain everything
        w = a.width; h = a.height;
        if(wp->width == wpMain.width && wp->height == wpMain.height && !first) return; // not sized
        gtk_widget_get_allocation(optList[W_DROP+1].handle, &a); // table that should contain everything
        w = a.width; h = a.height;
@@ -1705,6 +1706,11 @@ ReSize (WindowPlacement *wp)
            DrawPosition(True, NULL);
            partnerUp = !partnerUp; flipView = !flipView;
        }
            DrawPosition(True, NULL);
            partnerUp = !partnerUp; flipView = !flipView;
        }
+       if(!strchr(appData.boardSize, ',')) {
+           for(h=0; sizeDefaults[h].name && sizeDefaults[h].squareSize > squareSize; h++) {}
+           ASSIGN(appData.boardSize, sizeDefaults[h].name);
+           initialSquareSize = sizeDefaults[h].squareSize; // used for saving font
+       }
 }
 
 static guint delayedDragTag = 0;
 }
 
 static guint delayedDragTag = 0;
@@ -1713,8 +1719,10 @@ void
 DragProc ()
 {
        static int busy;
 DragProc ()
 {
        static int busy;
-       if(busy) return;
-
+       if(busy) { // prevent recursive calling, but postpone interrupting call rather than lose it
+           if(!delayedDragTag) delayedDragTag = g_timeout_add( 200, (GSourceFunc) DragProc, NULL);
+           return;
+       }
        busy = 1;
        GetActualPlacement(shellWidget, &wpNew);
        if(wpNew.x == wpMain.x && wpNew.y == wpMain.y && // not moved
        busy = 1;
        GetActualPlacement(shellWidget, &wpNew);
        if(wpNew.x == wpMain.x && wpNew.y == wpMain.y && // not moved
@@ -1754,6 +1762,7 @@ EventProc (GtkWidget *widget, GdkEvent *event, gpointer g)
     wpNew.y = event->configure.y;
     wpNew.width  = event->configure.width;
     wpNew.height = event->configure.height;
     wpNew.y = event->configure.y;
     wpNew.width  = event->configure.width;
     wpNew.height = event->configure.height;
+//    SetWidgetLabel(&mainOptions[W_WHITE], ""); SetWidgetLabel(&mainOptions[W_BLACK], "");
     DelayedDrag(); // as long as events keep coming in faster than 50 msec, they destroy each other
     return FALSE;
 }
     DelayedDrag(); // as long as events keep coming in faster than 50 msec, they destroy each other
     return FALSE;
 }