/////////////////////////////////////////////////////////////////////////////
-// Name: app.cpp
+// Name: src/motif/app.cpp
// Purpose: wxApp
// Author: Julian Smart
// Modified by:
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
-#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
- #pragma implementation "app.h"
-#endif
-
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
it != end; ++it )
{
delete it->second->m_visualInfo;
+ // On Solaris 10 calling XtDestroyWidget on the top level widget
+ // dumps core if the locale is set to something other than "C"
+#ifndef __SUN__
XtDestroyWidget( it->second->m_topLevelWidget );
+#endif
delete it->second;
}
XtDispatchEvent((XEvent*) event); /* let Motif do the work */
}
-// some compilers (e.g. Sun CC) give warnings when treating string literals as
-// (non const) "char *" so use this macro to suppress them when we know it's ok
-#define STR(x) wx_const_cast(char *, x)
-
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__
- STR("*sgiMode: True"),
- STR("*useSchemes: all"),
+ wxMOTIF_STR("*sgiMode: True"),
+ wxMOTIF_STR("*useSchemes: all"),
#else // !__SGI__
- STR("*menuBar.marginHeight: 0"),
- STR("*menuBar.shadowThickness: 1"),
- STR("*background: #c0c0c0"),
- STR("*foreground: black"),
+ wxMOTIF_STR("*menuBar.marginHeight: 0"),
+ wxMOTIF_STR("*menuBar.shadowThickness: 1"),
+ wxMOTIF_STR("*background: #c0c0c0"),
+ wxMOTIF_STR("*foreground: black"),
#endif // __SGI__/!__SGI__
NULL
};
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();
// Add general resize proc
XtActionsRec rec;
- rec.string = STR("resize");
+ rec.string = wxMOTIF_STR("resize");
rec.proc = (XtActionProc)wxWidgetResizeProc;
XtAppAddActions((XtAppContext) wxTheApp->m_appContext, &rec, 1);
return vi;
}
-static void wxTLWidgetDestroyCallback(Widget w, XtPointer clientData,
- XtPointer ptr)
+static void wxTLWidgetDestroyCallback(Widget w, XtPointer WXUNUSED(clientData),
+ XtPointer WXUNUSED(ptr))
{
if( wxTheApp )
{
return (WXWidget)tlw;
}
-WXWidget wxCreateTopLevelRealizedWidget( WXDisplay* display )
+WXWidget wxCreateTopLevelRealizedWidget( WXDisplay* WXUNUSED(display) )
{
Widget rTlw = XtVaCreateWidget( "dummy_widget", topLevelShellWidgetClass,
(Widget)wxTheApp->GetTopLevelWidget(),