// Views or windows should inform the document manager
// when a view is going in or out of focus
virtual void ActivateView(wxView *view, bool activate = true);
- virtual wxView *GetCurrentView() const;
+ virtual wxView *GetCurrentView() const { return m_currentView; }
wxList& GetDocuments() { return m_docs; }
wxList& GetTemplates() { return m_templates; }
// return the command processor for the current document, if any
wxCommandProcessor *GetCurrentCommandProcessor() const;
+ // this method tries to find an active view harder than GetCurrentView():
+ // if the latter is NULL, it also checks if we don't have just a single
+ // view and returns it then
+ wxView *GetActiveView() const;
+
int m_defaultDocumentNameCounter;
int m_maxDocsOpen;
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;
}