merged 2.4 branch into the trunk

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@18040 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2002-12-04 14:11:26 +00:00
parent 59a944cb63
commit 2b5f62a0b2
1057 changed files with 37805 additions and 24034 deletions

View File

@@ -26,6 +26,7 @@
#include "wx/intl.h"
#include "wx/evtloop.h"
#include "wx/timer.h"
#include "wx/filename.h"
#include "wx/univ/theme.h"
#include "wx/univ/renderer.h"
@@ -57,8 +58,6 @@ wxApp *wxTheApp = NULL;
// This is set within wxEntryStart -- too early on
// to put these in wxTheApp
static int g_newArgc = 0;
static wxChar** g_newArgv = NULL;
static bool g_showIconic = FALSE;
static wxSize g_initialSize = wxDefaultSize;
@@ -136,10 +135,6 @@ bool wxApp::Initialize()
void wxApp::CleanUp()
{
if (g_newArgv)
delete[] g_newArgv;
g_newArgv = NULL;
delete wxWidgetHashTable;
wxWidgetHashTable = NULL;
delete wxClientWidgetHashTable;
@@ -197,20 +192,13 @@ int wxEntryStart( int& argc, char *argv[] )
#endif
#endif // __WXDEBUG__
wxString displayName;
char *displayName = NULL;
bool syncDisplay = FALSE;
// Parse the arguments.
// We can't use wxCmdLineParser or OnInitCmdLine and friends because
// we have to create the Display earlier. If we can find a way to
// use the wxAppBase API then I'll be quite happy to change it.
g_newArgv = new wxChar*[argc + 1];
g_newArgc = 0;
int i;
for (i = 0; i < argc; i++)
{
wxString arg(argv[i]);
if (arg == wxT("-display"))
if (strcmp( argv[i], "-display") == 0)
{
if (i < (argc - 1))
{
@@ -219,16 +207,15 @@ int wxEntryStart( int& argc, char *argv[] )
continue;
}
}
else if (arg == wxT("-geometry"))
else if (strcmp( argv[i], "-geometry") == 0)
{
if (i < (argc - 1))
{
i ++;
wxString windowGeometry = argv[i];
int w, h;
if (wxSscanf(windowGeometry.c_str(), _T("%dx%d"), &w, &h) != 2)
if (sscanf(argv[i], "%dx%d", &w, &h) != 2)
{
wxLogError(_("Invalid geometry specification '%s'"), windowGeometry.c_str());
wxLogError( _("Invalid geometry specification '%s'"), wxString::FromAscii(argv[i]).c_str() );
}
else
{
@@ -237,30 +224,22 @@ int wxEntryStart( int& argc, char *argv[] )
continue;
}
}
else if (arg == wxT("-sync"))
else if (strcmp( argv[i], "-sync") == 0)
{
syncDisplay = TRUE;
continue;
}
else if (arg == wxT("-iconic"))
else if (strcmp( argv[i], "-iconic") == 0)
{
g_showIconic = TRUE;
continue;
}
// Not eaten by wxWindows, so pass through
g_newArgv[g_newArgc] = argv[i];
g_newArgc ++;
}
g_newArgv[g_newArgc] = NULL;
Display* xdisplay = NULL;
if (displayName.IsEmpty())
xdisplay = XOpenDisplay(NULL);
else
xdisplay = XOpenDisplay((char*) displayName.c_str());
// X11 display stuff
Display* xdisplay = XOpenDisplay( displayName );
if (!xdisplay)
{
wxLogError( _("wxWindows could not open display. Exiting.") );
@@ -268,16 +247,20 @@ int wxEntryStart( int& argc, char *argv[] )
}
if (syncDisplay)
{
XSynchronize(xdisplay, True);
}
wxApp::ms_display = (WXDisplay*) xdisplay;
XSelectInput( xdisplay, XDefaultRootWindow(xdisplay), PropertyChangeMask);
// Misc.
wxSetDetectableAutoRepeat( TRUE );
#if wxUSE_UNICODE
// Glib's type system required by Pango
g_type_init();
#endif
if (!wxApp::Initialize())
return -1;
@@ -316,32 +299,39 @@ int wxEntry( int argc, char *argv[] )
{
printf( "wxWindows error: No initializer - use IMPLEMENT_APP macro.\n" );
return 0;
};
}
wxTheApp = (wxApp*) (* wxApp::GetInitializerFunction()) ();
};
}
if (!wxTheApp)
{
printf( "wxWindows error: wxTheApp == NULL\n" );
return 0;
};
wxTheApp->SetClassName(wxFileNameFromPath(argv[0]));
wxTheApp->SetAppName(wxFileNameFromPath(argv[0]));
// The command line may have been changed
// by stripping out -display etc.
if (g_newArgc > 0)
{
wxTheApp->argc = g_newArgc;
wxTheApp->argv = g_newArgv;
}
else
// Command line argument stuff
wxTheApp->argc = argc;
#if wxUSE_UNICODE
wxTheApp->argv = new wxChar*[argc+1];
int mb_argc = 0;
while (mb_argc < argc)
{
wxTheApp->argc = argc;
wxTheApp->argv = argv;
wxString tmp = wxString::FromAscii( argv[mb_argc] );
wxTheApp->argv[mb_argc] = wxStrdup( tmp.c_str() );
mb_argc++;
}
wxTheApp->argv[mb_argc] = (wxChar *)NULL;
#else
wxTheApp->argv = argv;
#endif
if (wxTheApp->argc > 0)
{
wxFileName fname( wxTheApp->argv[0] );
wxTheApp->SetAppName( fname.GetName() );
}
wxTheApp->m_showIconic = g_showIconic;
wxTheApp->m_initialSize = g_initialSize;
@@ -603,6 +593,9 @@ bool wxApp::ProcessXEvent(WXEvent* _event)
return TRUE;
keyEvent.SetEventType(wxEVT_CHAR);
// Do the translation again, retaining the ASCII
// code.
wxTranslateKeyEvent(keyEvent, win, window, event, TRUE);
if (win->GetEventHandler()->ProcessEvent( keyEvent ))
return TRUE;
@@ -1112,6 +1105,42 @@ bool wxApp::OnInitGui()
return TRUE;
}
#if wxUSE_UNICODE
#include <pango/pango.h>
#include <pango/pangox.h>
#include <pango/pangoxft.h>
PangoContext* wxApp::GetPangoContext()
{
static PangoContext *ret = NULL;
if (ret)
return ret;
Display *xdisplay = (Display*) wxApp::GetDisplay();
#if 1
int xscreen = DefaultScreen(xdisplay);
static int use_xft = -1;
if (use_xft == -1)
{
wxString val = wxGetenv( L"GDK_USE_XFT" );
use_xft = (val == L"1");
}
if (use_xft)
ret = pango_xft_get_context( xdisplay, xscreen );
else
#endif
ret = pango_x_get_context( xdisplay );
if (!PANGO_IS_CONTEXT(ret))
wxLogError( wxT("No pango context.") );
return ret;
}
#endif
WXColormap wxApp::GetMainColormap(WXDisplay* display)
{
if (!display) /* Must be called first with non-NULL display */
@@ -1205,6 +1234,10 @@ bool wxApp::Yield(bool onlyIfNeeded)
wxEventLoop::SetActive(newEventLoop);
}
// Call dispatch at least once so that sockets
// can be tested
wxTheApp->Dispatch();
while (wxTheApp && wxTheApp->Pending())
wxTheApp->Dispatch();