#include "wx/filename.h"
#include "wx/stdpaths.h"
#include "wx/vector.h"
-#include "wx/ptr_scpd.h"
+#include "wx/scopedarray.h"
+#include "wx/scopedptr.h"
#if wxUSE_STD_IOSTREAM
#include "wx/ioswrap.h"
void wxDocManager::OnPrint(wxCommandEvent& WXUNUSED(event))
{
#if wxUSE_PRINTING_ARCHITECTURE
- wxView *view = GetCurrentView();
+ wxView *view = GetActiveView();
if (!view)
return;
void wxDocManager::OnPreview(wxCommandEvent& WXUNUSED(event))
{
#if wxUSE_PRINTING_ARCHITECTURE
- wxView *view = GetCurrentView();
+ wxView *view = GetActiveView();
if (!view)
return;
cmdproc->SetMenuStrings();
}
-wxView *wxDocManager::GetCurrentView() const
+wxView *wxDocManager::GetActiveView() const
{
- if (m_currentView)
- return m_currentView;
- if (m_docs.GetCount() == 1)
+ wxView *view = GetCurrentView();
+
+ if ( !view && !m_docs.empty() )
{
- wxDocument* doc = (wxDocument*) m_docs.GetFirst()->GetData();
- return doc->GetFirstView();
+ // if we have exactly one document, consider its view to be the current
+ // one
+ //
+ // VZ: I'm not exactly sure why is this needed but this is how this
+ // code used to behave before the bug #9518 was fixed and it seems
+ // safer to preserve the old logic
+ wxList::compatibility_iterator node = m_docs.GetFirst();
+ if ( !node->GetNext() )
+ {
+ wxDocument *doc = static_cast<wxDocument *>(node->GetData());
+ view = doc->GetFirstView();
+ }
+ //else: we have more than one document
}
- return NULL;
+
+ return view;
}
bool wxDocManager::TryValidator(wxEvent& event)
{
- wxView * const view = GetCurrentView();
+ wxView * const view = GetActiveView();
return view && view->ProcessEventHere(event);
}
wxDocument *wxDocManager::GetCurrentDocument() const
{
- wxView * const view = GetCurrentView();
+ wxView * const view = GetActiveView();
return view ? view->GetDocument() : NULL;
}