+ wxUpdateLocaleIsUtf8();
+
+ 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)*sizeof(*argv_));
+ }
+ }
+
+ argc_ = argcGTK;
+ argv_[argc_] = NULL;
+ }
+ //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
+
+ // update internal arg[cv] as GTK+ may have removed processed options:
+ this->argc = argc_;
+ this->argv = argv_;
+
+ if ( m_traits )
+ {
+ // if there are still GTK+ standard options unparsed in the command
+ // line, it means that they were not syntactically correct and GTK+
+ // already printed a warning on the command line and we should now
+ // exit:
+ wxArrayString opt, desc;
+ m_traits->GetStandardCmdLineOptions(opt, desc);
+
+ for ( i = 0; i < argc_; i++ )
+ {
+ // leave just the names of the options with values
+ const wxString str = wxString(argv_[i]).BeforeFirst('=');
+
+ for ( size_t j = 0; j < opt.size(); j++ )
+ {
+ // remove the leading spaces from the option string as it does
+ // have them
+ if ( opt[j].Trim(false).BeforeFirst('=') == str )
+ {
+ // a GTK+ option can be left on the command line only if
+ // there was an error in (or before, in another standard
+ // options) it, so abort, just as we do if incorrect
+ // program option is given
+ wxLogError(_("Invalid GTK+ command line option, use \"%s --help\""),
+ argv_[0]);
+ return false;
+ }
+ }
+ }
+ }
+
+ if ( !init_result )
+ {
+ wxLogError(_("Unable to initialize GTK+, is DISPLAY set properly?"));
+ return false;
+ }
+
+ // we can not enter threads before gtk_init is done
+ gdk_threads_enter();
+
+ wxSetDetectableAutoRepeat( true );