Add -topLevel option
authorH.G. Muller <h.g.muller@hccnet.nl>
Wed, 28 Mar 2012 13:52:01 +0000 (15:52 +0200)
committerH.G. Muller <h.g.muller@hccnet.nl>
Tue, 10 Apr 2012 09:35:10 +0000 (11:35 +0200)
This persistent Boolean option determines if the auxiliary windows
(Game List, Move List, Engine Output, Eval Graph, Tags and Comment)
use top-level shells (with their own icon on the task bar, and
independently closable). Other dialogs will always use transient shells.
(Also he modal Error and Promotion dialogs, for which the modality
presumably only serves to pop them down without special attention.)
A control for this was added in the General Options dialog.

args.h
common.h
dialogs.c
dialogs.h
xhistory.c
xoptions.c

diff --git a/args.h b/args.h
index 2459beb..0e91101 100644 (file)
--- a/args.h
+++ b/args.h
@@ -650,6 +650,7 @@ ArgDescriptor argDescriptors[] = {
   { "viewer", ArgTrue, (void *) &appData.viewer, FALSE, FALSE },
   { "viewerOptions", ArgString, (void *) &appData.viewerOptions, TRUE, (ArgIniType) "-ncp -engineOutputUp false -saveSettingsOnExit false" },
   { "autoCopyPV", ArgBoolean, (void *) &appData.autoCopyPV, TRUE, FALSE },
+  { "topLevel", ArgBoolean, (void *) &appData.topLevel, XBOARD, (ArgIniType) TOPLEVEL },
 
 #if ZIPPY
   { "zippyTalk", ArgBoolean, (void *) &appData.zippyTalk, FALSE, (ArgIniType) ZIPPY_TALK },
index d412462..236a69d 100644 (file)
--- a/common.h
+++ b/common.h
@@ -461,8 +461,7 @@ typedef struct {
     Boolean autoComment;
     Boolean getMoveList;
     Boolean testLegality;
-    int borderXoffset; /* xboard only */
-    int borderYoffset; /* xboard only */
+    Boolean topLevel;      /* xboard, top-level auxiliary windows */
     Boolean titleInWindow; /* xboard only */
     Boolean localLineEditing; /* WinBoard only */
     Boolean zippyTalk;
index a2af38b..922fb49 100644 (file)
--- a/dialogs.c
+++ b/dialogs.c
@@ -319,7 +319,7 @@ MatchOptionsProc ()
    matchOptions[5].min = -(appData.pairingEngine[0] != NULLCHAR); // with pairing engine, allow Swiss
    ASSIGN(tfName, appData.tourneyFile[0] ? appData.tourneyFile : MakeName(appData.defName));
    ASSIGN(engineName, appData.participants);
-   GenericPopUp(matchOptions, _("Match Options"), TransientDlg, BoardWindow, MODAL);
+   GenericPopUp(matchOptions, _("Match Options"), TransientDlg, BoardWindow, MODAL, 0);
 }
 
 // ------------------------------------------- General Options --------------------------------------------------
@@ -360,6 +360,7 @@ static Option generalOptions[] = {
 { 0,  0, 0, NULL, (void*) &appData.markers, "", NULL, CheckBox, N_("Show Target Squares") },
 { 0,  0, 0, NULL, (void*) &appData.useStickyWindows, "", NULL, CheckBox, N_("Sticky Windows") },
 { 0,  0, 0, NULL, (void*) &appData.testLegality, "", NULL, CheckBox, N_("Test Legality") },
+{ 0,  0, 0, NULL, (void*) &appData.topLevel, "", NULL, CheckBox, N_("Top-Level Dialogs") },
 { 0, 0,10,  NULL, (void*) &appData.flashCount, "", NULL, Spin, N_("Flash Moves (0 = no flashing):") },
 { 0, 1,10,  NULL, (void*) &appData.flashRate, "", NULL, Spin, N_("Flash Rate (high = fast):") },
 { 0, 5,100, NULL, (void*) &appData.animSpeed, "", NULL, Spin, N_("Animation Speed (high = slow):") },
@@ -372,7 +373,7 @@ OptionsProc ()
 {
    oldPonder = appData.ponderNextMove;
    oldShow = appData.showCoords; oldBlind = appData.blindfold;
-   GenericPopUp(generalOptions, _("General Options"), TransientDlg, BoardWindow, MODAL);
+   GenericPopUp(generalOptions, _("General Options"), TransientDlg, BoardWindow, MODAL, 0);
 }
 
 //---------------------------------------------- New Variant ------------------------------------------------
@@ -460,7 +461,7 @@ Pick (int n)
 void
 NewVariantProc ()
 {
-   GenericPopUp(variantDescriptors, _("New Variant"), TransientDlg, BoardWindow, MODAL);
+   GenericPopUp(variantDescriptors, _("New Variant"), TransientDlg, BoardWindow, MODAL, 0);
 }
 
 //------------------------------------------- Common Engine Options -------------------------------------
@@ -504,7 +505,7 @@ UciMenuProc ()
 {
    oldCores = appData.smpCores;
    oldPonder = appData.ponderNextMove;
-   GenericPopUp(commonEngineOptions, _("Common Engine Settings"), TransientDlg, BoardWindow, MODAL);
+   GenericPopUp(commonEngineOptions, _("Common Engine Settings"), TransientDlg, BoardWindow, MODAL, 0);
 }
 
 //------------------------------------------ Adjudication Options --------------------------------------
@@ -526,7 +527,7 @@ static Option adjudicationOptions[] = {
 void
 EngineMenuProc ()
 {
-   GenericPopUp(adjudicationOptions, _("Adjudicate non-ICS Games"), TransientDlg, BoardWindow, MODAL);
+   GenericPopUp(adjudicationOptions, _("Adjudicate non-ICS Games"), TransientDlg, BoardWindow, MODAL, 0);
 }
 
 //--------------------------------------------- ICS Options ---------------------------------------------
@@ -574,7 +575,7 @@ Option icsOptions[] = {
 void
 IcsOptionsProc ()
 {
-   GenericPopUp(icsOptions, _("ICS Options"), TransientDlg, BoardWindow, MODAL);
+   GenericPopUp(icsOptions, _("ICS Options"), TransientDlg, BoardWindow, MODAL, 0);
 }
 
 //-------------------------------------------- Load Game Options ---------------------------------
@@ -613,7 +614,7 @@ void
 LoadOptionsProc ()
 {
    ASSIGN(searchMode, modeValues[appData.searchMode-1]);
-   GenericPopUp(loadOptions, _("Load Game Options"), TransientDlg, BoardWindow, MODAL);
+   GenericPopUp(loadOptions, _("Load Game Options"), TransientDlg, BoardWindow, MODAL, 0);
 }
 
 //------------------------------------------- Save Game Options --------------------------------------------
@@ -633,7 +634,7 @@ static Option saveOptions[] = {
 void
 SaveOptionsProc ()
 {
-   GenericPopUp(saveOptions, _("Save Game Options"), TransientDlg, BoardWindow, MODAL);
+   GenericPopUp(saveOptions, _("Save Game Options"), TransientDlg, BoardWindow, MODAL, 0);
 }
 
 //----------------------------------------------- Sound Options ---------------------------------------------
@@ -713,7 +714,7 @@ SoundOptionsProc ()
 {
    free(soundFiles[2]);
    soundFiles[2] = strdup("*");
-   GenericPopUp(soundOptions, _("Sound Options"), TransientDlg, BoardWindow, MODAL);
+   GenericPopUp(soundOptions, _("Sound Options"), TransientDlg, BoardWindow, MODAL, 0);
 }
 
 //--------------------------------------------- Board Options --------------------------------------
@@ -830,7 +831,7 @@ AdjustColor (int i)
 void
 BoardOptionsProc ()
 {
-   GenericPopUp(boardOptions, _("Board Options"), TransientDlg, BoardWindow, MODAL);
+   GenericPopUp(boardOptions, _("Board Options"), TransientDlg, BoardWindow, MODAL, 0);
 }
 
 //-------------------------------------------- ICS Text Menu Options ------------------------------
@@ -882,7 +883,7 @@ IcsTextProc ()
    textOptions[i].target = NULL;
    textOptions[i].min = 2;
    MarkMenu("ICStex", TextMenuDlg);
-   GenericPopUp(textOptions, _("ICS text menu"), TextMenuDlg, BoardWindow, NONMODAL);
+   GenericPopUp(textOptions, _("ICS text menu"), TextMenuDlg, BoardWindow, NONMODAL, 1);
 }
 
 //---------------------------------------------------- Edit Comment -----------------------------------
@@ -929,7 +930,7 @@ NewCommentPopup (char *title, char *text, int index)
     if(commentText) free(commentText); commentText = strdup(text);
     commentIndex = index;
     MarkMenu("Show Comments", CommentDlg);
-    if(GenericPopUp(commentOptions, title, CommentDlg, BoardWindow, NONMODAL))
+    if(GenericPopUp(commentOptions, title, CommentDlg, BoardWindow, NONMODAL, 1))
        AddHandler(&commentOptions[0], 1);
 }
 
@@ -983,7 +984,7 @@ NewTagsPopup (char *text, char *msg)
     if(tagsText) free(tagsText); tagsText = strdup(text);
     tagsOptions[0].name = msg;
     MarkMenu("Show Tags", TagsDlg);
-    GenericPopUp(tagsOptions, title, TagsDlg, BoardWindow, NONMODAL);
+    GenericPopUp(tagsOptions, title, TagsDlg, BoardWindow, NONMODAL, 1);
 }
 
 //---------------------------------------------- ICS Input Box ----------------------------------
@@ -1089,7 +1090,7 @@ void
 ICSInputBoxPopUp ()
 {
     MarkMenu("ICS Input Box", InputBoxDlg);
-    if(GenericPopUp(boxOptions, _("ICS input box"), InputBoxDlg, BoardWindow, NONMODAL))
+    if(GenericPopUp(boxOptions, _("ICS input box"), InputBoxDlg, BoardWindow, NONMODAL, 0))
        AddHandler(&boxOptions[0], 3);
 }
 
@@ -1120,7 +1121,7 @@ PopUpMoveDialog (char firstchar)
 {
     static char buf[2];
     buf[0] = firstchar; ASSIGN(icsText, buf);
-    if(GenericPopUp(typeOptions, _("Type a move"), TransientDlg, BoardWindow, MODAL))
+    if(GenericPopUp(typeOptions, _("Type a move"), TransientDlg, BoardWindow, MODAL, 0))
        AddHandler(&typeOptions[0], 2);
 }
 
@@ -1145,7 +1146,7 @@ void
 SettingsPopUp (ChessProgramState *cps)
 {
    currentCps = cps;
-   GenericPopUp(cps->option, _("Engine Settings"), TransientDlg, BoardWindow, MODAL);
+   GenericPopUp(cps->option, _("Engine Settings"), TransientDlg, BoardWindow, MODAL, 0);
 }
 
 void
@@ -1202,7 +1203,7 @@ LoadEngineProc ()
    if(nickName)     free(nickName);     nickName = strdup("");
    if(params)       free(params);       params = strdup("");
    NamesToList(firstChessProgramNames, engineList, engineMnemonic, "all");
-   GenericPopUp(installOptions, _("Load engine"), TransientDlg, BoardWindow, MODAL);
+   GenericPopUp(installOptions, _("Load engine"), TransientDlg, BoardWindow, MODAL, 0);
 }
 
 //----------------------------------------------------- Edit Book -----------------------------------------
@@ -1245,7 +1246,7 @@ SetRandom (int n)
 void
 ShuffleMenuProc ()
 {
-    GenericPopUp(shuffleOptions, _("New Shuffle Game"), TransientDlg, BoardWindow, MODAL);
+    GenericPopUp(shuffleOptions, _("New Shuffle Game"), TransientDlg, BoardWindow, MODAL, 0);
 }
 
 //------------------------------------------------------ Time Control -----------------------------------
@@ -1338,7 +1339,7 @@ TimeControlProc ()
    tmpInc = appData.timeIncrement; if(tmpInc < 0) tmpInc = 0;
    tmpOdds1 = tmpOdds2 = 1; tcType = 0;
    tmpTc = atoi(appData.timeControl);
-   GenericPopUp(tcOptions, _("Time Control"), TransientDlg, BoardWindow, MODAL);
+   GenericPopUp(tcOptions, _("Time Control"), TransientDlg, BoardWindow, MODAL, 0);
 }
 
 //------------------------------- Ask Question -----------------------------------------
