#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 );
argc = 0;
argv = NULL;
- m_eventLoop = new wxEventLoop;
+ m_mainLoop = new wxEventLoop;
m_mainColormap = (WXColormap) NULL;
m_appContext = (WXAppContext) NULL;
m_initialDisplay = (WXDisplay*) 0;
wxApp::~wxApp()
{
- delete m_eventLoop;
+ delete m_mainLoop;
for( wxPerDisplayDataMap::iterator it = m_perDisplayData->begin(),
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;
wxApp::SetInstance(NULL);
}
-bool wxApp::Initialized()
-{
- if (GetTopWindow())
- return TRUE;
- else
- return FALSE;
-}
-
int wxApp::MainLoop()
{
/*
XDefaultRootWindow(XtDisplay((Widget) wxTheApp->GetTopLevelWidget())),
PropertyChangeMask);
- m_eventLoop->Run();
+ m_mainLoop->Run();
return 0;
}
-void wxApp::ExitMainLoop()
-{
- if( m_eventLoop->IsRunning() )
- m_eventLoop->Exit();
-}
-
// This should be redefined in a derived class for
// handling property change events for XAtom IPC.
void wxApp::HandlePropertyChange(WXEvent *event)
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);
+
+ wxPerDisplayData* nData = new wxPerDisplayData();
+ m[display] = nData;
+
+ return *nData;
+}
- if( it != m_perDisplayData->end() && it->second.m_visualInfo )
- return it->second.m_visualInfo;
+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
bool wxApp::Yield(bool onlyIfNeeded)
{
- bool s_inYield = FALSE;
+ static bool s_inYield = FALSE;
if ( s_inYield )
{