Activate the view of a newly created document.
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
This commit is contained in:
@@ -501,6 +501,9 @@ protected:
|
|||||||
// view and returns it then
|
// view and returns it then
|
||||||
wxView *GetActiveView() const;
|
wxView *GetActiveView() const;
|
||||||
|
|
||||||
|
// activate the first view of the given document if any
|
||||||
|
void ActivateDocument(wxDocument *doc);
|
||||||
|
|
||||||
|
|
||||||
int m_defaultDocumentNameCounter;
|
int m_defaultDocumentNameCounter;
|
||||||
int m_maxDocsOpen;
|
int m_maxDocsOpen;
|
||||||
|
@@ -1295,6 +1295,17 @@ wxDocTemplates GetVisibleTemplates(const wxList& allTemplates)
|
|||||||
|
|
||||||
} // anonymous namespace
|
} // 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)
|
wxDocument *wxDocManager::CreateDocument(const wxString& pathOrig, long flags)
|
||||||
{
|
{
|
||||||
// this ought to be const but SelectDocumentType/Path() are not
|
// 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() )
|
if ( fn == doc->GetFilename() )
|
||||||
{
|
{
|
||||||
// file already open, just activate it and return
|
// file already open, just activate it and return
|
||||||
if ( doc->GetFirstView() )
|
ActivateDocument(doc);
|
||||||
{
|
|
||||||
ActivateView(doc->GetFirstView());
|
|
||||||
if ( doc->GetDocumentWindow() )
|
|
||||||
doc->GetDocumentWindow()->SetFocus();
|
|
||||||
return doc;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1402,6 +1407,11 @@ wxDocument *wxDocManager::CreateDocument(const wxString& pathOrig, long flags)
|
|||||||
if ( !(flags & wxDOC_NEW) && temp->FileMatchesTemplate(path) )
|
if ( !(flags & wxDOC_NEW) && temp->FileMatchesTemplate(path) )
|
||||||
AddFileToHistory(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;
|
return docNew;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user