]> git.eshelyaron.com Git - emacs.git/commitdiff
(file_dialog_unmap_cb): New function.
authorGerd Moellmann <gerd@gnu.org>
Thu, 3 May 2001 17:10:00 +0000 (17:10 +0000)
committerGerd Moellmann <gerd@gnu.org>
Thu, 3 May 2001 17:10:00 +0000 (17:10 +0000)
(Fx_file_dialog): Use it as XmNunmapCallback to capture the case
where a dialog is closed via the window manager.

src/ChangeLog
src/xfns.c

index d49c94171187bc633a9a8fb46cadd4a02b37b9c2..6dd403357e7eeef1d62ae49e1a9c3d7e83bb4af8 100644 (file)
@@ -1,5 +1,9 @@
 2001-05-03  Gerd Moellmann  <gerd@gnu.org>
 
+       * 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
index 4f718fa902018000bbe7e89af8c8bf982fa1d5be..f6972f9c12bac2a19502318d3eca33c2860ce6d6 100644 (file)
@@ -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.  */