From a779d21374a1fdb38f7a9ed3a664b7321d9af7bd Mon Sep 17 00:00:00 2001 From: Gerd Moellmann Date: Thu, 3 May 2001 17:10:00 +0000 Subject: [PATCH] (file_dialog_unmap_cb): New function. (Fx_file_dialog): Use it as XmNunmapCallback to capture the case where a dialog is closed via the window manager. --- src/ChangeLog | 4 ++++ src/xfns.c | 19 ++++++++++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/ChangeLog b/src/ChangeLog index d49c941711..6dd403357e 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,9 @@ 2001-05-03 Gerd Moellmann + * xfns.c (file_dialog_unmap_cb): New function. + (Fx_file_dialog): Use it as XmNunmapCallback to capture the case + where a dialog is closed via the window manager. + * xdisp.c (try_window_id): Cases of changes all in front of the window start or all below the window end mostly rewritten. (redisplay_window): Move the tests if try_window_id is diff --git a/src/xfns.c b/src/xfns.c index 4f718fa902..f6972f9c12 100644 --- a/src/xfns.c +++ b/src/xfns.c @@ -11083,6 +11083,21 @@ file_dialog_cb (widget, client_data, call_data) } +/* Callback for unmapping a file selection dialog. This is used to + capture the case where a dialog is closed via a window manager's + closer button, for example. Using a XmNdestroyCallback didn't work + in this case. */ + +static void +file_dialog_unmap_cb (widget, client_data, call_data) + Widget widget; + XtPointer call_data, client_data; +{ + int *result = (int *) client_data; + *result = XmCR_CANCEL; +} + + DEFUN ("x-file-dialog", Fx_file_dialog, Sx_file_dialog, 2, 4, 0, "Read file name, prompting with PROMPT in directory DIR.\n\ Use a file selection dialog.\n\ @@ -11135,6 +11150,8 @@ selection dialog's entry field, if MUSTMATCH is non-nil.") (XtPointer) &result); XtAddCallback (dialog, XmNcancelCallback, file_dialog_cb, (XtPointer) &result); + XtAddCallback (dialog, XmNunmapCallback, file_dialog_unmap_cb, + (XtPointer) &result); /* Disable the help button since we can't display help. */ help = XmFileSelectionBoxGetChild (dialog, XmDIALOG_HELP_BUTTON); @@ -11188,7 +11205,7 @@ selection dialog's entry field, if MUSTMATCH is non-nil.") /* Process events until the user presses Cancel or OK. */ result = 0; - while (result == 0 || XtAppPending (Xt_app_con)) + while (result == 0) XtAppProcessEvent (Xt_app_con, XtIMAll); /* Get the result. */ -- 2.39.2