]> git.saurik.com Git - wxWidgets.git/blobdiff - src/cocoa/app.mm
guard against nullptr
[wxWidgets.git] / src / cocoa / app.mm
index 6bafffa5551566c20e02015f0271d159f499c326..c353fec89a93821c6f73e661a76428dcc7566b54 100644 (file)
@@ -7,7 +7,7 @@
 // RCS-ID:      $Id$
 // Copyright:   (c) David Elliott
 //              Software 2000 Ltd.
 // RCS-ID:      $Id$
 // Copyright:   (c) David Elliott
 //              Software 2000 Ltd.
-// Licence:     wxWidgets licence
+// Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
 #include "wx/wxprec.h"
 /////////////////////////////////////////////////////////////////////////////
 
 #include "wx/wxprec.h"
@@ -15,7 +15,6 @@
 #include "wx/app.h"
 
 #ifndef WX_PRECOMP
 #include "wx/app.h"
 
 #ifndef WX_PRECOMP
-    #include "wx/dc.h"
     #include "wx/intl.h"
     #include "wx/log.h"
     #include "wx/module.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/mbarman.h"
 #include "wx/cocoa/NSApplication.h"
 
+#include "wx/cocoa/dc.h"
+
 #import <AppKit/NSApplication.h>
 #import <Foundation/NSRunLoop.h>
 #import <Foundation/NSThread.h>
 #import <AppKit/NSApplication.h>
 #import <Foundation/NSRunLoop.h>
 #import <Foundation/NSThread.h>
