add configure test for xdg-programs to install mime types; can be disabled for buildi...
[xboard.git] / xboard.c
index f9ba5cc..260bddc 100644 (file)
--- a/xboard.c
+++ b/xboard.c
@@ -1816,6 +1816,7 @@ InitDrawingSizes (BoardSize boardSize, int flags)
        }
       }
     }
+    oldMono = -10; // kludge to force recreation of animation masks
   }
 #if HAVE_LIBXPM
   if(appData.monoMode != oldMono)
@@ -3891,6 +3892,39 @@ MenuBarSelect (Widget w, caddr_t addr, caddr_t index)
     (proc)(NULL, NULL, NULL, NULL);
 }
 
+static void
+MenuEngineSelect (Widget w, caddr_t addr, caddr_t index)
+{
+    RecentEngineEvent((int) addr);
+}
+
+void
+AppendEnginesToMenu (Widget menu, char *list)
+{
+    int i=0, j;
+    Widget entry;
+    MenuItem *mi;
+    Arg args[16];
+    char *p;
+
+    if(appData.recentEngines <= 0) return;
+    recentEngines = strdup(list);
+    j = 0;
+    XtSetArg(args[j], XtNleftMargin, 20);   j++;
+    XtSetArg(args[j], XtNrightMargin, 20);  j++;
+    while (*list) {
+       p = strchr(list, '\n'); if(p == NULL) break;
+       if(i == 0) XtCreateManagedWidget(_("----"), smeLineObjectClass, menu, args, j); // at least one valid item to add
+       *p = 0;
+       XtSetArg(args[j], XtNlabel, XtNewString(list));
+       entry = XtCreateManagedWidget("engine", smeBSBObjectClass, menu, args, j+1);
+       XtAddCallback(entry, XtNcallback,
+                         (XtCallbackProc) MenuEngineSelect,
+                         (caddr_t) i);
+       i++; *p = '\n'; list = p + 1;
+    }
+}
+
 void
 CreateMenuBarPopup (Widget parent, String name, Menu *mb)
 {
@@ -3919,6 +3953,7 @@ CreateMenuBarPopup (Widget parent, String name, Menu *mb)
        }
        mi++;
     }
+    if(!strcmp(mb->name, "Engine")) AppendEnginesToMenu(menu, appData.recentEngineList);
 }
 
 Widget
@@ -5187,7 +5222,7 @@ PromotionCallback (Widget w, XtPointer client_data, XtPointer call_data)
 void
 ErrorCallback (Widget w, XtPointer client_data, XtPointer call_data)
 {
-    errorUp = False;
+    dialogError = errorUp = False;
     XtPopdown(w = XtParent(XtParent(XtParent(w))));
     XtDestroyWidget(w);
     if (errorExitStatus != -1) ExitEvent(errorExitStatus);
@@ -5198,7 +5233,7 @@ void
 ErrorPopDown ()
 {
     if (!errorUp) return;
-    errorUp = False;
+    dialogError = errorUp = False;
     XtPopdown(errorShell);
     XtDestroyWidget(errorShell);
     if (errorExitStatus != -1) ExitEvent(errorExitStatus);
@@ -5221,7 +5256,7 @@ ErrorPopUp (char *title, char *label, int modal)
     XtSetArg(args[i], XtNtitle, title); i++;
     errorShell =
       XtCreatePopupShell("errorpopup", transientShellWidgetClass,
-                        shellWidget, args, i);
+                        shellUp[0] ? (dialogError = modal = TRUE, shells[0]) : shellWidget, args, i);
     layout =
       XtCreateManagedWidget(layoutName, formWidgetClass, errorShell,
                            layoutArgs, XtNumber(layoutArgs));
@@ -6548,7 +6583,7 @@ AboutProc (Widget w, XEvent *event, String *prms, Cardinal *nprms)
     snprintf(buf, sizeof(buf), 
 _("%s%s\n\n"
 "Copyright 1991 Digital Equipment Corporation\n"
-"Enhancements Copyright 1992-2009 Free Software Foundation\n"
+"Enhancements Copyright 1992-2012 Free Software Foundation\n"
 "Enhancements Copyright 2005 Alessandro Scotti\n\n"
 "%s is free software and carries NO WARRANTY;"
 "see the file COPYING for more information."),