desc.width = size.x;
desc.height = size.y;
m_dfbwin = layer->CreateWindow(&desc);
- if ( !layer )
+ if ( !m_dfbwin )
return false;
// add the new TLW to DFBWindowID->wxTLW map:
{
m_isBeingDeleted = true;
- wxTopLevelWindows.DeleteObject(this);
-
- if ( wxTheApp->GetTopWindow() == this )
- wxTheApp->SetTopWindow(NULL);
-
- if ( wxTopLevelWindows.empty() && wxTheApp->GetExitOnFrameDelete() )
- {
- wxTheApp->ExitMainLoop();
- }
+ // destroy all children before we destroy the underlying DirectFB window,
+ // so that if any of them does something with the TLW, it will still work:
+ DestroyChildren();
+ // it's safe to delete the underlying DirectFB window now:
wxDELETE(m_toPaint);
+ if ( !m_dfbwin )
+ return;
+
// remove the TLW from DFBWindowID->wxTLW map:
DFBWindowID winid;
if ( m_dfbwin->GetID(&winid) )
gs_dfbWindowsMap.erase(winid);
+
+ m_dfbwin->Destroy();
+ m_dfbwin.Reset();
}
// ----------------------------------------------------------------------------
wxFAIL_MSG( _T("invalid event type") );
break;
}
+
+ default:
+ // we're not interested in them here
+ break;
}
if ( !recipient )