+ bool init_result;
+
+#if wxUSE_THREADS
+ // GTK 1.2 up to version 1.2.3 has broken threads
+ if ((gtk_major_version == 1) &&
+ (gtk_minor_version == 2) &&
+ (gtk_micro_version < 4))
+ {
+ printf( "wxWidgets warning: GUI threading disabled due to outdated GTK version\n" );
+ }
+ else
+ {
+ if (!g_thread_supported())
+ g_thread_init(NULL);
+ }
+#endif // wxUSE_THREADS
+
+ gtk_set_locale();
+
+ // We should have the wxUSE_WCHAR_T test on the _outside_
+#if wxUSE_WCHAR_T
+ #if defined(__WXGTK20__)
+ // gtk+ 2.0 supports Unicode through UTF-8 strings
+ wxConvCurrent = &wxConvUTF8;
+ #else // GTK 1.x
+ if (!wxOKlibc())
+ wxConvCurrent = &wxConvLocal;
+ #endif
+#else // !wxUSE_WCHAR_T
+ if (!wxOKlibc())
+ wxConvCurrent = (wxMBConv*) NULL;
+#endif // wxUSE_WCHAR_T/!wxUSE_WCHAR_T
+
+#if wxUSE_UNICODE
+ // gtk_init() wants UTF-8, not wchar_t, so convert
+ int i;
+ char **argvGTK = new char *[argc + 1];
+ for ( i = 0; i < argc; i++ )
+ {
+ argvGTK[i] = wxStrdupA(wxConvUTF8.cWX2MB(argv[i]));
+ }
+
+ argvGTK[argc] = NULL;
+
+ int argcGTK = argc;
+
+#ifdef __WXGPE__
+ init_result = true; // is there a _check() version of this?
+ gpe_application_init( &argcGTK, &argvGTK );
+#else
+ init_result = gtk_init_check( &argcGTK, &argvGTK );
+#endif
+
+ if ( argcGTK != argc )
+ {
+ // we have to drop the parameters which were consumed by GTK+
+ for ( i = 0; i < argcGTK; i++ )
+ {
+ while ( strcmp(wxConvUTF8.cWX2MB(argv[i]), argvGTK[i]) != 0 )
+ {
+ memmove(argv + i, argv + i + 1, argc - i);
+ }
+ }
+
+ argc = argcGTK;
+ }
+ //else: gtk_init() didn't modify our parameters
+
+ // free our copy
+ for ( i = 0; i < argcGTK; i++ )
+ {
+ free(argvGTK[i]);
+ }
+
+ delete [] argvGTK;
+#else // !wxUSE_UNICODE
+ // gtk_init() shouldn't actually change argv itself (just its contents) so
+ // it's ok to pass pointer to it
+ init_result = gtk_init_check( &argc, &argv );
+#endif // wxUSE_UNICODE/!wxUSE_UNICODE
+
+ if (!init_result) {
+ wxLogError(wxT("Unable to initialize gtk, is DISPLAY set properly?"));
+ return false;
+ }