]> git.saurik.com Git - wxWidgets.git/commitdiff
don't fall back to the only currently existing document in wxDocManager::GetCurrentVi...
authorVadim Zeitlin <vadim@wxwidgets.org>
Thu, 29 Jan 2009 13:04:40 +0000 (13:04 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Thu, 29 Jan 2009 13:04:40 +0000 (13:04 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@58496 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/docview.h
src/common/docview.cpp

index f03945be158b78ec41781f684fc1298de927adac..a7c6df2620c120388ba92d2632f98fdc0465fd18 100644 (file)
@@ -417,7 +417,7 @@ public:
     // 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; }
@@ -472,6 +472,11 @@ protected:
     // 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;
index 829ce9b852eab4b63d71f65cc8d17607a19f1816..9c5118b3c19acae80011be9fa9e6868a06f73bcc 100644 (file)
@@ -1018,7 +1018,7 @@ void wxDocManager::OnFileSaveAs(wxCommandEvent& WXUNUSED(event))
 void wxDocManager::OnPrint(wxCommandEvent& WXUNUSED(event))
 {
 #if wxUSE_PRINTING_ARCHITECTURE
-    wxView *view = GetCurrentView();
+    wxView *view = GetActiveView();
     if (!view)
         return;
 
@@ -1036,7 +1036,7 @@ void wxDocManager::OnPrint(wxCommandEvent& WXUNUSED(event))
 void wxDocManager::OnPreview(wxCommandEvent& WXUNUSED(event))
 {
 #if wxUSE_PRINTING_ARCHITECTURE
-    wxView *view = GetCurrentView();
+    wxView *view = GetActiveView();
     if (!view)
         return;
 
@@ -1140,21 +1140,33 @@ void wxDocManager::OnUpdateRedo(wxUpdateUIEvent& event)
     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);
 }
 
@@ -1329,7 +1341,7 @@ bool wxDocManager::FlushDoc(wxDocument *WXUNUSED(doc))
 
 wxDocument *wxDocManager::GetCurrentDocument() const
 {
-    wxView * const view = GetCurrentView();
+    wxView * const view = GetActiveView();
     return view ? view->GetDocument() : NULL;
 }