Fix OK button of error popup
authorH.G. Muller <h.g.muller@hccnet.nl>
Sat, 11 Feb 2012 23:01:24 +0000 (00:01 +0100)
committerH.G. Muller <h.g.muller@hccnet.nl>
Sat, 11 Feb 2012 23:01:24 +0000 (00:01 +0100)
The error dialog popped up as a child of the board window, even when
DisplayError was called from a dialog. Now it checks if a transient
dialog is up, and if so, it pops up as a child of that, grabs focus,
and suppresses the system popdown of the transient dialog through a flag
dialogError until it is popped down itself.

xboard.c
xboard.h
xoptions.c

index e8fdeb7..260bddc 100644 (file)
--- a/xboard.c
+++ b/xboard.c
@@ -5222,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);
@@ -5233,7 +5233,7 @@ void
 ErrorPopDown ()
 {
     if (!errorUp) return;
-    errorUp = False;
+    dialogError = errorUp = False;
     XtPopdown(errorShell);
     XtDestroyWidget(errorShell);
     if (errorExitStatus != -1) ExitEvent(errorExitStatus);
@@ -5256,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));
index 48ce476..2807e65 100644 (file)
--- a/xboard.h
+++ b/xboard.h
@@ -153,6 +153,7 @@ FILE * XsraSelFile P((Widget w, char *prompt, char *ok, char *cancel, char *fail
 
 extern Widget shells[];
 extern Boolean shellUp[];
+extern int dialogError;
 extern Widget formWidget, shellWidget, boardWidget, menuBarWidget, gameListShell, historyShell;
 extern Display *xDisplay;
 extern Window xBoardWindow;
index 820ca81..46ca0e0 100644 (file)
@@ -113,6 +113,7 @@ typedef int OKCallback(int n);
 
 int values[MAX_OPTIONS];
 ChessProgramState *currentCps;
+int dialogError;
 static Option *currentOption;
 static Boolean browserUp;
 ButtonCallback *comboCallback;
@@ -303,7 +304,7 @@ PopDown (int n)
 void
 GenericPopDown (Widget w, XEvent *event, String *prms, Cardinal *nprms)
 {
-    if(browserUp) return; // prevent closing dialog when it has an open file-browse daughter
+    if(browserUp || dialogError) return; // prevent closing dialog when it has an open file-browse daughter
     PopDown(prms[0][0] - '0');
 }