]> git.saurik.com Git - wxWidgets.git/commitdiff
hack: adjust C locale to supported form under HP-UX, otherwise we crash on startup
authorVadim Zeitlin <vadim@wxwidgets.org>
Sat, 8 Oct 2005 00:36:50 +0000 (00:36 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sat, 8 Oct 2005 00:36:50 +0000 (00:36 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@35835 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/motif/app.cpp

index b41edba1479a0f2c6bc3e2f068fea27232b7e9af..1b899d82cad8f69a62bc8e1e198fe525274a152e 100644 (file)
@@ -210,6 +210,38 @@ 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();