From 02de46755f727ffb565f7c855f37c344eee925ff Mon Sep 17 00:00:00 2001 From: H.G. Muller Date: Wed, 28 Mar 2012 15:52:01 +0200 Subject: [PATCH] Add -topLevel option 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 | 1 + common.h | 3 +-- dialogs.c | 49 +++++++++++++++++++++++++------------------------ dialogs.h | 11 +++++------ xhistory.c | 2 +- xoptions.c | 8 ++------ 6 files changed, 35 insertions(+), 39 deletions(-) diff --git a/args.h b/args.h index 2459beb..0e91101 100644 --- 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 }, diff --git a/common.h b/common.h index d412462..236a69d 100644 --- 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; diff --git a/dialogs.c b/dialogs.c index a2af38b..922fb49 100644 --- 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 diff --git a/dialogs.h b/dialogs.h index 74bc021..856598e 100644 --- a/dialogs.h +++ b/dialogs.h @@ -31,14 +31,13 @@ // 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)); diff --git a/xhistory.c b/xhistory.c index 2824fa2..4211de1 100644 --- a/xhistory.c +++ b/xhistory.c @@ -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); } diff --git a/xoptions.c b/xoptions.c index 99ca568..1c711bb 100644 --- a/xoptions.c +++ b/xoptions.c @@ -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 = -- 1.7.0.4