struct wxPerDisplayData
{
wxPerDisplayData()
- { m_visualInfo = NULL; m_topLevelWidget = NULL; }
+ {
+ m_visualInfo = NULL;
+ m_topLevelWidget = NULL;
+ m_topLevelRealizedWidget = NULL;
+ }
wxXVisualInfo* m_visualInfo;
- Widget m_topLevelWidget;
+ Widget m_topLevelWidget, m_topLevelRealizedWidget;
};
static void wxTLWidgetDestroyCallback(Widget w, XtPointer clientData,
END_EVENT_TABLE()
#ifdef __WXDEBUG__
+extern "C"
+{
typedef int (*XErrorHandlerFunc)(Display *, XErrorEvent *);
+}
- XErrorHandlerFunc gs_pfnXErrorHandler = 0;
+XErrorHandlerFunc gs_pfnXErrorHandler = 0;
- static int wxXErrorHandler(Display *dpy, XErrorEvent *xevent)
- {
- // just forward to the default handler for now
- return gs_pfnXErrorHandler(dpy, xevent);
- }
+extern "C"
+{
+
+static int wxXErrorHandler(Display *dpy, XErrorEvent *xevent)
+{
+ // just forward to the default handler for now
+ return gs_pfnXErrorHandler(dpy, xevent);
+}
+
+}
#endif // __WXDEBUG__
-bool wxApp::Initialize(int& argc, wxChar **argv)
+bool wxApp::Initialize(int& argcOrig, wxChar **argvOrig)
{
- if ( !wxAppBase::Initialize(argc, argv) )
+ if ( !wxAppBase::Initialize(argcOrig, argvOrig) )
return false;
wxWidgetHashTable = new wxHashTable(wxKEY_INTEGER);
+#if wxUSE_INTL
+ wxFont::SetDefaultEncoding(wxLocale::GetSystemEncoding());
+#endif
+
return true;
}
void wxApp::CleanUp()
{
+ wxAppBase::CleanUp();
+
delete wxWidgetHashTable;
wxWidgetHashTable = NULL;
- wxAppBase::CleanUp();
+ 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;
+ }
+
+ delete m_perDisplayData;
}
void wxApp::Exit()
wxApp::~wxApp()
{
- 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;
- }
-
- delete m_perDisplayData;
-
wxApp::SetInstance(NULL);
}
}
static char *fallbackResources[] = {
- "*menuBar.marginHeight: 0",
- "*menuBar.shadowThickness: 1",
- "*background: #c0c0c0",
- "*foreground: black",
+ // better defaults for CDE under Irix
+ //
+ // TODO: do something similar for the other systems, the hardcoded defaults
+ // below are ugly
+#ifdef __SGI__
+ wxMOTIF_STR("*sgiMode: True"),
+ wxMOTIF_STR("*useSchemes: all"),
+#else // !__SGI__
+ wxMOTIF_STR("*menuBar.marginHeight: 0"),
+ wxMOTIF_STR("*menuBar.shadowThickness: 1"),
+ wxMOTIF_STR("*background: #c0c0c0"),
+ wxMOTIF_STR("*foreground: black"),
+#endif // __SGI__/!__SGI__
NULL
};
bool wxApp::OnInitGui()
{
if( !wxAppBase::OnInitGui() )
- return FALSE;
+ return false;
+ XtSetLanguageProc(NULL, NULL, NULL);
XtToolkitInitialize() ;
wxTheApp->m_appContext = (WXAppContext) XtCreateApplicationContext();
XtAppSetFallbackResources((XtAppContext) wxTheApp->m_appContext, fallbackResources);
// if you don't log to stderr, nothing will be shown...
delete wxLog::SetActiveTarget(new wxLogStderr);
wxString className(wxTheApp->GetClassName());
- wxLogError(_("wxWindows could not open display for '%s': exiting."),
+ wxLogError(_("wxWidgets could not open display for '%s': exiting."),
className.c_str());
exit(-1);
}
// Add general resize proc
XtActionsRec rec;
- rec.string = "resize";
+ rec.string = wxMOTIF_STR("resize");
rec.proc = (XtActionProc)wxWidgetResizeProc;
XtAppAddActions((XtAppContext) wxTheApp->m_appContext, &rec, 1);
wxAddIdleCallback();
- return TRUE;
+ return true;
}
WXColormap wxApp::GetMainColormap(WXDisplay* display)
XtPointer ptr)
{
if( wxTheApp )
+ {
wxTheApp->SetTopLevelWidget( (WXDisplay*)XtDisplay(w),
(WXWidget)NULL );
+ wxTheApp->SetTopLevelRealizedWidget( (WXDisplay*)XtDisplay(w),
+ (WXWidget)NULL );
+ }
}
WXWidget wxCreateTopLevelWidget( WXDisplay* display )
applicationShellWidgetClass,
(Display*)display,
NULL, 0 );
- XtSetMappedWhenManaged( tlw, False );
- XtRealizeWidget( tlw );
+ XtVaSetValues( tlw,
+ XmNoverrideRedirect, True,
+ NULL );
XtAddCallback( tlw, XmNdestroyCallback,
(XtCallbackProc)wxTLWidgetDestroyCallback,
return (WXWidget)tlw;
}
+WXWidget wxCreateTopLevelRealizedWidget( WXDisplay* display )
+{
+ Widget rTlw = XtVaCreateWidget( "dummy_widget", topLevelShellWidgetClass,
+ (Widget)wxTheApp->GetTopLevelWidget(),
+ NULL, 0 );
+ XtSetMappedWhenManaged( rTlw, False );
+ XtRealizeWidget( rTlw );
+
+ return (WXWidget)rTlw;
+}
+
WXWidget wxApp::GetTopLevelWidget()
{
WXDisplay* display = wxGetDisplay();
return tlw;
}
+WXWidget wxApp::GetTopLevelRealizedWidget()
+{
+ WXDisplay* display = wxGetDisplay();
+ wxPerDisplayDataMap::iterator it = m_perDisplayData->find( display );
+
+ if( it != m_perDisplayData->end() && it->second->m_topLevelRealizedWidget )
+ return (WXWidget)it->second->m_topLevelRealizedWidget;
+
+ WXWidget rTlw = wxCreateTopLevelRealizedWidget( display );
+ SetTopLevelRealizedWidget( display, rTlw );
+
+ return rTlw;
+}
+
void wxApp::SetTopLevelWidget(WXDisplay* display, WXWidget widget)
{
- (*m_perDisplayData)[display]->m_topLevelWidget = (Widget)widget;
+ GetOrCreatePerDisplayData( *m_perDisplayData, display )
+ .m_topLevelWidget = (Widget)widget;
+}
+
+void wxApp::SetTopLevelRealizedWidget(WXDisplay* display, WXWidget widget)
+{
+ GetOrCreatePerDisplayData( *m_perDisplayData, display )
+ .m_topLevelRealizedWidget = (Widget)widget;
}
// Yield to other processes
bool wxApp::Yield(bool onlyIfNeeded)
{
- static bool s_inYield = FALSE;
+ static bool s_inYield = false;
if ( s_inYield )
{
wxFAIL_MSG( wxT("wxYield called recursively" ) );
}
- return FALSE;
+ return false;
}
- s_inYield = TRUE;
+ s_inYield = true;
while (wxTheApp && wxTheApp->Pending())
wxTheApp->Dispatch();
- s_inYield = FALSE;
+ s_inYield = false;
- return TRUE;
+ return true;
}
// ----------------------------------------------------------------------------