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

7071
configure vendored

File diff suppressed because it is too large Load Diff

View File

@@ -1800,6 +1800,31 @@ if test "$wxUSE_STL" = "yes"; then
AC_DEFINE(HAVE_STD_STRING_COMPARE)], AC_DEFINE(HAVE_STD_STRING_COMPARE)],
[AC_MSG_RESULT(no)]) [AC_MSG_RESULT(no)])
dnl check for hash_map and hash_set headers
AC_CHECK_HEADER([hash_map],
[AC_MSG_CHECKING([for hash_map and hash_set])
AC_TRY_COMPILE([#include <hash_map>
#include <hash_set>],
[std::hash_map<double*, char*, std::hash<double*>, std::equal_to<double*> > test1;
std::hash_set<char*, std::hash<char*>, std::equal_to<char*> > test2;],
[AC_MSG_RESULT(yes)
AC_DEFINE(HAVE_HASH_MAP)
AC_DEFINE(HAVE_STD_HASH_MAP)],
[AC_MSG_RESULT(no)])
])
AC_CHECK_HEADER([ext/hash_map],
[AC_MSG_CHECKING([for hash_map and hash_set])
AC_TRY_COMPILE([#include <ext/hash_map>
#include <ext/hash_set>],
[__gnu_cxx::hash_map<double*, char*, __gnu_cxx::hash<double*>, std::equal_to<double*> > test1;
__gnu_cxx::hash_set<char*, __gnu_cxx::hash<char*>, std::equal_to<char*> > test2;],
[AC_MSG_RESULT(yes)
AC_DEFINE(HAVE_EXT_HASH_MAP)
AC_DEFINE(HAVE_GNU_CXX_HASH_MAP)],
[AC_MSG_RESULT(no)])
])
AC_LANG_POP AC_LANG_POP
fi fi

View File

@@ -103,6 +103,9 @@ All:
- wxDynamicCast() now uses static_cast<wxObject *> internally and so using it - wxDynamicCast() now uses static_cast<wxObject *> internally and so using it
with anything not deriving from wxObject will fail at compile time (instead with anything not deriving from wxObject will fail at compile time (instead
of run-time) now of run-time) now
- 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.
All (GUI): All (GUI):

View File

@@ -23,12 +23,14 @@
#if wxUSE_FILESYSTEM && wxUSE_FS_ZIP && wxUSE_STREAMS #if wxUSE_FILESYSTEM && wxUSE_FS_ZIP && wxUSE_STREAMS
#include "wx/filesys.h" #include "wx/filesys.h"
#include "wx/hashmap.h"
class WXDLLIMPEXP_BASE wxLongToLongHashMap; WX_DECLARE_HASH_MAP_WITH_DECL( long, long, wxIntegerHash, wxIntegerEqual,
wxLongToLongHashMap, class WXDLLIMPEXP_BASE );
//-------------------------------------------------------------------------------- //---------------------------------------------------------------------------
// wxZipFSHandler // wxZipFSHandler
//-------------------------------------------------------------------------------- //---------------------------------------------------------------------------
class WXDLLIMPEXP_BASE wxZipFSHandler : public wxFileSystemHandler class WXDLLIMPEXP_BASE wxZipFSHandler : public wxFileSystemHandler
{ {

View File

@@ -24,6 +24,7 @@
#include "wx/list.h" #include "wx/list.h"
#include "wx/string.h" #include "wx/string.h"
#include "wx/fontenc.h" #include "wx/fontenc.h"
#include "wx/hashmap.h"
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
// forward declarations // forward declarations
@@ -439,7 +440,7 @@ public:
wxFontEncoding encoding = wxFONTENCODING_DEFAULT); wxFontEncoding encoding = wxFONTENCODING_DEFAULT);
}; };
class WXDLLEXPORT wxStringToColourHashMap; WX_DECLARE_STRING_HASH_MAP( wxColour *, wxStringToColourHashMap );
class WXDLLEXPORT wxColourDatabase class WXDLLEXPORT wxColourDatabase
{ {

View File

@@ -18,6 +18,30 @@
#include "wx/string.h" #include "wx/string.h"
#if (defined(HAVE_EXT_HASH_MAP) || defined(HAVE_HASH_MAP)) \
&& (defined(HAVE_GNU_CXX_HASH_MAP) || defined(HAVE_STD_HASH_MAP))
#define HAVE_STL_HASH_MAP
#endif
#if wxUSE_STL && defined(HAVE_STL_HASH_MAP)
#if defined(HAVE_EXT_HASH_MAP)
#include <ext/hash_map>
#elif defined(HAVE_HASH_MAP)
#include <hash_map>
#endif
#if defined(HAVE_GNU_CXX_HASH_MAP)
#define WX_HASH_MAP_NAMESPACE __gnu_cxx
#elif defined(HAVE_STD_HASH_MAP)
#define WX_HASH_MAP_NAMESPACE std
#endif
#define _WX_DECLARE_HASH_MAP( KEY_T, VALUE_T, HASH_T, KEY_EQ_T, CLASSNAME, CLASSEXP ) \
typedef WX_HASH_MAP_NAMESPACE::hash_map< KEY_T, VALUE_T, HASH_T, KEY_EQ_T > CLASSNAME;
#else // !wxUSE_STL || !defined(HAVE_STL_HASH_MAP)
#include <stddef.h> // for ptrdiff_t #include <stddef.h> // for ptrdiff_t
#ifdef __WXWINCE__ #ifdef __WXWINCE__
@@ -408,6 +432,8 @@ inline bool grow_lf70( size_t buckets, size_t items )
return float(items)/float(buckets) >= 0.85; return float(items)/float(buckets) >= 0.85;
} }
#endif // !wxUSE_STL || !defined(HAVE_STL_HASH_MAP)
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// hashing and comparison functors // hashing and comparison functors
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
@@ -416,6 +442,31 @@ inline bool grow_lf70( size_t buckets, size_t items )
// operators to suppress warnings about "statement with no effect" from gcc // operators to suppress warnings about "statement with no effect" from gcc
// in the hash table class assignment operator (where they're assigned) // in the hash table class assignment operator (where they're assigned)
#if wxUSE_STL && defined(HAVE_STL_HASH_MAP)
// integer types
class WXDLLIMPEXP_BASE wxIntegerHash
{
WX_HASH_MAP_NAMESPACE::hash<long> longHash;
WX_HASH_MAP_NAMESPACE::hash<unsigned long> ulongHash;
WX_HASH_MAP_NAMESPACE::hash<int> intHash;
WX_HASH_MAP_NAMESPACE::hash<unsigned int> uintHash;
WX_HASH_MAP_NAMESPACE::hash<short> shortHash;
WX_HASH_MAP_NAMESPACE::hash<unsigned short> ushortHash;
public:
wxIntegerHash() { }
size_t operator()( long x ) const { return longHash( x ); }
size_t operator()( unsigned long x ) const { return ulongHash( x ); }
size_t operator()( int x ) const { return intHash( x ); }
size_t operator()( unsigned int x ) const { return uintHash( x ); }
size_t operator()( short x ) const { return shortHash( x ); }
size_t operator()( unsigned short x ) const { return ushortHash( x ); }
wxIntegerHash& operator=(const wxIntegerHash&) { return *this; }
};
#else // !wxUSE_STL || !defined(HAVE_STL_HASH_MAP)
// integer types // integer types
class WXDLLIMPEXP_BASE wxIntegerHash class WXDLLIMPEXP_BASE wxIntegerHash
{ {
@@ -431,6 +482,8 @@ public:
wxIntegerHash& operator=(const wxIntegerHash&) { return *this; } wxIntegerHash& operator=(const wxIntegerHash&) { return *this; }
}; };
#endif // !wxUSE_STL || !defined(HAVE_STL_HASH_MAP)
class WXDLLIMPEXP_BASE wxIntegerEqual class WXDLLIMPEXP_BASE wxIntegerEqual
{ {
public: public:
@@ -453,7 +506,11 @@ public:
// TODO: this might not work well on architectures with 64 bit pointers but // TODO: this might not work well on architectures with 64 bit pointers but
// 32 bit longs, we should use % ULONG_MAX there // 32 bit longs, we should use % ULONG_MAX there
#if wxUSE_STL && defined(HAVE_STL_HASH_MAP)
size_t operator()( const void* k ) const { return (size_t)k; }
#else
unsigned long operator()( const void* k ) const { return (unsigned long)wxPtrToULong(k); } unsigned long operator()( const void* k ) const { return (unsigned long)wxPtrToULong(k); }
#endif
wxPointerHash& operator=(const wxPointerHash&) { return *this; } wxPointerHash& operator=(const wxPointerHash&) { return *this; }
}; };
@@ -502,6 +559,8 @@ public:
wxStringEqual& operator=(const wxStringEqual&) { return *this; } wxStringEqual& operator=(const wxStringEqual&) { return *this; }
}; };
#if !wxUSE_STL || !defined(HAVE_STL_HASH_MAP)
#define _WX_DECLARE_HASH_MAP( KEY_T, VALUE_T, HASH_T, KEY_EQ_T, CLASSNAME, CLASSEXP ) \ #define _WX_DECLARE_HASH_MAP( KEY_T, VALUE_T, HASH_T, KEY_EQ_T, CLASSNAME, CLASSEXP ) \
_WX_DECLARE_PAIR( KEY_T, VALUE_T, CLASSNAME##_wxImplementation_Pair, CLASSEXP ) \ _WX_DECLARE_PAIR( KEY_T, VALUE_T, CLASSNAME##_wxImplementation_Pair, CLASSEXP ) \
_WX_DECLARE_HASH_MAP_KEY_EX( KEY_T, CLASSNAME##_wxImplementation_Pair, CLASSNAME##_wxImplementation_KeyEx, CLASSEXP ) \ _WX_DECLARE_HASH_MAP_KEY_EX( KEY_T, CLASSNAME##_wxImplementation_Pair, CLASSNAME##_wxImplementation_KeyEx, CLASSEXP ) \
@@ -543,6 +602,8 @@ public: \
{ return GetNode( key ) ? 1 : 0; } \ { return GetNode( key ) ? 1 : 0; } \
} }
#endif // !wxUSE_STL || !defined(HAVE_STL_HASH_MAP)
// these macros are to be used in the user code // these macros are to be used in the user code
#define WX_DECLARE_HASH_MAP( KEY_T, VALUE_T, HASH_T, KEY_EQ_T, CLASSNAME) \ #define WX_DECLARE_HASH_MAP( KEY_T, VALUE_T, HASH_T, KEY_EQ_T, CLASSNAME) \
_WX_DECLARE_HASH_MAP( KEY_T, VALUE_T, HASH_T, KEY_EQ_T, CLASSNAME, class ) _WX_DECLARE_HASH_MAP( KEY_T, VALUE_T, HASH_T, KEY_EQ_T, CLASSNAME, class )

