]> git.saurik.com Git - wxWidgets.git/blobdiff - src/cocoa/app.mm
fix VC6 ICE; don't call the function which doesn't compare the objects operator=...
[wxWidgets.git] / src / cocoa / app.mm
index c5e4f3dc32d57e1496f0f34de5a6784681fa2684..662859f0912fb5b66fc9e3dc36534877357ce51e 100644 (file)
@@ -15,7 +15,6 @@
 #include "wx/app.h"
 
 #ifndef WX_PRECOMP
-    #include "wx/dc.h"
     #include "wx/intl.h"
     #include "wx/log.h"
     #include "wx/module.h"
@@ -26,6 +25,8 @@
 #include "wx/cocoa/mbarman.h"
 #include "wx/cocoa/NSApplication.h"
 
+#include "wx/cocoa/dc.h"
+
 #import <AppKit/NSApplication.h>
 #import <Foundation/NSRunLoop.h>
 #import <Foundation/NSThread.h>
@@ -124,6 +125,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);
 }
 
@@ -131,7 +163,7 @@ void wxApp::CleanUp()
 {
     wxAutoNSAutoreleasePool pool;
 
-    wxDC::CocoaShutdownTextSystem();
+    wxCocoaDCImpl::CocoaShutdownTextSystem();
     wxMenuBarManager::DestroyInstance();
 
     [[NSNotificationCenter defaultCenter] removeObserver:sg_cocoaAppObserver];
@@ -157,7 +189,9 @@ wxApp::wxApp()
 #endif // __WXDEBUG__
 
     argc = 0;
+#if !wxUSE_UNICODE
     argv = NULL;
+#endif
     m_cocoaApp = NULL;
     m_cocoaAppDelegate = NULL;
 }
@@ -224,7 +258,7 @@ bool wxApp::OnInitGui()
     if(!sm_isEmbedded)
         wxMenuBarManager::CreateInstance();
 
-    wxDC::CocoaInitializeTextSystem();
+    wxCocoaDCImpl::CocoaInitializeTextSystem();
     return true;
 }
 
@@ -263,16 +297,13 @@ void wxApp::Exit()
 // Yield to other processes
 bool wxApp::Yield(bool onlyIfNeeded)
 {
-    // MT-FIXME
-    static bool s_inYield = false;
-
 #if wxUSE_LOG
     // disable log flushing from here because a call to wxYield() shouldn't
     // normally result in message boxes popping up &c
     wxLog::Suspend();
 #endif // wxUSE_LOG
 
-    if (s_inYield)
+    if (m_isInsideYield)
     {
         if ( !onlyIfNeeded )
         {
@@ -282,7 +313,7 @@ bool wxApp::Yield(bool onlyIfNeeded)
         return false;
     }
 
-    s_inYield = true;
+    m_isInsideYield = true;
 
     // Run the event loop until it is out of events
     while(1)
@@ -324,7 +355,7 @@ bool wxApp::Yield(bool onlyIfNeeded)
     wxLog::Resume();
 #endif // wxUSE_LOG
 
-    s_inYield = false;
+    m_isInsideYield = false;
 
     return true;
 }