]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/app.cpp
Attempt to fix Borland compilo
[wxWidgets.git] / src / mac / app.cpp
index 5671d057953ec556f3d5983578068352f6dbc705..788986f20ed0548f2302380b370fc2bdc527a28c 100644 (file)
@@ -69,6 +69,7 @@
 extern wxList wxPendingDelete;
 extern wxList *wxWinMacWindowList;
 extern wxList *wxWinMacControlList;
 extern wxList wxPendingDelete;
 extern wxList *wxWinMacWindowList;
 extern wxList *wxWinMacControlList;
+extern size_t g_numberOfThreads;
 
 // statics for implementation
 
 
 // statics for implementation
 
@@ -104,13 +105,14 @@ long      wxApp::sm_lastMessageTime = 0;
 long      wxApp::s_lastModifiers = 0 ;
 
 
 long      wxApp::s_lastModifiers = 0 ;
 
 
-bool      wxApp::s_macDefaultEncodingIsPC = true ;
 bool      wxApp::s_macSupportPCMenuShortcuts = true ;
 long      wxApp::s_macAboutMenuItemId = wxID_ABOUT ;
 long      wxApp::s_macPreferencesMenuItemId = wxID_PREFERENCES ;
 long      wxApp::s_macExitMenuItemId = wxID_EXIT ;
 wxString  wxApp::s_macHelpMenuTitleName = wxT("&Help") ;
 
 bool      wxApp::s_macSupportPCMenuShortcuts = true ;
 long      wxApp::s_macAboutMenuItemId = wxID_ABOUT ;
 long      wxApp::s_macPreferencesMenuItemId = wxID_PREFERENCES ;
 long      wxApp::s_macExitMenuItemId = wxID_EXIT ;
 wxString  wxApp::s_macHelpMenuTitleName = wxT("&Help") ;
 
+// Normally we're not a plugin
+bool      wxApp::sm_isEmbedded = false;
 //----------------------------------------------------------------------
 // Core Apple Event Support
 //----------------------------------------------------------------------
 //----------------------------------------------------------------------
 // Core Apple Event Support
 //----------------------------------------------------------------------
