diff --git a/doc/fixes3-7-0.txt b/doc/fixes3-7-0.txt index 4ffb0e730..fa1e6e4fd 100644 --- a/doc/fixes3-7-0.txt +++ b/doc/fixes3-7-0.txt @@ -1665,6 +1665,8 @@ X11: with 'slow' resource set to False, the pop up yn_function didn't always X11: (possibly X11+OSX): if persistent inventory was displayed at time of end-of-game prompting, prompting would stall until that window was manually dismissed +X11: (possibly X11+OSX): try harder to resize the getlin() prompt, if needed, + when prompt text changes X11: set all selectable menu lines to the same length, left justified X11: initializing the get-extended-command widget modified memory beyond what it dynamically allocated diff --git a/win/X11/winX.c b/win/X11/winX.c index 4d8d923f4..e762dc6ea 100644 --- a/win/X11/winX.c +++ b/win/X11/winX.c @@ -1587,7 +1587,7 @@ X11_init_nhwindows(int *argcp, char **argv) if (icon_pixmap != None) { XWMHints hints; - (void) memset((genericptr_t) &hints, 0, sizeof(XWMHints)); + (void) memset((genericptr_t) &hints, 0, sizeof hints); hints.flags = IconPixmapHint; hints.icon_pixmap = icon_pixmap; XSetWMHints(XtDisplay(toplevel), XtWindow(toplevel), @@ -1922,9 +1922,12 @@ release_getline_widgets(void) /* ask user for a line of text */ void -X11_getlin(const char *question, /* prompt */ - char *input) /* user's input, getlin's _output_ buffer */ +X11_getlin( + const char *question, /* prompt */ + char *input) /* user's input, getlin's _output_ buffer */ { + unsigned upromptlen; + getline_input = input; /* used by popup actions */ flush_screen(1); /* tell core to make sure that map is up to date */ @@ -1947,18 +1950,24 @@ X11_getlin(const char *question, /* prompt */ XSetWMProtocols(XtDisplay(getline_popup), XtWindow(getline_popup), &wm_delete_window, 1); } - SetDialogPrompt(getline_dialog, (String) question); /* set prompt */ - /* 60: make the answer widget be wide enough to hold 60 characters, + + /* 64: make the answer widget be wide enough to hold 64 characters, or the length of the prompt string, whichever is bigger. User's response can be longer--when limit is reached, value-so-far will slide left hiding some chars at the beginning of the response but making room to type more. [Prior to 3.6.1, width wasn't specifiable and answer box always got sized to match the width of the prompt.] */ + upromptlen = (unsigned) strlen(question); + if (upromptlen < 64) + upromptlen = 64; #ifdef EDIT_GETLIN - SetDialogResponse(getline_dialog, input, 60); /* set default answer */ + /* set default answer */ + SetDialogResponse(getline_dialog, input, upromptlen); #else - SetDialogResponse(getline_dialog, nhStr(""), 60); /* set default answer */ + /* no default answer */ + SetDialogResponse(getline_dialog, nhStr(""), upromptlen); #endif + SetDialogPrompt(getline_dialog, (String) question); /* set prompt */ positionpopup(getline_popup, TRUE); /* center,bottom */ nh_XtPopup(getline_popup, (int) XtGrabExclusive, getline_dialog); @@ -2338,7 +2347,7 @@ X11_yn_function_core( * It also enforces a minimum prompt width, which wasn't being * done before, so that really short prompts are more noticeable * if they pop up where the pointer is parked and it happens to - * be setting somewhere the player isn't looking. + * be sitting somewhere the player isn't looking. */ Dimension promptwidth, labelwidth = 0;