toplevel fixes

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@11746 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Stefan Csomor
2001-09-30 17:34:51 +00:00
parent 752b40b1da
commit a15eb0a5c8
8 changed files with 365 additions and 219 deletions

View File

@@ -30,7 +30,6 @@ extern wxList wxPendingDelete;
#if !USE_SHARED_LIBRARY
BEGIN_EVENT_TABLE(wxFrameMac, wxFrameBase)
// EVT_SIZE(wxFrameMac::OnSize)
EVT_ACTIVATE(wxFrameMac::OnActivate)
// EVT_MENU_HIGHLIGHT_ALL(wxFrameMac::OnMenuHighlight)
EVT_SYS_COLOUR_CHANGED(wxFrameMac::OnSysColourChanged)
@@ -107,15 +106,8 @@ bool wxFrameMac::Create(wxWindow *parent,
{
SetBackgroundColour(wxSystemSettings::GetSystemColour(wxSYS_COLOUR_APPWORKSPACE));
if ( id > -1 )
m_windowId = id;
else
m_windowId = (int)NewControlId();
if (parent) parent->AddChild(this);
if (!parent)
wxTopLevelWindows.Append(this);
if ( !wxTopLevelWindow::Create(parent, id, title, pos, size, style, name) )
return FALSE;
MacCreateRealWindow( title, pos , size , MacRemoveBordersFromStyle(style) , name ) ;
@@ -129,23 +121,9 @@ bool wxFrameMac::Create(wxWindow *parent,
wxFrameMac::~wxFrameMac()
{
m_isBeingDeleted = TRUE;
wxTopLevelWindows.DeleteObject(this);
DeleteAllBars();
/* Check if it's the last top-level window */
if (wxTheApp && (wxTopLevelWindows.Number() == 0))
{
wxTheApp->SetTopWindow(NULL);
if (wxTheApp->GetExitOnFrameDelete())
{
wxTheApp->ExitMainLoop() ;
}
}
wxModelessWindows.DeleteObject(this);
}
@@ -216,46 +194,39 @@ void wxFrameMac::OnActivate(wxActivateEvent& event)
{
if ( !event.GetActive() )
{
// remember the last focused child
// remember the last focused child if it is our child
m_winLastFocused = FindFocus();
while ( m_winLastFocused )
{
if ( GetChildren().Find(m_winLastFocused) )
break;
m_winLastFocused = m_winLastFocused->GetParent();
// so we NULL it out if it's a child from some other frame
wxWindow *win = m_winLastFocused;
while ( win )
{
if ( win->IsTopLevel() )
{
if ( win != this )
{
m_winLastFocused = NULL;
}
break;
}
win = win->GetParent();
}
event.Skip();
}
else
{
/*
for ( wxWindowList::Node *node = GetChildren().GetFirst();
node;
node = node->GetNext() )
{
// FIXME all this is totally bogus - we need to do the same as wxPanel,
// but how to do it without duplicating the code?
// restore focus
wxWindow *child = node->GetData();
if ( !child->IsTopLevel() && child->AcceptsFocus()
#if wxUSE_TOOLBAR
&& !wxDynamicCast(child, wxToolBar)
#endif // wxUSE_TOOLBAR
#if wxUSE_STATUSBAR
&& !wxDynamicCast(child, wxStatusBar)
#endif // wxUSE_STATUSBAR
)
// restore focus to the child which was last focused
wxWindow *parent = m_winLastFocused ? m_winLastFocused->GetParent()
: NULL;
if ( !parent )
{
child->SetFocus();
break;
parent = this;
}
}
*/
wxSetFocusToChild(this, &m_winLastFocused);
wxSetFocusToChild(parent, &m_winLastFocused);
if ( m_frameMenuBar != NULL )
{