]> git.saurik.com Git - wxWidgets.git/commitdiff
Look for and remove any "-NSKey" "value" types of options from argv just like
authorDavid Elliott <dfe@tgwbd.org>
Thu, 25 Oct 2007 18:01:36 +0000 (18:01 +0000)
committerDavid Elliott <dfe@tgwbd.org>
Thu, 25 Oct 2007 18:01:36 +0000 (18:01 +0000)
the -psn_XXXX option is removed.  This allows Cocoa debug options like
-NSShowAllViews YES to be used as with any other Cocoa program.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@49438 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/cocoa/app.mm

index c5e4f3dc32d57e1496f0f34de5a6784681fa2684..6bafffa5551566c20e02015f0271d159f499c326 100644 (file)
@@ -124,6 +124,37 @@ bool wxApp::Initialize(int& argc, wxChar **argv)
         }
     }
 
+    /*
+        Cocoa supports -Key value options which set the user defaults key "Key"
+        to the value "value"  Some of them are very handy for debugging like
+        -NSShowAllViews YES.  Cocoa picks these up from the real argv so
+        our removal of them from the wx copy of it does not affect Cocoa's
+        ability to see them.
+
+        We basically just assume that any "-NS" option and its following
+        argument needs to be removed from argv.  We hope that user code does
+        not expect to see -NS options and indeed it's probably a safe bet
+        since most user code accepting options is probably using the
+        double-dash GNU-style syntax.
+     */
+    for(int i=1; i < argc; ++i)
+    {
+        static const wxChar *ARG_NS = wxT("-NS");
+        static const int ARG_NS_LEN = wxStrlen(ARG_NS);
+        if( wxStrncmp(argv[i], ARG_NS, ARG_NS_LEN) == 0 )
+        {
+            // Only eat this option if it has an argument
+            if( (i + 1) < argc )
+            {
+                argc -= 2;
+                memmove(argv + i, argv + i + 2, argc * sizeof(wxChar*));
+                // drop back one position so the next run through the loop
+                // reprocesses the argument at our current index.
+                --i;
+            }
+        }
+    }
+
     return wxAppBase::Initialize(argc, argv);
 }