@@ -220,13 +222,12 @@ short wxApp::MacHandleAEOApp(const WXEVENTREF WXUNUSED(event) , WXEVENTREF WXUNU
 
 short wxApp::MacHandleAEQuit(const WXEVENTREF WXUNUSED(event) , WXEVENTREF WXUNUSED(reply))
 {
 
 short wxApp::MacHandleAEQuit(const WXEVENTREF WXUNUSED(event) , WXEVENTREF WXUNUSED(reply))
 {
/*   wxWindow* win = GetTopWindow() ;
      wxWindow* win = GetTopWindow() ;
     if ( win )
     {
         win->Close(TRUE ) ;
     }
     if ( win )
     {
         win->Close(TRUE ) ;
     }
-    else
- */
+       else
     {
         ExitMainLoop() ;
     }
     {
         ExitMainLoop() ;
     }
@@ -523,7 +524,7 @@ bool wxApp::Initialize(int& argc, wxChar **argv)
 
     // Mac-specific
 
 
     // Mac-specific
 
-    UMAInitToolbox( 4 ) ;
+    UMAInitToolbox( 4, sm_isEmbedded ) ;
     SetEventMask( everyEvent ) ;
     UMAShowWatchCursor() ;
 
     SetEventMask( everyEvent ) ;
     UMAShowWatchCursor() ;
 
@@ -601,7 +602,6 @@ bool wxApp::Initialize(int& argc, wxChar **argv)
 #endif
 
 #endif
 #endif
 
 #endif
-    wxMacSetupConverters() ;
 
     s_macCursorRgn = ::NewRgn() ;
 
 
     s_macCursorRgn = ::NewRgn() ;
 
@@ -612,10 +612,11 @@ bool wxApp::Initialize(int& argc, wxChar **argv)
     if ( argc > 1 )
     {
         static const wxChar *ARG_PSN = _T("-psn_");
     if ( argc > 1 )
     {
         static const wxChar *ARG_PSN = _T("-psn_");
-        if ( wxStrncmp(argv[1], ARG_PSN, sizeof(ARG_PSN) - 1) == 0 )
+        if ( wxStrncmp(argv[1], ARG_PSN, wxStrlen(ARG_PSN)) == 0 )
         {
             // remove this argument
         {
             // remove this argument
-            memmove(argv, argv + 1, argc--);
+            --argc;
+            memmove(argv + 1, argv + 2, argc * sizeof(char *));
         }
     }
 
         }
     }
 
@@ -640,38 +641,44 @@ bool wxApp::OnInitGui()
 #if TARGET_CARBON
     InstallStandardEventHandler( GetApplicationEventTarget() ) ;
 
 #if TARGET_CARBON
     InstallStandardEventHandler( GetApplicationEventTarget() ) ;
 
-    InstallApplicationEventHandler(
-        GetwxAppEventHandlerUPP(),
-        GetEventTypeCount(eventList), eventList, wxTheApp, (EventHandlerRef *)&(wxTheApp->m_macEventHandler));
+    if (!sm_isEmbedded)
+    {
+        InstallApplicationEventHandler(
+            GetwxAppEventHandlerUPP(),
+            GetEventTypeCount(eventList), eventList, wxTheApp, (EventHandlerRef *)&(wxTheApp->m_macEventHandler));
+    }
 #endif
 
 #endif
 
+    if (!sm_isEmbedded)
+    {
 #if defined(UNIVERSAL_INTERFACES_VERSION) && (UNIVERSAL_INTERFACES_VERSION >= 0x0340)
 #if defined(UNIVERSAL_INTERFACES_VERSION) && (UNIVERSAL_INTERFACES_VERSION >= 0x0340)
-    AEInstallEventHandler( kCoreEventClass , kAEOpenDocuments ,
-                           NewAEEventHandlerUPP(AEHandleODoc) ,
-                           0 , FALSE ) ;
-    AEInstallEventHandler( kCoreEventClass , kAEOpenApplication ,
-                           NewAEEventHandlerUPP(AEHandleOApp) ,
-                           0 , FALSE ) ;
-    AEInstallEventHandler( kCoreEventClass , kAEPrintDocuments ,
-                           NewAEEventHandlerUPP(AEHandlePDoc) ,
-                           0 , FALSE ) ;
-    AEInstallEventHandler( kCoreEventClass , kAEQuitApplication ,
-                           NewAEEventHandlerUPP(AEHandleQuit) ,
-                           0 , FALSE ) ;
+        AEInstallEventHandler( kCoreEventClass , kAEOpenDocuments ,
+                               NewAEEventHandlerUPP(AEHandleODoc) ,
+                               0 , FALSE ) ;
+        AEInstallEventHandler( kCoreEventClass , kAEOpenApplication ,
+                               NewAEEventHandlerUPP(AEHandleOApp) ,
+                               0 , FALSE ) ;
+        AEInstallEventHandler( kCoreEventClass , kAEPrintDocuments ,
+                               NewAEEventHandlerUPP(AEHandlePDoc) ,
+                               0 , FALSE ) ;
+        AEInstallEventHandler( kCoreEventClass , kAEQuitApplication ,
+                               NewAEEventHandlerUPP(AEHandleQuit) ,
+                               0 , FALSE ) ;
 #else
 #else
-    AEInstallEventHandler( kCoreEventClass , kAEOpenDocuments ,
-                           NewAEEventHandlerProc(AEHandleODoc) ,
-                           0 , FALSE ) ;
-    AEInstallEventHandler( kCoreEventClass , kAEOpenApplication ,
-                           NewAEEventHandlerProc(AEHandleOApp) ,
-                           0 , FALSE ) ;
-    AEInstallEventHandler( kCoreEventClass , kAEPrintDocuments ,
-                           NewAEEventHandlerProc(AEHandlePDoc) ,
-                           0 , FALSE ) ;
-    AEInstallEventHandler( kCoreEventClass , kAEQuitApplication ,
-                           NewAEEventHandlerProc(AEHandleQuit) ,
-                           0 , FALSE ) ;
+        AEInstallEventHandler( kCoreEventClass , kAEOpenDocuments ,
+                               NewAEEventHandlerProc(AEHandleODoc) ,
+                               0 , FALSE ) ;
+        AEInstallEventHandler( kCoreEventClass , kAEOpenApplication ,
+                               NewAEEventHandlerProc(AEHandleOApp) ,
+                               0 , FALSE ) ;
+        AEInstallEventHandler( kCoreEventClass , kAEPrintDocuments ,
+                               NewAEEventHandlerProc(AEHandlePDoc) ,
+                               0 , FALSE ) ;
+        AEInstallEventHandler( kCoreEventClass , kAEQuitApplication ,
+                               NewAEEventHandlerProc(AEHandleQuit) ,
+                               0 , FALSE ) ;
 #endif
 #endif
+    }
 
     return TRUE ;
 }
 
     return TRUE ;
 }
@@ -703,7 +710,6 @@ void wxApp::CleanUp()
     //   __wxterminate in Mach-O shared libraries
     wxStAppResource::CloseSharedLibraryResource();
 #endif
     //   __wxterminate in Mach-O shared libraries
     wxStAppResource::CloseSharedLibraryResource();
 #endif
-    wxMacCleanupConverters() ;
 
     UMACleanupToolbox() ;
     if (s_macCursorRgn) {
 
     UMACleanupToolbox() ;
     if (s_macCursorRgn) {
@@ -1009,15 +1015,9 @@ wxApp::wxApp()
   m_auto3D = TRUE;
 
   m_macCurrentEvent = NULL ;
   m_auto3D = TRUE;
 
   m_macCurrentEvent = NULL ;
+#if TARGET_CARBON
   m_macCurrentEventHandlerCallRef = NULL ;
   m_macCurrentEventHandlerCallRef = NULL ;
-}
-
-bool wxApp::Initialized()
-{
-  if (GetTopWindow())
-    return TRUE;
-  else
-    return FALSE;
+#endif
 }
 
 int wxApp::MainLoop()
 }
 
 int wxApp::MainLoop()
@@ -1050,9 +1050,11 @@ bool wxApp::Pending()
 }
 
 // Dispatch a message.
 }
 
 // Dispatch a message.