@@ -1377,7 +1378,7 @@ AskQuestion (char *title, char *question, char *replyPrefix, ProcRef pr)
     pendingReplyPR = pr;
     ASSIGN(answer, "");
     askOptions[0].name = question;
-    if(GenericPopUp(askOptions, title, AskDlg, BoardWindow, MODAL))
+    if(GenericPopUp(askOptions, title, AskDlg, BoardWindow, MODAL, 0))
        AddHandler(&askOptions[1], 2);
 }
 
@@ -1460,7 +1461,7 @@ PromotionPopUp ()
       SetPromo(_("Defer"), --count, '=');
       SetPromo(_("Promote"), --count, '+');
   }
-  GenericPopUp(promoOptions + count, "Promotion", PromoDlg, BoardWindow, NONMODAL);
+  GenericPopUp(promoOptions + count, "Promotion", PromoDlg, BoardWindow, NONMODAL, 0);
 }
 
 //---------------------------- Chat Windows ----------------------------------------------
@@ -1515,10 +1516,10 @@ ErrorPopUp (char *title, char *label, int modal)
 {
     errorUp = True;
     errorOptions[1].name = label;
-    if(dialogError = shellUp[TransientDlg])
-        GenericPopUp(errorOptions+1, title, FatalDlg, TransientDlg, MODAL); // pop up as daughter of the transient dialog
+    if(dialogError = shellUp[TransientDlg]) 
+       GenericPopUp(errorOptions+1, title, FatalDlg, TransientDlg, MODAL, 0); // pop up as daughter of the transient dialog
     else
-        GenericPopUp(errorOptions+modal, title, modal ? FatalDlg: ErrorDlg, BoardWindow, modal); // kludge: option start address indicates modality
+       GenericPopUp(errorOptions+modal, title, modal ? FatalDlg: ErrorDlg, BoardWindow, modal, 0); // kludge: option start address indicates modality
 }
 
 void
