Fix multi-leg promotions
[xboard.git] / xaw / xoptions.c
index 1809743..1c0a897 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * xoptions.c -- Move list window, part of X front end for XBoard
  *
- * Copyright 2000, 2009, 2010, 2011, 2012, 2013, 2014, 2015 Free Software Foundation, Inc.
+ * Copyright 2000, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 Free Software Foundation, Inc.
  * ------------------------------------------------------------------------
  *
  * GNU XBoard is free software: you can redistribute it and/or modify
@@ -181,6 +181,11 @@ SetWidgetState (Option *opt, int state)
 }
 
 void
+WidgetEcho (Option *opt, int state)
+{
+}
+
+void
 SetWidgetLabel (Option *opt, char *buf)
 {
     Arg arg;
@@ -189,9 +194,9 @@ SetWidgetLabel (Option *opt, char *buf)
 }
 
 void
-SetComboChoice (Option *opt, char *n)
+SetComboChoice (Option *opt, int n)
 {
-    SetWidgetText(opt, opt->choice[n]);
+    SetWidgetText(opt, opt->choice[n], MasterDlg);
 }
 
 void
@@ -284,6 +289,11 @@ AppendColorized (Option *opt, char *message, int count)
 }
 
 void
+ApplyFont (Option *opt, char *font)
+{ // dummy
+}
+
+void
 Show (Option *opt, int hide)
 {
     static Dimension h;
@@ -1136,8 +1146,10 @@ GenericPopUp (Option *option, char *title, DialogClass dlgNr, DialogClass parent
                                   option[i].max /* w */, shrink ? textHeight : 0 /* h */, option[i].min & 0xE | chain /* chain */);
            XtSetArg(args[j], XtNlabel, _(option[i].name));  j++;
            if(option[i].textValue && *option[i].textValue == '#') { // special for buttons of New Variant dialog
+               char *p = NULL, *v, n = option[i].value;
+               if(n >= 0) v = VariantName(n), p = strstr(first.variants, v);
                XtSetArg(args[j], XtNsensitive, option[i].value >= 0 && (appData.noChessProgram
-                                        || strstr(first.variants, VariantName(option[i].value)))); j++;
+                                        || p && (!*v || strlen(p) == strlen(v) || p[strlen(v)] == ','))); j++;
                XtSetArg(args[j], XtNborderWidth, (gameInfo.variant == option[i].value)+1); j++;
            }
            option[i].handle = (void*)
@@ -1223,6 +1235,11 @@ GenericPopUp (Option *option, char *title, DialogClass dlgNr, DialogClass parent
                                   0 /* w */, 0 /* h */, 1 /* chain (always on same row) */);
            forelast = lastrow;
            msg = _(option[i].name); // write name on the menu button
+           if(msg) { if(*msg == '_') msg++; else if(msg[1] == '_') { // kludge to remove GTK shortkut-key indicators
+               static char buf[MSG_SIZ];
+               strncpy(buf, msg, MSG_SIZ); msg = buf + 1;
+               *msg = *buf;
+           }}
            XtSetArg(args[j], XtNmenuName, XtNewString(option[i].name));  j++;
            XtSetArg(args[j], XtNlabel, msg);  j++;
            option[i].handle = (void*)
@@ -1429,3 +1446,8 @@ FileNamePopUpWrapper (char *label, char *def, char *filter, FileProc proc, Boole
 {
     Browse(BoardWindow, label, (def[0] ? def : NULL), filter, False, openMode, openName, openFP);
 }
+
+void
+LockBoardSize (int after)
+{
+}