-void wxApp::Dispatch()
+bool wxApp::Dispatch()
 {
     MacDoOneEvent() ;
 {
     MacDoOneEvent() ;
+
+    return true;
 }
 
 void wxApp::OnIdle(wxIdleEvent& event)
 }
 
 void wxApp::OnIdle(wxIdleEvent& event)
@@ -1249,7 +1251,16 @@ void wxApp::MacDoOneEvent()
         if ( wxTheApp->ProcessIdle() )
             sleepTime = kEventDurationNoWait ;
         else
         if ( wxTheApp->ProcessIdle() )
             sleepTime = kEventDurationNoWait ;
         else
-            sleepTime = kEventDurationForever ;
+        {
+            if (g_numberOfThreads)
+            {
+                sleepTime = kEventDurationNoWait;
+            }
+            else
+            {
+                sleepTime = kEventDurationSecond;
+            }
+        }
     }
     else if ( status == eventLoopQuitErr )
     {
     }
     else if ( status == eventLoopQuitErr )
     {
@@ -1281,9 +1292,18 @@ void wxApp::MacDoOneEvent()
             ::IdleControls( window ) ;
 
         if ( wxTheApp->ProcessIdle() )
             ::IdleControls( window ) ;
 
         if ( wxTheApp->ProcessIdle() )
-            sleepTime = ;
+            sleepTime = kEventDurationNoWait;
         else
         else
-            sleepTime = GetCaretTime() / 2 ;
+        {
+            if (g_numberOfThreads)
+            {
+                sleepTime = kEventDurationNoWait;
+            }
+            else
+            {
+                sleepTime = kEventDurationSecond;
+            }
+        }
     }
     if ( event.what != kHighLevelEvent )
         SetRectRgn( (RgnHandle) s_macCursorRgn , event.where.h , event.where.v ,  event.where.h + 1 , event.where.v + 1 ) ;
     }
     if ( event.what != kHighLevelEvent )
         SetRectRgn( (RgnHandle) s_macCursorRgn , event.where.h , event.where.v ,  event.where.h + 1 , event.where.v + 1 ) ;
@@ -1294,13 +1314,22 @@ void wxApp::MacDoOneEvent()
     wxMacProcessNotifierAndPendingEvents() ;
 }
 
     wxMacProcessNotifierAndPendingEvents() ;
 }
 
