* Massachusetts.
*
* Enhancements Copyright 1992-2001, 2002, 2003, 2004, 2005, 2006,
- * 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015 Free Software Foundation, Inc.
+ * 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 Free
+ * Software Foundation, Inc.
*
* The following terms apply to Digital Equipment Corporation's copyright
* interest in XBoard:
#include <pwd.h>
#include <math.h>
#include <cairo/cairo.h>
-#include <cairo/cairo-xlib.h>
#include <gtk/gtk.h>
#if !OMIT_SOCKETS
#include "draw.h"
#ifdef OSXAPP
-# include <gtkmacintegration-gtk2/gtkosxapplication.h>
+# include <gtkmacintegration/gtkosxapplication.h>
// prevent pathname of positional file argument provided by OS X being be mistaken for option name
// (price is that we won't recognize Windows option format anymore).
# define SLASH '-'
# 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
RETSIGTYPE IntSigHandler P((int sig));
RETSIGTYPE TermSizeSigHandler P((int sig));
char *InsertPxlSize P((char *pattern, int targetPxlSize));
+#ifdef TODO_GTK
#if ENABLE_NLS
XFontSet CreateFontSet P((char *base_fnt_lst));
#else
char *FindFont P((char *pattern, int targetPxlSize));
#endif
+#endif
void DelayedDrag P((void));
void ICSInputBoxPopUp P((void));
void MoveTypeInProc P((GdkEventKey *eventkey));
#ifdef OSXAPP
static char clickedFile[MSG_SIZ];
-static int suppress;
+TimeMark started;
static gboolean
StartNewXBoard(GtkosxApplication *app, gchar *path, gpointer user_data)
{ // handler of OSX OpenFile signal, which sends us the filename of clicked file or first argument
- if(suppress) { // we just started XBoard without arguments
- strncpy(clickedFile, path, MSG_SIZ); // remember file name, but otherwise ignore
- } else { // we are running something presumably useful
- char buf[MSG_SIZ];
- snprintf(buf, MSG_SIZ, "open -n -a \"xboard\" --args \"%s\"", path);
- system(buf); // start new instance on this file
- }
- return TRUE;
+ TimeMark now;
+ GetTimeMark(&now);
+ if(1000*now.sec + now.ms - 1000*started.sec - started.ms < 1000) { // received during first second
+ strncpy(clickedFile, path, MSG_SIZ); // remember file name, but otherwise ignore
+ } else { // we are running something presumably useful
+ char buf[MSG_SIZ];
+ snprintf(buf, MSG_SIZ, "open -n -a \"xboard\" --args \"%s\"", path);
+ system(buf); // start new instance on this file
+ }
+ return TRUE;
}
GtkosxApplication *theApp;
gtk_init (&argc, &argv);
#ifdef OSXAPP
{ // prepare to catch OX OpenFile signal, which will tell us the clicked file
- char *path = gtkosx_application_get_bundle_path();
+ char *path = gtkosx_application_get_bundle_path();
#ifdef ENABLE_NLS
- char *res_path = gtkosx_application_get_resource_path();
- snprintf(localeDir, MSG_SIZ, "%s/share/locale", res_path); // redefine locale dir for OSX bundle
+ char *res_path = gtkosx_application_get_resource_path();
+ snprintf(localeDir, MSG_SIZ, "%s/share/locale", res_path); // redefine locale dir for OSX bundle
#endif
- 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(svgDir, MSG_SIZ, "%s/themes/default", dataDir);
- suppress = (argc == 1 || argc > 1 && argv[1][00] != '-'); // OSX sends signal even if name was already argv[1]!
- g_signal_connect(theApp, "NSApplicationOpenFile", G_CALLBACK(StartNewXBoard), NULL);
- g_signal_connect(theApp, "NSApplicationWillTerminate", G_CALLBACK(ExitEvent), NULL);
- // we must call application ready before we can get the signal,
- // and supply a (dummy) menu bar before that, to avoid problems with dual apples in it
- gtkosx_application_set_menu_bar(theApp, GTK_MENU_SHELL(gtk_menu_bar_new()));
- gtkosx_application_ready(theApp);
- if(argc == 1) { // called without args: OSX open-file signal might follow
- static char *fakeArgv[3] = {NULL, clickedFile, NULL};
- usleep(10000); // wait 10 msec (and hope this is long enough).
- while(gtk_events_pending())
- gtk_main_iteration(); // process all events that came in upto now
- suppress = 0; // future open-file signals should start new instance
- if(clickedFile[0]) { // we were sent an open-file signal with filename!
- fakeArgv[0] = argv[0];
- argc = 2; argv = fakeArgv; // fake that we were called as "xboard filename"
- }
- }
+ GetTimeMark(&started); // remember start time
+ 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);
+ // we must call application ready before we can get the signal,
+ // and supply a (dummy) menu bar before that, to avoid problems with dual apples in it
+ gtkosx_application_set_menu_bar(theApp, GTK_MENU_SHELL(gtk_menu_bar_new()));
+ gtkosx_application_ready(theApp);
+ if(argc == 1) { // called without args: OSX open-file signal might follow
+ static char *fakeArgv[3] = {NULL, clickedFile, NULL};
+ usleep(10000); // wait 10 msec (and hope this is long enough).
+ while(gtk_events_pending())
+ gtk_main_iteration(); // process all events that came in upto now
+ if(clickedFile[0]) { // we were sent an open-file signal with filename!
+ fakeArgv[0] = argv[0];
+ argc = 2; argv = fakeArgv; // fake that we were called as "xboard filename"
+ }
+ }
}
#endif
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);
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);
-printf("squareSize=%d lineGap=%d\n",squareSize,lineGap);
}
defaultLineGap = lineGap;
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);
{
gchar *text=NULL;
GtkClipboard *cb;
- guint len=0;
+ guint len=0; int flip = appData.flipView;
FILE* f;
// get game from clipboard
fclose(f);
// load from file
+ if(!appData.autoFlipView) appData.flipView = flipView;
LoadGameFromFile(gamePasteFilename, 0, gamePasteFilename, TRUE);
+ appData.flipView = flip;
return;
}