From 277ca3a397955ac4bcb112cc50998b27ebcbcdc3 Mon Sep 17 00:00:00 2001
From: Ben Harris <bjh21@bjh21.me.uk>
Date: Sat, 5 Apr 2003 15:01:16 +0000
Subject: [PATCH] Implement dlg_end().

[originally from svn r3059]
---
 mac/mac.h      |  1 +
 mac/macctrls.c |  5 ++++-
 mac/macdlg.c   | 15 ++++++++++++++-
 3 files changed, 19 insertions(+), 2 deletions(-)

diff --git a/mac/mac.h b/mac/mac.h
index d453de74..0f089229 100644
--- a/mac/mac.h
+++ b/mac/mac.h
@@ -71,6 +71,7 @@ union macctrl;
 
 struct macctrls {
     WindowPtr		window;
+    void		(*end)(WindowPtr, int);
     tree234		*byctrl;
     void		*data; /* private data for config box */
     unsigned int	npanels;
diff --git a/mac/macctrls.c b/mac/macctrls.c
index f717b6d9..857a6340 100644
--- a/mac/macctrls.c
+++ b/mac/macctrls.c
@@ -1,4 +1,4 @@
-/* $Id: macctrls.c,v 1.24 2003/04/03 23:18:06 ben Exp $ */
+/* $Id: macctrls.c,v 1.25 2003/04/05 15:01:16 ben Exp $ */
 /*
  * Copyright (c) 2003 Ben Harris
  * All rights reserved.
@@ -1092,7 +1092,10 @@ void dlg_error_msg(void *dlg, char *msg)
 
 void dlg_end(void *dlg, int value)
 {
+    struct macctrls *mcs = dlg;
 
+    if (mcs->end != NULL)
+	(*mcs->end)(mcs->window, value);
 };
 
 void dlg_refresh(union control *ctrl, void *dlg)
diff --git a/mac/macdlg.c b/mac/macdlg.c
index ec18aea8..872d1894 100644
--- a/mac/macdlg.c
+++ b/mac/macdlg.c
@@ -1,4 +1,4 @@
-/* $Id: macdlg.c,v 1.17 2003/03/29 23:07:55 ben Exp $ */
+/* $Id: macdlg.c,v 1.18 2003/04/05 15:01:16 ben Exp $ */
 /*
  * Copyright (c) 2002 Ben Harris
  * All rights reserved.
@@ -47,6 +47,7 @@
 #include "storage.h"
 
 static void mac_closedlg(WindowPtr);
+static void mac_enddlg(WindowPtr, int);
 
 void mac_newsession(void)
 {
@@ -69,6 +70,7 @@ void mac_newsession(void)
     setup_config_box(s->ctrlbox, &sesslist, FALSE, 0);
 
     s->settings_ctrls.data = &s->cfg;
+    s->settings_ctrls.end = &mac_enddlg;
     macctrl_layoutbox(s->ctrlbox, s->settings_window, &s->settings_ctrls);
 
     wi = snew(WinInfo);
@@ -96,6 +98,17 @@ static void mac_closedlg(WindowPtr window)
 	sfree(s);
 }
 
+static void mac_enddlg(WindowPtr window, int value)
+{
+    Session *s = mac_windowsession(window);
+
+    if (value == 0)
+	mac_closedlg(window);
+    else {
+	mac_startsession(s);
+	mac_closedlg(window);
+    }
+}
 
 void mac_dupsession(void)
 {