@@ -115,7 +116,7 @@ bool wxApp::Initialize(int& argc, wxChar **argv)
     // application (otherwise applications would need to handle it)
     if ( argc > 1 )
     {
     // application (otherwise applications would need to handle it)
     if ( argc > 1 )
     {
-        static const wxChar *ARG_PSN = _T("-psn_");
+        static const wxChar *ARG_PSN = wxT("-psn_");
         if ( wxStrncmp(argv[1], ARG_PSN, wxStrlen(ARG_PSN)) == 0 )
         {
             // remove this argument
         if ( wxStrncmp(argv[1], ARG_PSN, wxStrlen(ARG_PSN)) == 0 )
         {
             // remove this argument
@@ -162,7 +163,7 @@ void wxApp::CleanUp()
 {
     wxAutoNSAutoreleasePool pool;
 
 {
     wxAutoNSAutoreleasePool pool;
 
-    wxDC::CocoaShutdownTextSystem();
+    wxCocoaDCImpl::CocoaShutdownTextSystem();
     wxMenuBarManager::DestroyInstance();
 
     [[NSNotificationCenter defaultCenter] removeObserver:sg_cocoaAppObserver];
     wxMenuBarManager::DestroyInstance();
 
     [[NSNotificationCenter defaultCenter] removeObserver:sg_cocoaAppObserver];
@@ -183,12 +184,10 @@ wxApp::wxApp()
 {
     m_topWindow = NULL;
 
 {
     m_topWindow = NULL;
 
-#ifdef __WXDEBUG__
-    m_isInAssert = false;
-#endif // __WXDEBUG__
-
     argc = 0;
     argc = 0;
+#if !wxUSE_UNICODE
     argv = NULL;
     argv = NULL;
+#endif
     m_cocoaApp = NULL;
     m_cocoaAppDelegate = NULL;
 }
     m_cocoaApp = NULL;
     m_cocoaAppDelegate = NULL;
 }
@@ -255,7 +254,7 @@ bool wxApp::OnInitGui()
     if(!sm_isEmbedded)
         wxMenuBarManager::CreateInstance();
 
     if(!sm_isEmbedded)
         wxMenuBarManager::CreateInstance();
 
-    wxDC::CocoaInitializeTextSystem();
+    wxCocoaDCImpl::CocoaInitializeTextSystem();
     return true;
 }
 
     return true;
 }
 
@@ -291,75 +290,6 @@ void wxApp::Exit()
     wxAppConsole::Exit();
 }
 
     wxAppConsole::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 ( !onlyIfNeeded )
-        {
-            wxFAIL_MSG( wxT("wxYield called recursively" ) );
-        }
-
-        return false;
-    }
-
-    s_inYield = true;
-
-    // Run the event loop until it is out of events
-    while(1)
-    {
-        wxAutoNSAutoreleasePool pool;
-        /*  NOTE: It may be better to use something like
-            NSEventTrackingRunLoopMode since we don't necessarily want all
-            timers/sources/observers to run, only those which would
-            run while tracking events.  However, it should be noted that
-            NSEventTrackingRunLoopMode is in the common set of modes
-            so it may not effectively make much of a difference.
-         */
-        NSEvent *event = [GetNSApplication()
-                nextEventMatchingMask:NSAnyEventMask
-                untilDate:[NSDate distantPast]
-                inMode:NSDefaultRunLoopMode
-                dequeue: YES];
-        if(!event)
-            break;
-        [GetNSApplication() sendEvent: event];
-    }
-
-    /*
-        Because we just told NSApplication to avoid blocking it will in turn
-        run the CFRunLoop with a timeout of 0 seconds.  In that case, our
-        run loop observer on kCFRunLoopBeforeWaiting never fires because
-        no waiting occurs.  Therefore, no idle events are sent.
-
-        Believe it or not, this is actually desirable because we do not want
-        to process idle from here.  However, we do want to process pending
-        events because some user code expects to do work in a thread while
-        the main thread waits and then notify the main thread by posting
-        an event.
-     */
-    ProcessPendingEvents();
-
-#if wxUSE_LOG
-    // let the logs be flashed again
-    wxLog::Resume();
-#endif // wxUSE_LOG
-
-    s_inYield = false;
-
-    return true;
-}
-
 void wxApp::WakeUpIdle()
 {
     /*  When called from the main thread the NSAutoreleasePool managed by
 void wxApp::WakeUpIdle()
 {
     /*  When called from the main thread the NSAutoreleasePool managed by
@@ -389,7 +319,7 @@ void wxApp::WakeUpIdle()
         done without exiting the runloop.
 
         Be careful if you decide to change the implementation of this method
         done without exiting the runloop.
 
         Be careful if you decide to change the implementation of this method
-        as wxEventLoop::Exit depends on the current behavior.
+        as wxEventLoop::Exit depends on the current behaviour.
      */
     [m_cocoaApp postEvent:[NSEvent otherEventWithType:NSApplicationDefined
             location:NSZeroPoint modifierFlags:NSAnyEventMask
      */
     [m_cocoaApp postEvent:[NSEvent otherEventWithType:NSApplicationDefined
             location:NSZeroPoint modifierFlags:NSAnyEventMask
@@ -424,7 +354,7 @@ static int sg_cApplicationWillUpdate = 0;
     before the run loop waits and send the idle events from there.
 
     It also has the desirable effect of only sending the wx idle events when
     before the run loop waits and send the idle events from there.
 
     It also has the desirable effect of only sending the wx idle events when
-    the event loop is actualy going to block.  If the event loop is being
+    the event loop is actually going to block.  If the event loop is being
     pumped manualy (e.g. like a PeekMessage) then the kCFRunLoopBeforeWaiting
     observer never fires.  Our Yield() method depends on this because sending
     idle events from within Yield would be bad.
     pumped manualy (e.g. like a PeekMessage) then the kCFRunLoopBeforeWaiting
     observer never fires.  Our Yield() method depends on this because sending
     idle events from within Yield would be bad.
@@ -532,15 +462,6 @@ void wxApp::CF_ObserveMainRunLoopBeforeWaiting(CFRunLoopObserverRef observer, in
     }
 }
 
     }
 }
 
-#ifdef __WXDEBUG__
-void wxApp::OnAssert(const wxChar *file, int line, const wxChar* cond, const wxChar *msg)
-{
-    m_isInAssert = true;
-    wxAppBase::OnAssert(file, line, cond, msg);
-    m_isInAssert = false;
-}
-#endif // __WXDEBUG__
-
 /*  A note about Cocoa's event loops vs. run loops:
 
     It's important to understand that Cocoa has a two-level event loop.  The
 /*  A note about Cocoa's event loops vs. run loops:
 
     It's important to understand that Cocoa has a two-level event loop.  The