compilation fix after argv changes (move initialization from OnInitGui() to Initialize() where the original command line arguments are accessible)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@50398 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
c5c5395b60
commit
8ecf734646
@ -56,8 +56,6 @@ public:
|
||||
virtual bool Yield(bool onlyIfNeeded = false);
|
||||
virtual void WakeUpIdle(); // implemented in motif/evtloop.cpp
|
||||
|
||||
virtual bool OnInitGui();
|
||||
|
||||
// implementation from now on
|
||||
// --------------------------
|
||||
|
||||
|
@ -93,127 +93,17 @@ static int wxXErrorHandler(Display *dpy, XErrorEvent *xevent)
|
||||
}
|
||||
#endif // __WXDEBUG__
|
||||
|
||||
bool wxApp::Initialize(int& argcOrig, wxChar **argvOrig)
|
||||
bool wxApp::Initialize(int& argc_, wxChar **argv_)
|
||||
{
|
||||
#if wxUSE_INTL
|
||||
wxFont::SetDefaultEncoding(wxLocale::GetSystemEncoding());
|
||||
#endif
|
||||
|
||||
if ( !wxAppBase::Initialize(argcOrig, argvOrig) )
|
||||
if ( !wxAppBase::Initialize(argc_, argv_) )
|
||||
return false;
|
||||
|
||||
wxWidgetHashTable = new wxHashTable(wxKEY_INTEGER);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void wxApp::CleanUp()
|
||||
{
|
||||
wxAppBase::CleanUp();
|
||||
|
||||
delete wxWidgetHashTable;
|
||||
wxWidgetHashTable = NULL;
|
||||
|
||||
delete m_mainLoop;
|
||||
|
||||
for( wxPerDisplayDataMap::iterator it = m_perDisplayData->begin(),
|
||||
end = m_perDisplayData->end();
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
void wxApp::Exit()
|
||||
{
|
||||
wxApp::CleanUp();
|
||||
|
||||
wxAppConsole::Exit();
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// wxApp
|
||||
// ============================================================================
|
||||
|
||||
wxApp::wxApp()
|
||||
{
|
||||
argc = 0;
|
||||
argv = NULL;
|
||||
|
||||
m_mainLoop = new wxEventLoop;
|
||||
m_mainColormap = (WXColormap) NULL;
|
||||
m_appContext = (WXAppContext) NULL;
|
||||
m_initialDisplay = (WXDisplay*) 0;
|
||||
m_perDisplayData = new wxPerDisplayDataMap;
|
||||
}
|
||||
|
||||
wxApp::~wxApp()
|
||||
{
|
||||
delete m_perDisplayData;
|
||||
}
|
||||
|
||||
int wxApp::MainLoop()
|
||||
{
|
||||
/*
|
||||
* Sit around forever waiting to process X-events. Property Change
|
||||
* event are handled special, because they have to refer to
|
||||
* the root window rather than to a widget. therefore we can't
|
||||
* use an Xt-eventhandler.
|
||||
*/
|
||||
|
||||
XSelectInput(XtDisplay((Widget) wxTheApp->GetTopLevelWidget()),
|
||||
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
|
||||
@ -249,6 +139,30 @@ bool wxApp::OnInitGui()
|
||||
XtSetLanguageProc(NULL, NULL, NULL);
|
||||
XtToolkitInitialize() ;
|
||||
wxTheApp->m_appContext = (WXAppContext) XtCreateApplicationContext();
|
||||
|
||||
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
|
||||
};
|
||||
XtAppSetFallbackResources((XtAppContext) wxTheApp->m_appContext, fallbackResources);
|
||||
|
||||
// we shouldn't pass empty application/class name as it results in
|
||||
@ -270,7 +184,7 @@ bool wxApp::OnInitGui()
|
||||
char **argvX11 = new char *[argc + 1];
|
||||
for ( i = 0; i < argc; i++ )
|
||||
{
|
||||
argvX11[i] = strdup(wxConvLibc.cWX2MB(argv[i]));
|
||||
argvX11[i] = strdup(wxConvLibc.cWX2MB(argv_[i]));
|
||||
}
|
||||
|
||||
argvX11[argc] = NULL;
|
||||
@ -294,13 +208,17 @@ bool wxApp::OnInitGui()
|
||||
// we have to drop the parameters which were consumed by X11+
|
||||
for ( i = 0; i < argcX11; i++ )
|
||||
{
|
||||
while ( strcmp(wxConvLibc.cWX2MB(argv[i]), argvX11[i]) != 0 )
|
||||
while ( strcmp(wxConvLibc.cWX2MB(argv_[i]), argvX11[i]) != 0 )
|
||||
{
|
||||
memmove(argv + i, argv + i + 1, (argc - i)*sizeof(*argv));
|
||||
memmove(argv_ + i, argv_ + i + 1, (argc - i)*sizeof(*argv_));
|
||||
}
|
||||
}
|
||||
|
||||
argc = argcX11;
|
||||
|
||||
// update internal arg[cv] as X11 may have removed processed options:
|
||||
argc = argc_;
|
||||
argv = argv_;
|
||||
}
|
||||
//else: XtOpenDisplay() didn't modify our parameters
|
||||
|
||||
@ -356,6 +274,80 @@ bool wxApp::OnInitGui()
|
||||
return true;
|
||||
}
|
||||
|
||||
void wxApp::CleanUp()
|
||||
{
|
||||
wxAppBase::CleanUp();
|
||||
|
||||
delete wxWidgetHashTable;
|
||||
wxWidgetHashTable = NULL;
|
||||
|
||||
delete m_mainLoop;
|
||||
|
||||
for( wxPerDisplayDataMap::iterator it = m_perDisplayData->begin(),
|
||||
end = m_perDisplayData->end();
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
void wxApp::Exit()
|
||||
{
|
||||
wxApp::CleanUp();
|
||||
|
||||
wxAppConsole::Exit();
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// wxApp
|
||||
// ============================================================================
|
||||
|
||||
wxApp::wxApp()
|
||||
{
|
||||
m_mainLoop = new wxEventLoop;
|
||||
m_mainColormap = (WXColormap) NULL;
|
||||
m_appContext = (WXAppContext) NULL;
|
||||
m_initialDisplay = (WXDisplay*) 0;
|
||||
m_perDisplayData = new wxPerDisplayDataMap;
|
||||
}
|
||||
|
||||
wxApp::~wxApp()
|
||||
{
|
||||
delete m_perDisplayData;
|
||||
}
|
||||
|
||||
int wxApp::MainLoop()
|
||||
{
|
||||
/*
|
||||
* Sit around forever waiting to process X-events. Property Change
|
||||
* event are handled special, because they have to refer to
|
||||
* the root window rather than to a widget. therefore we can't
|
||||
* use an Xt-eventhandler.
|
||||
*/
|
||||
|
||||
XSelectInput(XtDisplay((Widget) wxTheApp->GetTopLevelWidget()),
|
||||
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 */
|
||||
}
|
||||
|
||||
WXColormap wxApp::GetMainColormap(WXDisplay* display)
|
||||
{
|
||||
if (!display) /* Must be called first with non-NULL display */
|
||||
|
Loading…
Reference in New Issue
Block a user