]> git.saurik.com Git - wxWidgets.git/commitdiff
Activate the view of a newly created document.
authorVadim Zeitlin <vadim@wxwidgets.org>
Sun, 30 May 2010 20:05:44 +0000 (20:05 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sun, 30 May 2010 20:05:44 +0000 (20:05 +0000)
This appears to be necessary under Mac where views are top level windows and
should do no harm elsewhere.

Also factor out the activation code in a new wxDocManager::ActivateDocument()
method to avoid duplicating it.

Closes #11417.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64440 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

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

index 0c929524671d5d1143120d622c26e5bddda8c073..7be6af0d748de27b10cc9fbdb860fbf863f55dc1 100644 (file)
@@ -501,6 +501,9 @@ protected:
     // view and returns it then
     wxView *GetActiveView() const;
 
+    // activate the first view of the given document if any
+    void ActivateDocument(wxDocument *doc);
+
 
     int               m_defaultDocumentNameCounter;
     int               m_maxDocsOpen;
index fa23123c8df49729d538e4e913619e93ed9b1e8e..e95866bd146f1a0fa656a95727cecfbd49cc4b47 100644 (file)
@@ -1295,6 +1295,17 @@ wxDocTemplates GetVisibleTemplates(const wxList& allTemplates)
 
 } // anonymous namespace
 
+void wxDocManager::ActivateDocument(wxDocument *doc)
+{
+    wxView * const view = doc->GetFirstView();
+    if ( !view )
+        return;
+
+    view->Activate(true);
+    if ( wxWindow *win = view->GetFrame() )
+        win->SetFocus();
+}
+
 wxDocument *wxDocManager::CreateDocument(const wxString& pathOrig, long flags)
 {
     // this ought to be const but SelectDocumentType/Path() are not
@@ -1349,13 +1360,7 @@ wxDocument *wxDocManager::CreateDocument(const wxString& pathOrig, long flags)
             if ( fn == doc->GetFilename() )
             {
                 // file already open, just activate it and return
-                if ( doc->GetFirstView() )
-                {
-                    ActivateView(doc->GetFirstView());
-                    if ( doc->GetDocumentWindow() )
-                        doc->GetDocumentWindow()->SetFocus();
-                    return doc;
-                }
+                ActivateDocument(doc);
             }
         }
     }
@@ -1402,6 +1407,11 @@ wxDocument *wxDocManager::CreateDocument(const wxString& pathOrig, long flags)
     if ( !(flags & wxDOC_NEW) && temp->FileMatchesTemplate(path) )
         AddFileToHistory(path);
 
+    // at least under Mac (where views are top level windows) it seems to be
+    // necessary to manually activate the new document to bring it to the
+    // forefront -- and it shouldn't hurt doing this under the other platforms
+    ActivateDocument(docNew);
+
     return docNew;
 }