index 74bc021..856598e 100644 (file)
--- a/dialogs.h
+++ b/dialogs.h
 // int     min        X/E         (2)    (3)         (1)  (1)  (1)   (1)  (3)   (1)  (4)
 // int     max        X/E   (w)   (w)    (w)   (w)   (w)  (w)  (w)   (w)
 // void*   handle     X/E   X/E   X/E    X/E   X/E    X    X    X     X    X
-// void*   target      X     X     X      X     C          X    X     C    C
+// void*   target      X     X     X     X/C    C          X    X     C    C
 // char*   textValue               E     X/E    *
 // char ** choice                        X/E    *                          X
 // enum    type       X/E   X/E   X/E    X/E    X     X    X    X     X    X     X    X
 // char[]  name       X/E   X/E   X/E    X/E    X          X    X     X    X
 // File and Path options are like String (but get a browse button added in the dialog), and Slider
-// is like Spin. Menu can be PopUp or PopDown; both need the COMBO_CALLBACK bit (1) set, and the
-// latter also uses the min flags for positioning the menu button.
+// is like Spin. Menu can be PopUp or PopDown; both need the COMBO_CALLBACK bit (3) set!
 // (h) or (w) means the field optionally (when non-null) specifies the height or width of the main
 // control element (excluding accompanying description texts). [w] means the width is written there.
 // C specifies the 'target' is a user-supplied callback function, which will be executed when the