+/*virtual*/ void wxApp::MacHandleUnhandledEvent( WXEVENTREF evr )
+{
+    // Override to process unhandled events as you please    
+}
+
 void wxApp::MacHandleOneEvent( WXEVENTREF evr )
 {
 #if TARGET_CARBON
     EventTargetRef theTarget;
     theTarget = GetEventDispatcherTarget();
     m_macCurrentEvent = evr ;
 void wxApp::MacHandleOneEvent( WXEVENTREF evr )
 {
 #if TARGET_CARBON
     EventTargetRef theTarget;
     theTarget = GetEventDispatcherTarget();
     m_macCurrentEvent = evr ;
-    SendEventToEventTarget ((EventRef) evr , theTarget);
+    OSStatus status = SendEventToEventTarget ((EventRef) evr , theTarget);
+    if(status == eventNotHandledErr)
+    {
+        MacHandleUnhandledEvent(evr);
+    }
 #else
     EventRecord* ev = (EventRecord*) evr ;
     m_macCurrentEvent = ev ;
 #else
     EventRecord* ev = (EventRecord*) evr ;
     m_macCurrentEvent = ev ;
@@ -1332,6 +1361,10 @@ void wxApp::MacHandleOneEvent( WXEVENTREF evr )
             MacHandleActivateEvent( ev ) ;
             break;
         case updateEvt:
             MacHandleActivateEvent( ev ) ;
             break;
         case updateEvt:
+            // In embedded mode we first let the UnhandledEvent function
+            // try to handle the update event. If we handle it ourselves
+            // first and then pass it on, the host's windows won't update.
+            MacHandleUnhandledEvent(ev);
             MacHandleUpdateEvent( ev ) ;
             break;
         case keyDown:
             MacHandleUpdateEvent( ev ) ;
             break;
         case keyDown:
@@ -1396,7 +1429,7 @@ void wxApp::MacHandleModifierEvents( WXEVENTREF evr )
             event.SetEventType( ( ev->modifiers & optionKey ) ? wxEVT_KEY_DOWN : wxEVT_KEY_UP ) ;
             focus->GetEventHandler()->ProcessEvent( event ) ;
         }
             event.SetEventType( ( ev->modifiers & optionKey ) ? wxEVT_KEY_DOWN : wxEVT_KEY_UP ) ;
             focus->GetEventHandler()->ProcessEvent( event ) ;
         }
-        if ( ev->modifiers ^ s_lastModifiers ) & cmdKey )
+        if ( ev->modifiers ^ s_lastModifiers ) & cmdKey )
         {
             event.m_keyCode = WXK_COMMAND ;
             event.SetEventType( ( ev->modifiers & cmdKey ) ? wxEVT_KEY_DOWN : wxEVT_KEY_UP ) ;
         {
             event.m_keyCode = WXK_COMMAND ;
             event.SetEventType( ( ev->modifiers & cmdKey ) ? wxEVT_KEY_DOWN : wxEVT_KEY_UP ) ;
@@ -1561,7 +1594,7 @@ void wxApp::MacHandleMouseDownEvent( WXEVENTREF evr )
                     {
                         // Activate window first
                         ::SelectWindow( window ) ;
                     {
                         // Activate window first
                         ::SelectWindow( window ) ;
-                        
+
                         // Send event later
                         if ( win )
                             win->MacMouseDown( ev , windowPart ) ;
                         // Send event later
                         if ( win )
                             win->MacMouseDown( ev , windowPart ) ;
@@ -2177,7 +2210,7 @@ void wxApp::MacHandleMouseMovedEvent(wxInt32 x , wxInt32 y ,wxUint32 modifiers ,
         event.m_controlDown = modifiers & controlKey;
         event.m_altDown = modifiers & optionKey;
         event.m_metaDown = modifiers & cmdKey;
         event.m_controlDown = modifiers & controlKey;
         event.m_altDown = modifiers & optionKey;
         event.m_metaDown = modifiers & cmdKey;
+
         event.m_x = x;
         event.m_y = y;
         event.m_timeStamp = timestamp;
         event.m_x = x;
         event.m_y = y;
         event.m_timeStamp = timestamp;