From: Václav Slavík Date: Wed, 9 May 2007 16:48:11 +0000 (+0000) Subject: temporary fix for wxDFB compilation in Unicode mode X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/b11af9ed9d759a86275a4d28d59ba17b7f2c8d69 temporary fix for wxDFB compilation in Unicode mode git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@45919 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/dfb/app.cpp b/src/dfb/app.cpp index 68cb00037d..c78010f081 100644 --- a/src/dfb/app.cpp +++ b/src/dfb/app.cpp @@ -45,9 +45,56 @@ bool wxApp::Initialize(int& argc, wxChar **argv) if ( !wxAppBase::Initialize(argc, argv) ) return false; + // FIXME-UTF8: This code is taken from wxGTK and duplicated here. This + // is just a temporary fix to make wxDFB compile in Unicode + // build, the real fix is to change Initialize()'s signature + // to use char* on Unix. +#if wxUSE_UNICODE + // DirectFBInit() wants UTF-8, not wchar_t, so convert + int i; + char **argvDFB = new char *[argc + 1]; + for ( i = 0; i < argc; i++ ) + { + argvDFB[i] = strdup(wxConvUTF8.cWX2MB(argv[i])); + } + + argvDFB[argc] = NULL; + + int argcDFB = argc; + + if ( !wxDfbCheckReturn(DirectFBInit(&argcDFB, &argvDFB)) ) + return false; + + if ( argcDFB != argc ) + { + // we have to drop the parameters which were consumed by DFB+ + for ( i = 0; i < argcDFB; i++ ) + { + while ( strcmp(wxConvUTF8.cWX2MB(argv[i]), argvDFB[i]) != 0 ) + { + memmove(argv + i, argv + i + 1, (argc - i)*sizeof(*argv)); + } + } + + argc = argcDFB; + } + //else: DirectFBInit() didn't modify our parameters + + // free our copy + for ( i = 0; i < argcDFB; i++ ) + { + free(argvDFB[i]); + } + + delete [] argvDFB; + +#else // ANSI + if ( !wxDfbCheckReturn(DirectFBInit(&argc, &argv)) ) return false; +#endif // Unicode/ANSI + // update internal arg[cv] as DFB may have removed processed options: this->argc = argc; this->argv = argv;