#pragma implementation "app.h"
#endif
+// For compilers that support precompilation, includes "wx.h".
+#include "wx/wxprec.h"
+
#ifdef __VMS
#define XtParent XTPARENT
#define XtDisplay XTDISPLAY
#include "wx/intl.h"
#include "wx/evtloop.h"
#include "wx/hash.h"
-#include "wx/hashmap.h"
#if wxUSE_THREADS
#include "wx/thread.h"
Widget m_topLevelWidget;
};
-WX_DECLARE_VOIDPTR_HASH_MAP( wxPerDisplayData, wxPerDisplayDataMap );
-
static void wxTLWidgetDestroyCallback(Widget w, XtPointer clientData,
XtPointer ptr);
static WXWidget wxCreateTopLevelWidget( WXDisplay* display );
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;
return (WXColormap) c;
}
-wxXVisualInfo* wxApp::GetVisualInfo( WXDisplay* display )
+static inline wxPerDisplayData& GetOrCreatePerDisplayData
+ ( wxPerDisplayDataMap& m, WXDisplay* display )
{
- wxPerDisplayDataMap::iterator it = m_perDisplayData->find( display );
+ wxPerDisplayDataMap::iterator it = m.find( display );
+ if( it != m.end() && it->second != NULL )
+ return *(it->second);
- if( it != m_perDisplayData->end() && it->second.m_visualInfo )
- return it->second.m_visualInfo;
+ wxPerDisplayData* nData = new wxPerDisplayData();
+ m[display] = nData;
+
+ return *nData;
+}
+
+wxXVisualInfo* wxApp::GetVisualInfo( WXDisplay* display )
+{
+ 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;
}
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 );
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