View File

@@ -14,6 +14,19 @@
#include "wx/hashmap.h" #include "wx/hashmap.h"
#if wxUSE_STL && defined(HAVE_STL_HASH_MAP)
#if defined(HAVE_EXT_HASH_MAP)
#include <ext/hash_set>
#elif defined(HAVE_HASH_MAP)
#include <hash_set>
#endif
#define _WX_DECLARE_HASH_SET( KEY_T, HASH_T, KEY_EQ_T, CLASSNAME, CLASSEXP )\
typedef WX_HASH_MAP_NAMESPACE::hash_set< KEY_T, HASH_T, KEY_EQ_T > CLASSNAME;
#else // !wxUSE_STL || !defined(HAVE_STL_HASH_MAP)
// this is a complex way of defining an easily inlineable identity function... // this is a complex way of defining an easily inlineable identity function...
#define _WX_DECLARE_HASH_SET_KEY_EX( KEY_T, CLASSNAME, CLASSEXP ) \ #define _WX_DECLARE_HASH_SET_KEY_EX( KEY_T, CLASSNAME, CLASSEXP ) \
CLASSEXP CLASSNAME \ CLASSEXP CLASSNAME \
@@ -68,6 +81,8 @@ public: \
{ return GetNode( key ) ? 1 : 0; } \ { return GetNode( key ) ? 1 : 0; } \
} }
#endif // !wxUSE_STL || !defined(HAVE_STL_HASH_MAP)
// these macros are to be used in the user code // these macros are to be used in the user code
#define WX_DECLARE_HASH_SET( KEY_T, HASH_T, KEY_EQ_T, CLASSNAME) \ #define WX_DECLARE_HASH_SET( KEY_T, HASH_T, KEY_EQ_T, CLASSNAME) \
_WX_DECLARE_HASH_SET( KEY_T, HASH_T, KEY_EQ_T, CLASSNAME, class ) _WX_DECLARE_HASH_SET( KEY_T, HASH_T, KEY_EQ_T, CLASSNAME, class )

