WindowPlacement wpEngineOutput;
WindowPlacement wpGameList;
WindowPlacement wpTags;
+WindowPlacement wpDualBoard;
/* This magic number is the number of intermediate frames used
in each half of the animation. For short moves it's reduced
//--------------------------------------------------------------------------------------------
+int clockKludge;
+
void
ResizeBoardWindow (int w, int h, int inhibit)
{
+ GtkAllocation a;
+ if(clockKludge) return; // ignore as long as clock does not have final height
+ gtk_widget_get_allocation(optList[W_WHITE].handle, &a);
w += marginW + 1; // [HGM] not sure why the +1 is (sometimes) needed...
- h += marginH;
+ h += marginH + a.height + 1;
gtk_window_resize(GTK_WINDOW(shellWidget), w, h);
}
case ArgString: p = " STR"; break;
case ArgBoolean: p = " TF"; break;
case ArgSettingsFilename:
+ case ArgBackupSettingsFile:
case ArgFilename: p = " FILE"; break;
case ArgX: p = " Nx"; break;
case ArgY: p = " Ny"; break;
if(len) buf[len] = NULLCHAR, printf("%s\n", buf);
}
+void
+SlaveResize (Option *opt)
+{
+ static int slaveW, slaveH, w, h;
+ GtkAllocation a;
+ if(!slaveH) {
+ gtk_widget_get_allocation(shells[DummyDlg], &a);
+ w = a.width; h = a.height;
+ gtk_widget_get_allocation(opt->handle, &a);
+ slaveW = w - opt->max; // [HGM] needed to set new shellWidget size when we resize board
+ slaveH = h - a.height + 13;
+ }
+ gtk_window_resize(GTK_WINDOW(shells[DummyDlg]), slaveW + opt->max, slaveH + opt->value);
+}
+
int
main (int argc, char **argv)
{
// }
bindtextdomain(PACKAGE, LOCALEDIR);
+ bind_textdomain_codeset(PACKAGE, "UTF-8"); // needed when creating markup for the clocks
textdomain(PACKAGE);
#endif
layoutName = "normalLayout";
}
+ wpMain.width = -1; // prevent popup sizes window
optList = BoardPopUp(squareSize, lineGap, (void*)
#ifdef TODO_GTK
#if ENABLE_NLS
// XtSetValues(shellWidget, &shellArgs[2], 4);
#endif
{
+ // Note: We cannot do sensible sizing here, because the height of the clock widget is not yet known
+ // It wil only become known asynchronously, when we first write a string into it.
+ // This will then change the clock widget height, which triggers resizing the top-level window
+ // and a configure event. Only then can we know the total height of the top-level window,
+ // and calculate the height we need. The clockKludge flag suppresses all resizing until
+ // that moment comes, after which the configure event-handler handles it through a (delayed) DragProg.
+ int hc;
GtkAllocation a;
gtk_widget_get_allocation(shells[BoardWindow], &a);
w = a.width; h = a.height;
-//printf("start size (%d,%d), %dx%d\n", a.x, a.y, w, h);
+ gtk_widget_get_allocation(optList[W_WHITE].handle, &a);
+ clockKludge = hc = a.height;
gtk_widget_get_allocation(boardWidget, &a);
marginW = w - boardWidth; // [HGM] needed to set new shellWidget size when we resize board
- marginH = h - a.height - 25; // subtract 25, because GTK seems to insert this amount of extra empty space
- gtk_window_resize(GTK_WINDOW(shellWidget), marginW + boardWidth, marginH + boardHeight);
-//printf("margins h=%d v=%d\n", marginW, marginH);
+ marginH = h - a.height - hc; // subtract current clock height, so it can be added back dynamically
}
CreateAnyPieces();
safeStrCpy(p, best, strlen(best)+1 );
}
if (appData.debugMode) {
- fprintf(debugFP, _("resolved %s at pixel size %d\n to %s\n"),
+ fprintf(debugFP, "resolved %s at pixel size %d\n to %s\n",
pattern, targetPxlSize, p);
}
XFreeFontNames(fonts);
void
ReSize (WindowPlacement *wp)
{
- int sqx, sqy, w, h, lg = lineGap;
+ GtkAllocation a;
+ int sqx, sqy, w, h, hc, lg = lineGap;
+ gtk_widget_get_allocation(optList[W_WHITE].handle, &a);
+ hc = a.height; // clock height can depend on single / double line clock text!
+ if(clockKludge == a.height) return; // wait for clock to get final size at startup
+ if(clockKludge) { // clock height OK now; calculate desired initial board height
+ clockKludge = 0;
+ wp->height = BOARD_HEIGHT * (squareSize + lineGap) + lineGap + marginH + hc;
+ }
if(wp->width == wpMain.width && wp->height == wpMain.height) return; // not sized
sqx = (wp->width - lg - marginW) / BOARD_WIDTH - lg;
- sqy = (wp->height - lg - marginH) / BOARD_HEIGHT - lg;
+ sqy = (wp->height - lg - marginH - hc) / BOARD_HEIGHT - lg;
if(sqy < sqx) sqx = sqy;
if(appData.overrideLineGap < 0) { // do second iteration with adjusted lineGap
lg = lineGap = sqx < 37 ? 1 : sqx < 59 ? 2 : sqx < 116 ? 3 : 4;
sqx = (wp->width - lg - marginW) / BOARD_WIDTH - lg;
- sqy = (wp->height - lg - marginH) / BOARD_HEIGHT - lg;
+ sqy = (wp->height - lg - marginH - hc) / BOARD_HEIGHT - lg;
if(sqy < sqx) sqx = sqy;
}
if(sqx != squareSize) {
busy = 1;
// GetActualPlacement(shellWidget, &wpNew);
-//printf("drag proc (%d,%d) %dx%d\n", wpNew.x, wpNew.y, wpNew.width, wpNew.height);
if(wpNew.x == wpMain.x && wpNew.y == wpMain.y && // not moved
wpNew.width == wpMain.width && wpNew.height == wpMain.height) { // not sized
busy = 0; return; // false alarm
buf[0]=eventkey->keyval;
buf[1]='\0';
- if (*buf >= 32)
+ if (eventkey->keyval > 32 && eventkey->keyval < 256)
BoxAutoPopUp (buf);
}