Merge branch 'v4.8.x'
authorArun Persaud <arun@nubati.net>
Sat, 5 Mar 2016 21:04:43 +0000 (13:04 -0800)
committerArun Persaud <arun@nubati.net>
Sat, 5 Mar 2016 21:04:43 +0000 (13:04 -0800)
1  2 
Makefile.am
gtk/xboard.c
gtk/xoptions.c

diff --combined Makefile.am
@@@ -145,27 -145,6 +145,27 @@@ dist_svg_DATA = svg/icon_white.sv
             svg/BlackHCrown.svg            svg/WhiteHCrown.svg       \
             svg/BlackDolphin.svg           svg/WhiteDolphin.svg      \
             svg/BlackClaw.svg      svg/WhiteClaw.svg         \
 +           svg/BlackWolf.svg      svg/WhiteWolf.svg         \
 +           svg/BlackCamel.svg     svg/WhiteCamel.svg        \
 +           svg/BlackZebra.svg     svg/WhiteZebra.svg        \
 +           svg/BlackGnu.svg       svg/WhiteGnu.svg          \
 +           svg/BlackWizard.svg            svg/WhiteWizard.svg       \
 +           svg/BlackViking.svg            svg/WhiteViking.svg       \
 +           svg/BlackIron.svg      svg/WhiteIron.svg         \
 +           svg/BlackCopper.svg            svg/WhiteCopper.svg       \
 +           svg/BlackTower.svg     svg/WhiteTower.svg        \
 +           svg/BlackDragon.svg            svg/WhiteDragon.svg       \
 +           svg/BlackCub.svg       svg/WhiteCub.svg          \
 +           svg/BlackButterfly.svg   svg/WhiteButterfly.svg    \
 +           svg/BlackLeft.svg      svg/WhiteLeft.svg         \
 +           svg/BlackRight.svg     svg/WhiteRight.svg        \
 +           svg/BlackHat.svg       svg/WhiteHat.svg          \
 +           svg/BlackRShield.svg           svg/WhiteRShield.svg      \
 +           svg/BlackLShield.svg           svg/WhiteLShield.svg      \
 +           svg/BlackAxe.svg       svg/WhiteAxe.svg          \
 +           svg/BlackFlag.svg      svg/WhiteFlag.svg         \
 +           svg/BlackDuck.svg      svg/WhiteDuck.svg         \
 +           svg/BlackPegasus.svg           svg/WhitePegasus.svg      \
             svg/eo_Analyzing.svg     svg/eo_Black.svg          \
             svg/eo_Clear.svg         svg/eo_Ponder.svg         \
             svg/eo_Thinking.svg      svg/eo_Unknown.svg        \
@@@ -210,7 -189,7 +210,7 @@@ dist_pixmaps_DATA = pixmaps/cross32.pn
  ### directory and files for pngs
  
  pngdir = $(gamedatadir)/themes/textures
- dist_png_DATA = png/hatch.png png/wood_d.png png/wood_l.png png/xqboard.png
+ dist_png_DATA = png/hatch.png png/wood_d.png png/wood_l.png png/xqboard-9x10.png
  
  ### directory and files for sound files
  