View File

@@ -21,6 +21,7 @@
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
#include "wx/event.h" #include "wx/event.h"
#include "wx/hashmap.h"
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// forward declarations // forward declarations
@@ -33,12 +34,14 @@ class WXDLLEXPORT wxKeyEvent;
class WXDLLEXPORT wxLog; class WXDLLEXPORT wxLog;
class WXDLLEXPORT wxEventLoop; class WXDLLEXPORT wxEventLoop;
class WXDLLEXPORT wxXVisualInfo; class WXDLLEXPORT wxXVisualInfo;
class wxPerDisplayDataMap; class WXDLLEXPORT wxPerDisplayData;
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// the wxApp class for Motif - see wxAppBase for more details // the wxApp class for Motif - see wxAppBase for more details
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
WX_DECLARE_VOIDPTR_HASH_MAP( wxPerDisplayData*, wxPerDisplayDataMap );
class WXDLLEXPORT wxApp : public wxAppBase class WXDLLEXPORT wxApp : public wxAppBase
{ {
DECLARE_DYNAMIC_CLASS(wxApp) DECLARE_DYNAMIC_CLASS(wxApp)

View File

@@ -20,6 +20,7 @@
#include "wx/event.h" #include "wx/event.h"
#include "wx/cmndata.h" #include "wx/cmndata.h"
#include "wx/intl.h" #include "wx/intl.h"
#include "wx/hashmap.h"
/* /*
* Paper type: see defs.h for wxPaperSize enum. * Paper type: see defs.h for wxPaperSize enum.
@@ -69,7 +70,8 @@ private:
DECLARE_DYNAMIC_CLASS(wxPrintPaperType) DECLARE_DYNAMIC_CLASS(wxPrintPaperType)
}; };
class WXDLLEXPORT wxStringToPrintPaperTypeHashMap; WX_DECLARE_STRING_HASH_MAP(wxPrintPaperType*, wxStringToPrintPaperTypeHashMap);
class WXDLLEXPORT wxPrintPaperTypeList; class WXDLLEXPORT wxPrintPaperTypeList;
class WXDLLEXPORT wxPrintPaperDatabase class WXDLLEXPORT wxPrintPaperDatabase

View File

@@ -52,13 +52,15 @@ protected:
}; };
typedef wxStringToStringHashMap::iterator wxHeaderIterator; typedef wxStringToStringHashMap::iterator wxHeaderIterator;
typedef wxStringToStringHashMap::const_iterator wxHeaderConstIterator;
bool BuildRequest(const wxString& path, wxHTTP_Req req); bool BuildRequest(const wxString& path, wxHTTP_Req req);
void SendHeaders(); void SendHeaders();
bool ParseHeaders(); bool ParseHeaders();
// find the header in m_headers // find the header in m_headers
wxHeaderIterator FindHeader(const wxString& header) const; wxHeaderIterator FindHeader(const wxString& header);
wxHeaderConstIterator FindHeader(const wxString& header) const;
// deletes the header value strings // deletes the header value strings
void ClearHeaders(); void ClearHeaders();

View File

@@ -173,9 +173,25 @@
*/ */
#undef HAVE_STD_WSTRING #undef HAVE_STD_WSTRING
/* /*
* Define if your compiler has compilant std::string::compare * Define if your compiler has compliant std::string::compare
*/ */
#undef HAVE_STD_STRING_COMPARE #undef HAVE_STD_STRING_COMPARE
/*
* Define if your compiler has <hash_map>
*/
#undef HAVE_HASH_MAP
/*
* Define if your compiler has <ext/hash_map>
*/
#undef HAVE_EXT_HASH_MAP
/*
* Define if your compiler has std::hash_map/hash_set
*/
#undef HAVE_STD_HASH_MAP
/*
* Define if your compiler has __gnu_cxx::hash_map/hash_set
*/
#undef HAVE_GNU_CXX_HASH_MAP
/* /*
* use STL for containers and wxString * use STL for containers and wxString

View File

@@ -26,7 +26,6 @@
#include "wx/log.h" #include "wx/log.h"
#endif #endif
#include "wx/hashmap.h"
#include "wx/filesys.h" #include "wx/filesys.h"
#include "wx/zipstrm.h" #include "wx/zipstrm.h"
#include "wx/fs_zip.h" #include "wx/fs_zip.h"
@@ -38,9 +37,6 @@
#include "unzip.h" #include "unzip.h"
#endif #endif
WX_DECLARE_HASH_MAP_WITH_DECL( long, long, wxIntegerHash, wxIntegerEqual,
wxLongToLongHashMap, class WXDLLIMPEXP_BASE );
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
// wxZipFSHandler // wxZipFSHandler
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------

View File

@@ -60,6 +60,8 @@ unsigned long wxStringHash::charStringHash( const char* k )
} }
#endif #endif
#if !wxUSE_STL || !defined(HAVE_STL_HASH_MAP)
/* from SGI STL */ /* from SGI STL */
const unsigned long _wxHashTableBase2::ms_primes[prime_count] = const unsigned long _wxHashTableBase2::ms_primes[prime_count] =
{ {
@@ -151,3 +153,4 @@ _wxHashTable_NodeBase* _wxHashTableBase2::DummyProcessNode(_wxHashTable_NodeBase
return node; return node;
} }
#endif // !wxUSE_STL || !defined(HAVE_STL_HASH_MAP)

View File

@@ -71,13 +71,22 @@ void wxHTTP::SetProxyMode(bool on)
m_proxy_mode = on; m_proxy_mode = on;
} }
wxHTTP::wxHeaderIterator wxHTTP::FindHeader(const wxString& header) const wxHTTP::wxHeaderIterator wxHTTP::FindHeader(const wxString& header)
{ {
// we can't convert between const_iterator to iterator otherwise... wxHeaderIterator it = m_headers.begin();
wxStringToStringHashMap& headers = (wxStringToStringHashMap&)m_headers; for ( wxHeaderIterator en = m_headers.end(); it != en; ++it )
{
if ( wxStricmp(it->first, header) == 0 )
break;
}
wxHeaderIterator it = headers.begin(); return it;
for ( wxHeaderIterator en = headers.end(); it != en; ++it ) }
wxHTTP::wxHeaderConstIterator wxHTTP::FindHeader(const wxString& header) const
{
wxHeaderConstIterator it = m_headers.begin();
for ( wxHeaderConstIterator en = m_headers.end(); it != en; ++it )
{ {
if ( wxStricmp(it->first, header) == 0 ) if ( wxStricmp(it->first, header) == 0 )
break; break;
@@ -102,7 +111,7 @@ void wxHTTP::SetHeader(const wxString& header, const wxString& h_data)
wxString wxHTTP::GetHeader(const wxString& header) const wxString wxHTTP::GetHeader(const wxString& header) const
{ {
wxHeaderIterator it = FindHeader(header); wxHeaderConstIterator it = FindHeader(header);
return it == m_headers.end() ? wxGetEmptyString() : it->second; return it == m_headers.end() ? wxGetEmptyString() : it->second;
} }

View File

@@ -33,7 +33,6 @@
#include "wx/paper.h" #include "wx/paper.h"
#include "wx/module.h" #include "wx/module.h"
#include "wx/hashmap.h"
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
@@ -84,7 +83,6 @@ wxSize wxPrintPaperType::GetSizeDeviceUnits() const
* Print paper database for PostScript * Print paper database for PostScript
*/ */
WX_DECLARE_STRING_HASH_MAP(wxPrintPaperType*, wxStringToPrintPaperTypeHashMap);
WX_DECLARE_LIST(wxPrintPaperType, wxPrintPaperTypeList); WX_DECLARE_LIST(wxPrintPaperType, wxPrintPaperTypeList);
#include "wx/listimpl.cpp" #include "wx/listimpl.cpp"
WX_DEFINE_LIST(wxPrintPaperTypeList); WX_DEFINE_LIST(wxPrintPaperTypeList);

View File

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