# define IMG ".png"
// redefine some defaults
# undef ICS_LOGON
-# undef DATADIR
# undef LOCALEDIR
# undef SETTINGS_FILE
# define ICS_LOGON "Library/Preferences/XboardICS.conf"
-# define DATADIR dataDir
# define LOCALEDIR localeDir
# define SETTINGS_FILE masterSettings
# define SYNC_MENUBAR gtkosx_application_sync_menubar(theApp)
- char dataDir[MSG_SIZ]; // for expanding ~~
char localeDir[MSG_SIZ];
char masterSettings[MSG_SIZ];
#else
typedef unsigned int BoardSize;
BoardSize boardSize;
Boolean chessProgram;
+static int initialSquareSize;
int minX, minY; // [HGM] placement: volatile limits on upper-left corner
int smallLayout = 0, tinyLayout = 0,
return;
}
for(i=0; i<NUM_SIZES; i++) // [HGM] font: current font becomes standard for current size
- if(sizeDefaults[i].squareSize == squareSize) { // only for standard sizes!
- fontTable[n][squareSize] = strdup(name);
- fontValid[n][squareSize] = True;
+ if(sizeDefaults[i].squareSize == initialSquareSize) { // only for standard sizes!
+ fontTable[n][initialSquareSize] = strdup(name);
+ fontValid[n][initialSquareSize] = True;
break;
}
for(i=0; i<MAX_SIZE; i++) if(fontValid[n][i]) // [HGM] font: store all standard fonts
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
}
theApp = g_object_new(GTKOSX_TYPE_APPLICATION, NULL);
snprintf(masterSettings, MSG_SIZ, "%s/Contents/Resources/etc/xboard.conf", path);
snprintf(dataDir, MSG_SIZ, "%s/Contents/Resources/share/xboard", path);
+ snprintf(manDir, MSG_SIZ, "%s/Contents/Resources/share/man", path);
snprintf(svgDir, MSG_SIZ, "%s/themes/default", dataDir);
g_signal_connect(theApp, "NSApplicationOpenFile", G_CALLBACK(StartNewXBoard), NULL);
g_signal_connect(theApp, "NSApplicationWillTerminate", G_CALLBACK(ExitEvent), NULL);
if(argc > 1 && !strcmp(argv[1], "--show-config")) { // [HGM] install: called to print config info
typedef struct {char *name, *value; } Config;
static Config configList[] = {
- { "Datadir", DATADIR },
+ { "Datadir", dataDir },
+ { "Mandir", manDir },
{ "Sysconfdir", SYSCONFDIR },
{ NULL }
};
{ // [HGM] initstring: kludge to fix bad bug. expand '\n' characters in init string and computer string.
static char buf[MSG_SIZ];
- snprintf(buf, MSG_SIZ, appData.sysOpen, DATADIR);
+ snprintf(buf, MSG_SIZ, appData.sysOpen, dataDir);
ASSIGN(appData.sysOpen, buf); // expand %s in -openCommand to DATADIR (usefull for OS X configuring)
EscapeExpand(buf, appData.firstInitString);
appData.firstInitString = strdup(buf);
tinyLayout = szd->tinyLayout;
// [HGM] font: use defaults from settings file if available and not overruled
}
+ initialSquareSize = squareSize; // [HGM] remember for saving font info
if(BOARD_WIDTH != 8) {
squareSize = (squareSize*8 + BOARD_WIDTH/2)/BOARD_WIDTH; // keep width the same
lineGap = (squareSize < 37 ? 1 : squareSize < 59 ? 2 : squareSize < 116 ? 3 : 4);
boardWidget = optList[W_BOARD].handle;
menuBarWidget = optList[W_MENU].handle;
dropMenu = optList[W_DROP].handle;
- titleWidget = optList[optList[W_TITLE].type != -1 ? W_TITLE : W_SMALL].handle;
+ titleWidget = optList[optList[W_TITLE].type != Skip ? W_TITLE : W_SMALL].handle;
#ifdef TODO_GTK
formWidget = XtParent(boardWidget);
XtSetArg(args[0], XtNbackground, &timerBackgroundPixel);
ReSize (WindowPlacement *wp)
{
GtkAllocation a;
- int sqx, sqy, w, h, lg = lineGap;
+ int sqx, sqy, i, 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;
lg = sqx < 37 ? 1 : sqx < 59 ? 2 : sqx < 116 ? 3 : 4;
if(sqx == oldSqx + 1 && lg == lineGap + 1) sqx = oldSqx, squareSize = 0; // prevent oscillations, force resize by kludge
}
+ for(h=0; sizeDefaults[h].name && sizeDefaults[h].squareSize*8 > sqx*BOARD_WIDTH; h++) {}
+ if(initialSquareSize != sizeDefaults[h].squareSize) { // boardSize changed
+ initialSquareSize = sizeDefaults[h].squareSize; // used for saving font
+ if(!fontValid[CLOCK_FONT][initialSquareSize]) { ASSIGN(fontTable[CLOCK_FONT][initialSquareSize], CLOCK_FONT_NAME); }
+ appData.clockFont = InsertPxlSize(fontTable[CLOCK_FONT][initialSquareSize], 2*(sizeDefaults[h].clockFontPxlSize+1)/3);
+ if(!fontValid[MESSAGE_FONT][initialSquareSize]) { ASSIGN(fontTable[MESSAGE_FONT][initialSquareSize], DEFAULT_FONT_NAME); }
+ appData.font = InsertPxlSize(fontTable[MESSAGE_FONT][initialSquareSize], sizeDefaults[h].coordFontPxlSize);
+ DisplayBothClocks();
+ ApplyFont(&mainOptions[W_MESSG], NULL);
+ for(i=1; i<6; i++) ApplyFont(&mainOptions[W_BUTTON+i], NULL);
+ }
+ if(!strchr(appData.boardSize, ',')) {
+ ASSIGN(appData.boardSize, sizeDefaults[h].name);
+ }
+#ifndef OSXAPP
+ if(sizeDefaults[h].tinyLayout != tinyLayout) { // alter clipping of menu names to conform to board width
+ int clip = (tinyLayout = sizeDefaults[h].tinyLayout) + 1;
+ char text[MSG_SIZ];
+ for(h=1; mainOptions[h].type == DropDown; h++) {
+ strncpy(text, _(mainOptions[h].name), MSG_SIZ);
+ if(clip != 1) text[clip + (text[clip-1] == '_')] = NULLCHAR;
+ gtk_menu_item_set_label((GtkMenuItem *) mainOptions[h].handle, text);
+ }
+ }
+#endif
if(sqx != squareSize && !first) {
squareSize = sqx; // adopt new square size
CreatePNGPieces(); // make newly scaled pieces
if(optList[W_BOARD].max > w) optList[W_BOARD].max = w;
if(optList[W_BOARD].value > h) optList[W_BOARD].value = h;
first = appData.fixedSize;
+ if(twoBoards && shellUp[DummyDlg]) {
+ SlavePopUp(); dualOptions[3].max = 0; DoEvents(); // calls SlaveResize, kludge to force assigning new canvas
+ partnerUp = !partnerUp; flipView = !flipView;
+ DrawPosition(True, NULL);
+ partnerUp = !partnerUp; flipView = !flipView;
+ }
}
static guint delayedDragTag = 0;
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
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;
}
#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)
return;
}
-void FileNamePopUpWrapper(label, def, filter, proc, pathFlag, openMode, name, fp)
- char *label;
- char *def;
- char *filter;
- FileProc proc;
- char *openMode;
- Boolean pathFlag;
- char **name;
- FILE **fp;
+void FileNamePopUpWrapper(
+ char *label,
+ char *def,
+ char *filter,
+ FileProc proc,
+ Boolean pathFlag,
+ char *openMode,
+ char **name,
+ FILE **fp)
{
GtkWidget *dialog;
GtkFileFilter *gtkfilter;