From ffbffd34385e086b2b14e43b3fb43ada4a91c188 Mon Sep 17 00:00:00 2001 From: H.G.Muller Date: Tue, 5 Apr 2016 16:49:12 +0200 Subject: [PATCH] Make user-adjusted board size quasi-persistent (GTK) 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 | 15 ++++++++++++--- 1 files changed, 12 insertions(+), 3 deletions(-) diff --git a/gtk/xboard.c b/gtk/xboard.c index 03f2f9a..aa723b7 100644 --- a/gtk/xboard.c +++ b/gtk/xboard.c @@ -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_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 } @@ -1664,6 +1664,7 @@ ReSize (WindowPlacement *wp) 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; @@ -1705,6 +1706,11 @@ ReSize (WindowPlacement *wp) 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; @@ -1713,8 +1719,10 @@ void 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 @@ -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; +// 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; } -- 1.7.0.4