#include "wx/pen.h"
#include "wx/brush.h"
#include "wx/cursor.h"
+#include "wx/intl.h"
#include "wx/icon.h"
#include "wx/palette.h"
#include "wx/dc.h"
#if wxUSE_SOCKETS
#ifdef __APPLE__
- #include <OT/OpenTransport.h>
+ #include <CoreServices/CoreServices.h>
#else
#include <OpenTransport.h>
#include <OpenTptInternet.h>
long wxApp::s_macAboutMenuItemId = wxID_ABOUT ;
wxString wxApp::s_macHelpMenuTitleName = "&Help" ;
+#if defined(UNIVERSAL_INTERFACES_VERSION) && (UNIVERSAL_INTERFACES_VERSION >= 0x0340)
+pascal OSErr AEHandleODoc( const AppleEvent *event , AppleEvent *reply , long refcon )
+#else
pascal OSErr AEHandleODoc( const AppleEvent *event , AppleEvent *reply , unsigned long refcon )
+#endif
{
wxApp* app = (wxApp*) refcon ;
return wxTheApp->MacHandleAEODoc( (AppleEvent*) event , reply) ;
}
+#if defined(UNIVERSAL_INTERFACES_VERSION) && (UNIVERSAL_INTERFACES_VERSION >= 0x0340)
+pascal OSErr AEHandleOApp( const AppleEvent *event , AppleEvent *reply , long refcon )
+#else
pascal OSErr AEHandleOApp( const AppleEvent *event , AppleEvent *reply , unsigned long refcon )
+#endif
{
wxApp* app = (wxApp*) refcon ;
return wxTheApp->MacHandleAEOApp( (AppleEvent*) event , reply ) ;
}
+#if defined(UNIVERSAL_INTERFACES_VERSION) && (UNIVERSAL_INTERFACES_VERSION >= 0x0340)
+pascal OSErr AEHandlePDoc( const AppleEvent *event , AppleEvent *reply , long refcon )
+#else
pascal OSErr AEHandlePDoc( const AppleEvent *event , AppleEvent *reply , unsigned long refcon )
+#endif
{
wxApp* app = (wxApp*) refcon ;
return wxTheApp->MacHandleAEPDoc( (AppleEvent*) event , reply ) ;
}
+#if defined(UNIVERSAL_INTERFACES_VERSION) && (UNIVERSAL_INTERFACES_VERSION >= 0x0340)
+pascal OSErr AEHandleQuit( const AppleEvent *event , AppleEvent *reply , long refcon )
+#else
pascal OSErr AEHandleQuit( const AppleEvent *event , AppleEvent *reply , unsigned long refcon )
+#endif
{
wxApp* app = (wxApp*) refcon ;
return wxTheApp->MacHandleAEQuit( (AppleEvent*) event , reply) ;
// Mac-specific
UMAInitToolbox( 4 ) ;
+ SetEventMask( everyEvent ) ;
UMAShowWatchCursor() ;
#ifdef __UNIX__
(long) wxTheApp , FALSE ) ;
#else
AEInstallEventHandler( kCoreEventClass , kAEOpenDocuments , NewAEEventHandlerProc(AEHandleODoc) ,
- (long) wxTheApp , FALSE ) ;
+ (long) wxTheApp , FALSE ) ;
AEInstallEventHandler( kCoreEventClass , kAEOpenApplication , NewAEEventHandlerProc(AEHandleOApp) ,
- (long) wxTheApp , FALSE ) ;
+ (long) wxTheApp , FALSE ) ;
AEInstallEventHandler( kCoreEventClass , kAEPrintDocuments , NewAEEventHandlerProc(AEHandlePDoc) ,
- (long) wxTheApp , FALSE ) ;
+ (long) wxTheApp , FALSE ) ;
AEInstallEventHandler( kCoreEventClass , kAEQuitApplication , NewAEEventHandlerProc(AEHandleQuit) ,
- (long) wxTheApp , FALSE ) ;
+ (long) wxTheApp , FALSE ) ;
#endif
+#ifndef __UNIX__
// test the minimal configuration necessary
+ #if !TARGET_CARBON
long theSystem ;
- long theMachine;
+ long theMachine;
if (Gestalt(gestaltMachineType, &theMachine) != noErr)
{
{
error = kMacSTROldSystem ;
}
- #if !TARGET_CARBON
else if ((long)GetApplLimit() - (long)ApplicationZone() < kMacMinHeap)
{
error = kMacSTRSmallSize;
}
}
*/
+#endif
// if we encountered any problems so far, give the error code and exit immediately
wxTheColourDatabase = new wxColourDatabase(wxKEY_STRING);
wxTheColourDatabase->Initialize();
+#if wxUSE_LOG
+ // flush the logged messages if any and install a 'safer' log target: the
+ // default one (wxLogGui) can't be used after the resources are freed just
+ // below and the user suppliedo ne might be even more unsafe (using any
+ // wxWindows GUI function is unsafe starting from now)
+ wxLog::DontCreateOnDemand();
+
+ // this will flush the old messages if any
+ delete wxLog::SetActiveTarget(new wxLogStderr);
+#endif // wxUSE_LOG
+
wxInitializeStockLists();
wxInitializeStockObjects();
}
// Yield to other processes
+
+static bool gs_inYield = FALSE;
+
bool wxYield()
{
+#ifdef __WXDEBUG__
+ if (gs_inYield)
+ wxFAIL_MSG( wxT("wxYield called recursively" ) );
+#endif
+
+ gs_inYield = TRUE;
+
#if wxUSE_THREADS
- YieldToAnyThread() ;
+ YieldToAnyThread() ;
#endif
- EventRecord event ;
+ EventRecord event ;
long sleepTime = 0 ; //::GetCaretTime();
}
wxMacProcessNotifierAndPendingEvents() ;
- return TRUE;
+
+ gs_inYield = FALSE;
+
+ return TRUE;
+}
+
+// Yield to incoming messages; but fail silently if recursion is detected.
+bool wxYieldIfNeeded()
+{
+ if (gs_inYield)
+ return FALSE;
+
+ return wxYield();
}
// platform specifics
{
EventRecord event ;
- long sleepTime = ::GetCaretTime();
+ long sleepTime = 1 ; // GetCaretTime() / 4 ;
if (WaitNextEvent(everyEvent, &event,sleepTime, s_macCursorRgn))
{
// repeaters
+ DeletePendingObjects() ;
wxMacProcessNotifierAndPendingEvents() ;
}
short windowPart = ::FindWindow(ev->where, &window);
wxWindow* win = wxFindWinFromMacWindow( window ) ;
+ if ( wxPendingDelete.Member(win) )
+ return ;
BitMap screenBits;
GetQDGlobalsScreenBits( &screenBits );
SetOrigin( 0 , 0 ) ;
SetPort( port ) ;
}
- if ( window != frontWindow )
+ if ( window != frontWindow && wxTheApp->s_captureWindow == NULL )
{
if ( s_macIsInModalLoop )
{
void wxApp::MacHandleKeyUpEvent( EventRecord *ev )
{
- // nothing to do
+ wxToolTip::RemoveToolTips() ;
+
+ UInt32 menuresult = UMAMenuEvent(ev) ;
+ if ( HiWord( menuresult ) )
+ {
+ }
+ else
+ {
+ short keycode ;
+ short keychar ;
+ keychar = short(ev->message & charCodeMask);
+ keycode = short(ev->message & keyCodeMask) >> 8 ;
+
+ wxWindow* focus = wxWindow::FindFocus() ;
+ if ( focus )
+ {
+ long keyval = wxMacTranslateKey(keychar, keycode) ;
+
+ wxKeyEvent event(wxEVT_KEY_UP);
+ event.m_shiftDown = ev->modifiers & shiftKey;
+ event.m_controlDown = ev->modifiers & controlKey;
+ event.m_altDown = ev->modifiers & optionKey;
+ event.m_metaDown = ev->modifiers & cmdKey;
+ event.m_keyCode = keyval;
+ event.m_x = ev->where.h;
+ event.m_y = ev->where.v;
+ event.m_timeStamp = ev->when;
+ event.SetEventObject(focus);
+ bool handled = focus->GetEventHandler()->ProcessEvent( event ) ;
+ }
+ }
}
void wxApp::MacHandleActivateEvent( EventRecord *ev )
wxWindow * win = wxFindWinFromMacWindow( window ) ;
if ( win )
{
- win->MacUpdate( ev ) ;
+ if ( !wxPendingDelete.Member(win) )
+ win->MacUpdate( ev ) ;
}
else
{
case suspendResumeMessage :
{
bool isResuming = ev->message & resumeFlag ;
+#if !TARGET_CARBON
bool convertClipboard = ev->message & convertClipboardFlag ;
+#else
+ bool convertClipboard = false;
+#endif
bool doesActivate = UMAGetProcessModeDoesActivateOnFGSwitch() ;
if ( isResuming )
{