When wxUSE_STL == 1 and STL provides quasi-standard hash_map/hash_set,

wxHashMap/wxHashSet are just typedefs for them. This makes impossible
to forward declare these classes.


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@27182 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Mattia Barbon
2004-05-08 20:20:24 +00:00
parent 11e720751c
commit bdcade0a10
16 changed files with 5363 additions and 1925 deletions

View File

@@ -29,7 +29,6 @@
#include "wx/intl.h"
#include "wx/evtloop.h"
#include "wx/hash.h"
#include "wx/hashmap.h"
#if wxUSE_THREADS
#include "wx/thread.h"
@@ -60,8 +59,6 @@ struct wxPerDisplayData
Widget m_topLevelWidget;
};
WX_DECLARE_VOIDPTR_HASH_MAP( wxPerDisplayData, wxPerDisplayDataMap );
static void wxTLWidgetDestroyCallback(Widget w, XtPointer clientData,
XtPointer ptr);
static WXWidget wxCreateTopLevelWidget( WXDisplay* display );
@@ -138,8 +135,9 @@ wxApp::~wxApp()
end = m_perDisplayData->end();
it != end; ++it )
{
delete it->second.m_visualInfo;
XtDestroyWidget( it->second.m_topLevelWidget );
delete it->second->m_visualInfo;
XtDestroyWidget( it->second->m_topLevelWidget );
delete it->second;
}
delete m_perDisplayData;
@@ -244,17 +242,30 @@ WXColormap wxApp::GetMainColormap(WXDisplay* display)
return (WXColormap) c;
}
static inline wxPerDisplayData& GetOrCreatePerDisplayData
( wxPerDisplayDataMap& m, WXDisplay* display )
{
wxPerDisplayDataMap::iterator it = m.find( display );
if( it != m.end() && it->second != NULL )
return *(it->second);
wxPerDisplayData* nData = new wxPerDisplayData();
m[display] = nData;
return *nData;
}
wxXVisualInfo* wxApp::GetVisualInfo( WXDisplay* display )
{
wxPerDisplayDataMap::iterator it = m_perDisplayData->find( display );
if( it != m_perDisplayData->end() && it->second.m_visualInfo )
return it->second.m_visualInfo;
wxPerDisplayData& data = GetOrCreatePerDisplayData( *m_perDisplayData,
display );
if( data.m_visualInfo )
return data.m_visualInfo;
wxXVisualInfo* vi = new wxXVisualInfo;
wxFillXVisualInfo( vi, (Display*)display );
(*m_perDisplayData)[display].m_visualInfo = vi;
data.m_visualInfo = vi;
return vi;
}
@@ -287,10 +298,10 @@ WXWidget wxCreateTopLevelWidget( WXDisplay* display )
WXWidget wxApp::GetTopLevelWidget()
{
WXDisplay* display = wxGetDisplay();
wxPerDisplayDataMap::iterator it = m_perDisplayData->find( display );
if( it != m_perDisplayData->end() && it->second.m_topLevelWidget )
return (WXWidget)it->second.m_topLevelWidget;
wxPerDisplayData& data = GetOrCreatePerDisplayData( *m_perDisplayData,
display );
if( data.m_topLevelWidget )
return (WXWidget)data.m_topLevelWidget;
WXWidget tlw = wxCreateTopLevelWidget( display );
SetTopLevelWidget( display, tlw );
@@ -300,7 +311,7 @@ WXWidget wxApp::GetTopLevelWidget()
void wxApp::SetTopLevelWidget(WXDisplay* display, WXWidget widget)
{
(*m_perDisplayData)[display].m_topLevelWidget = (Widget)widget;
(*m_perDisplayData)[display]->m_topLevelWidget = (Widget)widget;
}
// Yield to other processes