X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=gtk%2Fxboard.c;h=aa723b7ecd6dd6f2c7cb9f28f13279ae63bb5276;hb=ffbffd34385e086b2b14e43b3fb43ada4a91c188;hp=62de768dc638ca6ef26f7b0b3db68149a1f5e4bb;hpb=677d32ecebe49075a6889451de4e24c4c5947e44;p=xboard.git diff --git a/gtk/xboard.c b/gtk/xboard.c index 62de768..aa723b7 100644 --- a/gtk/xboard.c +++ b/gtk/xboard.c @@ -175,18 +175,12 @@ extern char *getenv(); # define IMG ".png" // redefine some defaults # undef ICS_LOGON -# undef DATADIR -# undef MANDIR # undef LOCALEDIR # undef SETTINGS_FILE # define ICS_LOGON "Library/Preferences/XboardICS.conf" -# define DATADIR dataDir -# define MANDIR manDir # define LOCALEDIR localeDir # define SETTINGS_FILE masterSettings # define SYNC_MENUBAR gtkosx_application_sync_menubar(theApp) - char dataDir[MSG_SIZ]; // for expanding ~~ - char manDir[MSG_SIZ]; char localeDir[MSG_SIZ]; char masterSettings[MSG_SIZ]; #else @@ -262,6 +256,7 @@ GtkAccelGroup *GtkAccelerators; 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, @@ -522,9 +517,9 @@ SaveFontArg (FILE *f, ArgDescriptor *ad) return; } for(i=0; i 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 } }; @@ -964,7 +960,7 @@ main (int argc, char **argv) { // [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); @@ -1078,6 +1074,7 @@ main (int argc, char **argv) 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); @@ -1667,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; @@ -1702,6 +1700,17 @@ ReSize (WindowPlacement *wp) 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; + } + 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; @@ -1710,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 @@ -1751,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; } @@ -2054,6 +2066,25 @@ DisplayIcsInteractionTitle (String message) #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) @@ -2326,15 +2357,15 @@ UpdateLogos (int displ) 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;