@@ -52,7 +51,7 @@
 #define T_WRAP         (1 << 3)
 #define T_TOP          (1 << 4)
 
-/* Flags Option.min used (3) for ComboBox (-combo): */
+/* Flags Option.min used (3) for ComboBox (-combo) and menus (PopUp, PopDown): */
 #define COMBO_CALLBACK (1 << 0)
 #define NO_GETTEXT     (1 << 2)
 
@@ -73,7 +72,7 @@
 #define RR             (L2R|R2R)   /*   0x30 = entirely to right */
 #define LR             (L2L|R2R)   /*   0x90 = absorb all horizontal size change */
 
-/* Flags for Option.min used (3) for EndMark: */
+/* Flags for Option.min used (4) for EndMark: */
 #define NO_OK          (1 << 1)
 #define NO_CANCEL      (1 << 2)
 
@@ -110,7 +109,7 @@ extern Option textOptions[], typeOptions[];
 
 
 int DialogExists P((DialogClass n));
-int GenericPopUp P((Option *option, char *title, DialogClass dlgNr, DialogClass parent, int modal));
+int GenericPopUp P((Option *option, char *title, DialogClass dlgNr, DialogClass parent, int modal, int topLevel));
 int GenericReadout P((Option *currentOption, int selected));
 int PopDown P((DialogClass n));
 int AppendText P((Option *opt, char *s));
index 2824fa2..4211de1 100644 (file)
@@ -151,7 +151,7 @@ MoveHistoryDialogExists ()
 void
 HistoryPopUp ()
 {
-    if(GenericPopUp(historyOptions, _("Move list"), HistoryDlg, BoardWindow, NONMODAL))
+    if(GenericPopUp(historyOptions, _("Move list"), HistoryDlg, BoardWindow, NONMODAL, 1))
        AddHandler(&historyOptions[0], 0);
     MarkMenu("Show Move History", HistoryDlg);
 }
index 99ca568..1c711bb 100644 (file)
@@ -682,7 +682,7 @@ SetPositionAndSize (Arg *args, Widget leftNeigbor, Widget topNeigbor, int b, int
 }
 
 int
-GenericPopUp (Option *option, char *title, DialogClass dlgNr, DialogClass parent, int modal)
+GenericPopUp (Option *option, char *title, DialogClass dlgNr, DialogClass parent, int modal, int top)
 {
     Arg args[24];
     Widget popup, layout, dialog=NULL, edit=NULL, form,  last, b_ok, b_cancel, previousPane = NULL, textField = NULL, oldForm, oldLastRow, oldForeLast;
@@ -720,11 +720,7 @@ GenericPopUp (Option *option, char *title, DialogClass dlgNr, DialogClass parent
     shells[BoardWindow] = shellWidget; parents[dlgNr] = parent;
 
     popup = shells[dlgNr] =
-#if TOPLEVEL
-      XtCreatePopupShell(title, modal ? transientShellWidgetClass : topLevelShellWidgetClass,
-#else
-      XtCreatePopupShell(title, transientShellWidgetClass,
-#endif
+      XtCreatePopupShell(title, !top || !appData.topLevel ? transientShellWidgetClass : topLevelShellWidgetClass,
                                                            shells[parent], args, i);
 
     layout =