[commit] r1509 - trunk/GME/Gme

GMESRC Repository Notifications gme-commit at list.isis.vanderbilt.edu
Wed Sep 7 16:44:54 CDT 2011


Author: ksmyth
Date: Wed Sep  7 16:44:54 2011
New Revision: 1509

Log:
Cut the Gordian WM_CLOSE, ExitInstance, SaveAllModified knot. Fixes C# interpreters not Release()ing IGMEOLEApp, GME-298

Modified:
   trunk/GME/Gme/GMEApp.cpp
   trunk/GME/Gme/GMEApp.h

Modified: trunk/GME/Gme/GMEApp.cpp
==============================================================================
--- trunk/GME/Gme/GMEApp.cpp	Wed Sep  7 11:08:40 2011	(r1508)
+++ trunk/GME/Gme/GMEApp.cpp	Wed Sep  7 16:44:54 2011	(r1509)
@@ -1747,6 +1747,17 @@
 
 #define PROJECT_STATUS_CHANGED 4
 
+void CGMEApp::OnAppExit()
+{
+	if (SaveAllModified())
+	{
+		// n.b. C# interpreters may not Release() IGMEOLEApp, which keeps us ::Run()ing forever
+		// TerminateProcess will be unpleasant for DCOM (but the user asked for it)
+		TerminateProcess(GetCurrentProcess(), 0);
+	}
+	// n.b. don't call CWinAppEx::OnAppExit
+}
+
 BOOL CGMEApp::SaveAllModified() 
 {
 	if (mgaProject != NULL && (proj_type_is_mga || proj_type_is_xmlbackend)) {
@@ -1754,7 +1765,7 @@
 		long l;
 		COMTHROW(mgaProject->get_ProjectStatus(&l));
 		if (IsUndoPossible() && (l & PROJECT_STATUS_CHANGED))
-			ret = AfxMessageBox(_T("Save project '") + projectName + _T("'?"),  MB_YESNO);
+			ret = AfxMessageBox(_T("Save project '") + projectName + _T("'?"),  MB_YESNOCANCEL);
 		if (ret == IDCANCEL) {
 			return FALSE;
 		} else if (ret == IDNO) {

Modified: trunk/GME/Gme/GMEApp.h
==============================================================================
--- trunk/GME/Gme/GMEApp.h	Wed Sep  7 11:08:40 2011	(r1508)
+++ trunk/GME/Gme/GMEApp.h	Wed Sep  7 16:44:54 2011	(r1509)
@@ -179,6 +179,7 @@
 	public:
 	virtual BOOL InitInstance();
 	virtual int ExitInstance();
+	virtual void OnAppExit();
 	virtual BOOL SaveAllModified();
 	//}}AFX_VIRTUAL
 


More information about the gme-commit mailing list