[Winmerge-svn] SF.net SVN: winmerge:[5789] trunk
Windows visual diff and merge for files and directories
Brought to you by:
christianlist,
grimmdp
From: <ki...@us...> - 2008-08-12 06:19:37
|
Revision: 5789 http://winmerge.svn.sourceforge.net/winmerge/?rev=5789&view=rev Author: kimmov Date: 2008-08-12 06:19:33 +0000 (Tue, 12 Aug 2008) Log Message: ----------- PATCH: [ 2046002 ] Fix losing focus after folder compare operations Modified Paths: -------------- trunk/Docs/Users/ChangeLog.txt trunk/Src/Common/CShellFileOp.cpp trunk/Src/DirActions.cpp trunk/Src/MainFrm.cpp trunk/Src/Merge.cpp trunk/Src/Merge.h Modified: trunk/Docs/Users/ChangeLog.txt =================================================================== --- trunk/Docs/Users/ChangeLog.txt 2008-08-11 21:17:49 UTC (rev 5788) +++ trunk/Docs/Users/ChangeLog.txt 2008-08-12 06:19:33 UTC (rev 5789) @@ -7,6 +7,7 @@ Add wait cursor for undo and redo (#2039228) BugFix: External editor command line switches did not work (#2037862) BugFix: Deleting/Moving file crashed WinMerge in debugger (#2025833) + Bugfix: Lost focus after folder compare operations (#2046002) Translation updates: - Chinese Traditional (#2039929) Modified: trunk/Src/Common/CShellFileOp.cpp =================================================================== --- trunk/Src/Common/CShellFileOp.cpp 2008-08-11 21:17:49 UTC (rev 5788) +++ trunk/Src/Common/CShellFileOp.cpp 2008-08-12 06:19:33 UTC (rev 5789) @@ -540,9 +540,7 @@ } // drum roll please.... - ((CFrameWnd *)AfxGetMainWnd())->BeginModalState(); nAPIRet = SHFileOperation ( &m_rFOS ); // tah-dah! - ((CFrameWnd *)AfxGetMainWnd())->EndModalState(); // Save the return value from the API. if ( NULL != lpnAPIReturn ) { Modified: trunk/Src/DirActions.cpp =================================================================== --- trunk/Src/DirActions.cpp 2008-08-11 21:17:49 UTC (rev 5788) +++ trunk/Src/DirActions.cpp 2008-08-12 06:19:33 UTC (rev 5789) @@ -973,8 +973,10 @@ actionScript.SetParentWindow(this->GetSafeHwnd()); + theApp.AddOperation(); if (actionScript.Run()) UpdateAfterFileScript(actionScript); + theApp.RemoveOperation(); } /** Modified: trunk/Src/MainFrm.cpp =================================================================== --- trunk/Src/MainFrm.cpp 2008-08-11 21:17:49 UTC (rev 5788) +++ trunk/Src/MainFrm.cpp 2008-08-12 06:19:33 UTC (rev 5789) @@ -1764,6 +1764,9 @@ */ void CMainFrame::OnClose() { + if (theApp.GetActiveOperations()) + return; + // Check if there are multiple windows open and ask for closing them BOOL bAskClosing = GetOptionsMgr()->GetBool(OPT_ASK_MULTIWINDOW_CLOSE); if (bAskClosing) Modified: trunk/Src/Merge.cpp =================================================================== --- trunk/Src/Merge.cpp 2008-08-11 21:17:49 UTC (rev 5788) +++ trunk/Src/Merge.cpp 2008-08-12 06:19:33 UTC (rev 5789) @@ -141,6 +141,7 @@ , m_bNonInteractive(false) , m_pOptions(NULL) , m_pLog(NULL) +, m_nActiveOperations(0) { // add construction code here, // Place all significant initialization in InitInstance Modified: trunk/Src/Merge.h =================================================================== --- trunk/Src/Merge.h 2008-08-11 21:17:49 UTC (rev 5788) +++ trunk/Src/Merge.h 2008-08-12 06:19:33 UTC (rev 5789) @@ -114,6 +114,31 @@ void ReloadMenu(); + //@{ + /** + * @name Active operations counter. + * These functions implement counter for active operations. We need to + * track active operations during whose user cannot exit the application. + * E.g. copying files in folder compare is such an operation. + */ + /** + * Increment the active operation counter. + */ + void AddOperation() { InterlockedIncrement(&m_nActiveOperations); } + /** + * Decrement the active operation counter. + */ + void RemoveOperation() + { + ASSERT(m_nActiveOperations > 0); + InterlockedDecrement( &m_nActiveOperations); + } + /** + * Get the active operations count. + */ + LONG GetActiveOperations() const { return m_nActiveOperations; } + //@} + //{{AFX_MSG(CMergeApp) afx_msg BOOL OnOpenRecentFile(UINT nID); afx_msg void OnAppAbout(); @@ -128,6 +153,7 @@ CLogFile * m_pLog; int m_nLastCompareResult; bool m_bNonInteractive; + LONG m_nActiveOperations; /**< Active operations count. */ }; extern CMergeApp theApp; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |