Don't compare invalid iterators in wxCommandProcessor::IsDirty().

Check that m_lastSavedCommand is valid before comparing it with
m_currentCommand as comparing invalid iterators results in an assert in STL
build (and probably should also result in an assert in non-STL build too for
consistency).

Also move IsDirty() implementation out of line to make it easier to modify it
further in the future and because there is no real reason to keep it inline.

Closes #13465.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@70459 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2012-01-25 00:05:09 +00:00
parent 58d77880bb
commit ef20428e99
2 changed files with 11 additions and 4 deletions

View File

@@ -97,10 +97,7 @@ public:
virtual void ClearCommands();
// Has the current project been changed?
virtual bool IsDirty() const
{
return m_currentCommand && (m_lastSavedCommand != m_currentCommand);
}
virtual bool IsDirty() const;
// Mark the current command as the one where the last save took place
void MarkAsSaved()

View File

@@ -328,4 +328,14 @@ void wxCommandProcessor::ClearCommands()
m_lastSavedCommand = wxList::compatibility_iterator();
}
bool wxCommandProcessor::IsDirty() const
{
if ( !m_currentCommand )
return false;
if ( !m_lastSavedCommand )
return true;
return m_lastSavedCommand != m_currentCommand;
}