-static char *fallbackResources[] = {
- // 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
-};
-
-// Create an application context
-bool wxApp::OnInitGui()
-{
- if( !wxAppBase::OnInitGui() )
- return false;
-
-#ifdef __HPUX__
- // under HP-UX creating XmFontSet fails when the system locale is C and
- // we're using a remote DISPLAY, presumably because HP-UX uses its own
- // names for C and ISO locales (roman8 and iso8859n respectively) and so
- // its Motif libraries have troubles with non-HP X server
- //
- // whatever the reason, the fact is that without this hack any wxMotif
- // program crashes on startup because it can't create any font (HP programs
- // still work but they do spit out messages about failing to create font
- // sets and failing back on "fixed" font too)
- //
- // notice that calling setlocale() here is not enough because X(m) init
- // functions call setlocale() later so we really have to change environment
- bool fixAll = false; // tweak LC_ALL (or just LC_CTYPE)?
- const char *loc = getenv("LC_CTYPE");
- if ( !loc )
- {
- loc = getenv("LC_ALL");
- if ( loc )
- fixAll = true;
- }
-
- if ( !loc ||
- (loc[0] == 'C' && loc[1] == '\0') ||
- strcmp(loc, "POSIX") == 0 )
- {
- // we're using C locale, "fix" it
- wxLogDebug(_T("HP-UX fontset hack: forcing locale to en_US.iso88591"));
- putenv(fixAll ? "LC_ALL=en_US.iso88591" : "LC_CTYPE=en_US.iso88591");
- }
-#endif // __HPUX__
-
- XtSetLanguageProc(NULL, NULL, NULL);
- XtToolkitInitialize() ;
- wxTheApp->m_appContext = (WXAppContext) XtCreateApplicationContext();
- XtAppSetFallbackResources((XtAppContext) wxTheApp->m_appContext, fallbackResources);
-
- Display *dpy = XtOpenDisplay((XtAppContext) wxTheApp->m_appContext,(String)NULL,NULL,
- wxTheApp->GetClassName().c_str(), NULL, 0,
-# if XtSpecificationRelease < 5
- (Cardinal*) &argc,
-# else
- &argc,
-# endif
- argv);
-
- if (!dpy) {
- // if you don't log to stderr, nothing will be shown...
- delete wxLog::SetActiveTarget(new wxLogStderr);
- wxString className(wxTheApp->GetClassName());
- wxLogError(_("wxWidgets could not open display for '%s': exiting."),
- className.c_str());
- exit(-1);
- }
- m_initialDisplay = (WXDisplay*) dpy;
-
-#ifdef __WXDEBUG__
- // install the X error handler
- gs_pfnXErrorHandler = XSetErrorHandler(wxXErrorHandler);
-#endif // __WXDEBUG__
-
- // Add general resize proc
- XtActionsRec rec;
- rec.string = wxMOTIF_STR("resize");
- rec.proc = (XtActionProc)wxWidgetResizeProc;
- XtAppAddActions((XtAppContext) wxTheApp->m_appContext, &rec, 1);
-
- GetMainColormap(dpy);
-
- wxAddIdleCallback();
-
- return true;
-}
-