@@@ -269,7 -248,6 +269,6 @@@ macportsprefix = $(shell which port | s
        $(MKDIR_P) $(datarootdir)/bin
        $(MKDIR_P) $(datarootdir)/lib
        $(MKDIR_P) $(sysconfdir)/gtk-2.0
-       $(MKDIR_P) $(sysconfdir)/pango
        $(MKDIR_P) $(datadir)/themes
        $(MKDIR_P) $(datadir)/gtk-engines
        $(MKDIR_P) $(gamedatadir)/themes
        $(INSTALL) ./osxapp/launcher_rc $(datarootdir)/
        $(INSTALL) $(macportsprefix)/etc/gtk-2.0/im-multipress.conf $(sysconfdir)/gtk-2.0
        $(INSTALL) ./osxapp/gtkrc $(sysconfdir)/gtk-2.0/gtkrc
-       sed -e '/ModuleFiles = .*\/etc\/pango\/pango.modules/d' <$(macportsprefix)/etc/pango/pangorc >$(sysconfdir)/pango/pangorc
-       sed -e 's?$(macportsprefix)/lib/pango/1.8.0/modules/??' <$(macportsprefix)/etc/pango/pango.modules >$(sysconfdir)/pango/pango.modules
        cp -R $(macportsprefix)/lib/gtk-2.0 $(datarootdir)/lib
        cp -R $(macportsprefix)/lib/gdk-pixbuf-2.0 $(datarootdir)/lib
-       cp -R $(macportsprefix)/lib/pango $(datarootdir)/lib
        cp -R $(macportsprefix)/share/themes/Mac $(datadir)/themes
        cp -R ./osxapp/gtk2-themes/Mac/gtk-2.0 $(datadir)/themes/Mac
        cp -R ./osxapp/themes/default/. $(gamedatadir)/themes/default
        cp $(macportsprefix)/share/gtk-engines/murrine.xml $(datadir)/gtk-engines/murrine.xml
        $(INSTALL) ./png/marble_d.png $(gamedatadir)/themes/textures
        $(INSTALL) ./png/marble_l.png $(gamedatadir)/themes/textures
-       $(INSTALL) ./png/xqwood.png $(gamedatadir)/themes/textures
+       $(INSTALL) ./png/xqwood-9x10.png $(gamedatadir)/themes/textures
        cp -R ./osxapp/logos $(gamedatadir)/
+ if NLS_ENABLED
        cp -R $(macportsprefix)/share/strings/. $(datarootdir)/
        for i in po/*gmo; do lang=`basename $$i .gmo`; $(INSTALL) $(macportsprefix)/share/locale/$$lang/LC_MESSAGES/gtk20.mo $(localedir)/$$lang/LC_MESSAGES/; done
+ endif
        dylibbundler -of -b -x $(bindir)/xboard-bin -d $(datarootdir)/lib -p @executable_path/../Resources/lib
        dylibbundler -of -b -x $(datarootdir)/lib/gdk-pixbuf-2.0/2.10.0/loaders/libpixbufloader-png.so -d $(datarootdir)/lib -p @executable_path/../Resources/lib
        dylibbundler -of -b -x $(datarootdir)/lib/gtk-2.0/2.10.0/immodules/im-quartz.so -d $(datarootdir)/lib -p @executable_path/../Resources/lib
        dylibbundler -of -b -x $(datarootdir)/lib/gtk-2.0/2.10.0/engines/libpixmap.so -d $(datarootdir)/lib -p @executable_path/../Resources/lib
        dylibbundler -of -b -x $(datarootdir)/lib/gtk-2.0/2.10.0/engines/libmurrine.so -d $(datarootdir)/lib -p @executable_path/../Resources/lib
-       dylibbundler -of -b -x $(datarootdir)/lib/pango/1.8.0/modules/pango-arabic-lang.so -d $(datarootdir)/lib -p @executable_path/../Resources/lib
-       dylibbundler -of -b -x $(datarootdir)/lib/pango/1.8.0/modules/pango-basic-coretext.so -d $(datarootdir)/lib -p @executable_path/../Resources/lib
-       dylibbundler -of -b -x $(datarootdir)/lib/pango/1.8.0/modules/pango-basic-fc.so -d $(datarootdir)/lib -p @executable_path/../Resources/lib
-       dylibbundler -of -b -x $(datarootdir)/lib/pango/1.8.0/modules/pango-indic-lang.so -d $(datarootdir)/lib -p @executable_path/../Resources/lib
        find ./XBoard.app -name '*.a' -print0 | xargs -0 rm
-       find ./XBoard.app -name '*.la' -print0 | xargs -0 rm
        rm -r $(datarootdir)/lib/gtk-2.0/include
        rm -r $(datarootdir)/share/applications
        rm $(datarootdir)/share/info/dir
diff --combined gtk/xboard.c
@@@ -62,6 -62,7 +62,6 @@@
  #include <pwd.h>
  #include <math.h>
  #include <cairo/cairo.h>
 -#include <cairo/cairo-xlib.h>
  #include <gtk/gtk.h>
  
  #if !OMIT_SOCKETS
@@@ -167,7 -168,7 +167,7 @@@ extern char *getenv()
  #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 '-'
@@@ -211,13 -212,11 +211,13 @@@ RETSIGTYPE CmailSigHandler P((int sig))
  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));
@@@ -834,19 -833,21 +834,21 @@@ LoadIconFile (gchar *svgFilename
  
  #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;
@@@ -880,33 -881,32 +882,32 @@@ main (int argc, char **argv
      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(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
  
                    programName, appData.boardSize);
            exit(2);
        }
 -      if(BOARD_WIDTH > 8)
 -          squareSize = (squareSize*8 + BOARD_WIDTH/2)/BOARD_WIDTH; // scale height
        if (i < 7) {
            /* Find some defaults; use the nearest known size */
            SizeDefaults *szd, *nearest;
        tinyLayout = szd->tinyLayout;
        // [HGM] font: use defaults from settings file if available and not overruled
      }
 +    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);
 +    }
  
      defaultLineGap = lineGap;
      if(appData.overrideLineGap >= 0) lineGap = appData.overrideLineGap;
@@@ -1776,7 -1774,7 +1777,7 @@@ voi
  ModeHighlight ()
  {
      static int oldPausing = FALSE;
 -    static GameMode oldmode = (GameMode) -1;
 +    static GameMode oldMode = (GameMode) -1;
      char *wname;
      if (!boardWidget) return;
  
        }
      }
  
 -    wname = ModeToWidgetName(oldmode);
 +    wname = ModeToWidgetName(oldMode);
      if (wname != NULL) {
        MarkMenuItem(wname, False);
      }
      if (wname != NULL) {
        MarkMenuItem(wname, True);
      }
 -    oldmode = gameMode;
 +    if(oldMode == TwoMachinesPlay) EnableNamedMenuItem("Mode.MachineMatch", True);
      MarkMenuItem("Mode.MachineMatch", matchMode && matchGame < appData.matchGames);
 +    oldMode = gameMode;
  
      /* Maybe all the enables should be handled here, not just this one */
      EnableNamedMenuItem("Mode.Training", gameMode == Training || gameMode == PlayFromGameFile);
