+ XDefaultRootWindow(XtDisplay((Widget) wxTheApp->GetTopLevelWidget())),
+ PropertyChangeMask);
+
+ m_mainLoop->Run();
+
+ return 0;
+}
+
+// This should be redefined in a derived class for
+// handling property change events for XAtom IPC.
+void wxApp::HandlePropertyChange(WXEvent *event)
+{
+ // by default do nothing special
+ XtDispatchEvent((XEvent*) event); /* let Motif do the work */
+}
+
+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__
+#if !wxMOTIF_USE_RENDER_TABLE
+ wxMOTIF_STR("*.fontList: -*-helvetica-medium-r-normal-*-*-120-*-*-*-*-*-*"),
+#else
+ wxMOTIF_STR("*wxDefaultRendition.fontName: -*-helvetica-medium-r-normal-*-*-120-*-*-*-*-*-*"),
+ wxMOTIF_STR("*wxDefaultRendition.fontType: FONT_IS_FONTSET"),
+ wxMOTIF_STR("*.renderTable: wxDefaultRendition"),
+#endif
+ wxMOTIF_STR("*listBox.background: white"),
+ wxMOTIF_STR("*text.background: white"),
+ wxMOTIF_STR("*comboBox.Text.background: white"),
+ wxMOTIF_STR("*comboBox.List.background: white"),
+#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);
+
+ // we shouldn't pass empty application/class name as it results in
+ // immediate crash inside XOpenIM() (if XIM is used) under IRIX
+ wxString appname = wxTheApp->GetAppName();
+ if ( appname.empty() )
+ appname = _T("wxapp");
+ wxString clsname = wxTheApp->GetClassName();
+ if ( clsname.empty() )
+ clsname = _T("wx");
+
+ // FIXME-UTF8: This code is taken from wxGTK and duplicated here. This
+ // is just a temporary fix to make wxX11 compile in Unicode
+ // build, the real fix is to change Initialize()'s signature
+ // to use char* on Unix.
+#if wxUSE_UNICODE
+ // XtOpenDisplay() wants char*, not wchar_t*, so convert
+ int i;
+ char **argvX11 = new char *[argc + 1];
+ for ( i = 0; i < argc; i++ )
+ {
+ argvX11[i] = strdup(wxConvLibc.cWX2MB(argv[i]));
+ }