diff --combined gtk/xoptions.c
@@@ -48,10 -48,11 +48,10 @@@ extern char *getenv()
  #include <stdint.h>
  
  #include <cairo/cairo.h>
 -#include <cairo/cairo-xlib.h>
  #include <gtk/gtk.h>
  #include <gdk/gdkkeysyms.h>
  #ifdef OSXAPP
- #  include <gtkmacintegration-gtk2/gtkosxapplication.h>
+ #  include <gtkmacintegration/gtkosxapplication.h>
  #endif
  
  #include "common.h"
@@@ -242,12 -243,6 +242,12 @@@ SetWidgetLabel (Option *opt, char *buf
        gtk_label_set_text(opt->handle, buf);
  }
  
 +void
 +SetComboChoice (Option *opt, int n)
 +{
 +    gtk_combo_box_set_active(opt->handle, n);
 +}
 +
  void
  SetDialogTitle (DialogClass dlg, char *title)
  {
@@@ -449,10 -444,24 +449,24 @@@ CreateMenuPopup (Option *opt, int n, in
  
            gtk_accelerator_parse(mb[i].accel, &accelerator_key, &accelerator_mods);
  #ifdef OSXAPP
-           if(accelerator_mods & GDK_CONTROL_MASK) {  // in OSX use Meta where Linux uses Ctrl
-               accelerator_mods &= ~GDK_CONTROL_MASK; // clear Ctrl flag
-               accelerator_mods |= GDK_META_MASK;     // set Meta flag
-           }
+           if(accelerator_mods & GDK_CONTROL_MASK &&
+              accelerator_key != 'v' &&          // don't use Cmd+V as this is a OS text edit command
+              accelerator_key != 'c' &&           // and Cmd+C
+              accelerator_key != 'x' &&          // and CMD+X
+              accelerator_key != 'a'           // and CMD+A
+              ) {  // in OSX use Meta (Cmd) where Linux uses Ctrl
+               accelerator_mods &= ~GDK_CONTROL_MASK; // clear Ctrl flag
+               accelerator_mods |= GDK_META_MASK;     // set Meta flag
+                 } else if (accelerator_mods & GDK_CONTROL_MASK &&
+                                        accelerator_key == 'v' ||
+                                        accelerator_key == 'c' ||
+                                        accelerator_key == 'x' ||
+                                        accelerator_key == 'a'
+                                        ) { // For these conflicting commands, lets make them alt-cmd
+                         accelerator_mods &= ~GDK_CONTROL_MASK; // clear Ctrl flag
+                         accelerator_mods |= GDK_META_MASK;
+                         accelerator_mods |= GDK_MOD1_MASK;
+                 } 
  #endif
            gtk_widget_add_accelerator (GTK_WIDGET(entry), "activate",GtkAccelerators,
                                        accelerator_key, accelerator_mods, GTK_ACCEL_VISIBLE);
@@@ -535,11 -544,11 +549,11 @@@ HighlightText (Option *opt, int from, i
      if(!(opt->min & INIT)) {
        opt->min |= INIT; // each memo its own init flag!
        gtk_text_buffer_create_tag(opt->handle, "highlight", "background", "yellow", NULL);
 -      gtk_text_buffer_create_tag(opt->handle, "normal", "background", "white", NULL);
      }
      gtk_text_buffer_get_iter_at_offset(opt->handle, &start, from);
      gtk_text_buffer_get_iter_at_offset(opt->handle, &end, to);
 -    gtk_text_buffer_apply_tag_by_name(opt->handle, highlight ? "highlight" : "normal", &start, &end);
 +    if(highlight) gtk_text_buffer_apply_tag_by_name(opt->handle, "highlight", &start, &end);
 +    else gtk_text_buffer_remove_tag_by_name(opt->handle, "highlight", &start, &end);
  }
  
  static char **names;
@@@ -1456,12 -1465,10 +1470,12 @@@ if(appData.debugMode) printf("n=%d, h=%
              /* set button color on new variant dialog */
              if(option[i].textValue) {
                  static char *b = "Bold";
 +                char *v, *p = NULL, n = option[i].value;
 +                if(n >= 0) v = VariantName(n), p = strstr(first.variants, v);
                  gdk_color_parse( option[i].textValue, &color );
                  gtk_widget_modify_bg ( GTK_WIDGET(button), GTK_STATE_NORMAL, &color );
                  gtk_widget_set_sensitive(button, option[i].value >= 0 && (appData.noChessProgram
 -                                       || strstr(first.variants, VariantName(option[i].value))));
 +                                       || p && (!*v || strlen(p) == strlen(v) || p[strlen(v)] == ',')));
                  if(engineVariant[100] ? !strcmp(engineVariant+100, option[i].name) : 
                     gameInfo.variant ? option[i].value == gameInfo.variant : !strcmp(option[i].name, "Normal"))
                      SetWidgetFont(gtk_bin_get_child(GTK_BIN(button)), &b);