#include "wx/module.h"
#include "wx/memory.h"
#include "wx/tooltip.h"
+#include "wx/textctrl.h"
#include "wx/menu.h"
#if wxUSE_WX_RESOURCES
#include "wx/resource.h"
// mac
-#ifndef __UNIX__
+#ifndef __DARWIN__
#if __option(profile)
#include <profiler.h>
#endif
#include "wx/mac/macnotfy.h"
#if wxUSE_SOCKETS
- #ifdef __APPLE__
- #include <OT/OpenTransport.h>
+ #ifdef __DARWIN__
+ #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__
- AEInstallEventHandler( kCoreEventClass , kAEOpenDocuments , AEHandleODoc ,
+#if defined(UNIVERSAL_INTERFACES_VERSION) && (UNIVERSAL_INTERFACES_VERSION >= 0x0340)
+ AEInstallEventHandler( kCoreEventClass , kAEOpenDocuments , NewAEEventHandlerUPP(AEHandleODoc) ,
(long) wxTheApp , FALSE ) ;
- AEInstallEventHandler( kCoreEventClass , kAEOpenApplication , AEHandleOApp ,
+ AEInstallEventHandler( kCoreEventClass , kAEOpenApplication , NewAEEventHandlerUPP(AEHandleOApp) ,
(long) wxTheApp , FALSE ) ;
- AEInstallEventHandler( kCoreEventClass , kAEPrintDocuments , AEHandlePDoc ,
+ AEInstallEventHandler( kCoreEventClass , kAEPrintDocuments , NewAEEventHandlerUPP(AEHandlePDoc) ,
(long) wxTheApp , FALSE ) ;
- AEInstallEventHandler( kCoreEventClass , kAEQuitApplication , AEHandleQuit ,
+ AEInstallEventHandler( kCoreEventClass , kAEQuitApplication , NewAEEventHandlerUPP(AEHandleQuit) ,
(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__
+#ifndef __DARWIN__
// 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;
return FALSE ;
}
-#ifndef __UNIX__
+#ifndef __DARWIN__
#if __option(profile)
ProfilerInit( collectDetailed, bestTimeBase , 20000 , 40 ) ;
#endif
// now avoid exceptions thrown for new (bad_alloc)
-#ifndef __UNIX__
+#ifndef __DARWIN__
std::__throws_bad_alloc = FALSE ;
#endif
wxTheColourDatabase = new wxColourDatabase(wxKEY_STRING);
wxTheColourDatabase->Initialize();
+#ifdef __WXDEBUG__
+#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
+#endif
+
wxInitializeStockLists();
wxInitializeStockObjects();
wxClassInfo::CleanUpClasses();
-#ifndef __UNIX__
+#ifndef __DARWIN__
#if __option(profile)
ProfilerDump( "\papp.prof" ) ;
ProfilerTerm() ;
}
// 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();
+ long sleepTime = 1 ; //::GetCaretTime();
while ( !wxTheApp->IsExiting() && WaitNextEvent(everyEvent, &event,sleepTime, wxApp::s_macCursorRgn))
{
wxTheApp->MacHandleOneEvent( &event );
+ if ( event.what != kHighLevelEvent )
+ SetRectRgn( wxApp::s_macCursorRgn , event.where.h , event.where.v , event.where.h + 1 , event.where.v + 1 ) ;
}
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))
{
wxTheApp->ProcessIdle() ;
}
if ( event.what != kHighLevelEvent )
- SetRectRgn( s_macCursorRgn , event.where.h - 1 , event.where.v - 1, event.where.h + 1 , event.where.v + 1 ) ;
+ SetRectRgn( s_macCursorRgn , event.where.h , event.where.v , event.where.h + 1 , event.where.v + 1 ) ;
// 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 )
{
}
else
{
+ if ( win )
+ win->MacMouseDown( ev , windowPart ) ;
UMASelectWindow( window ) ;
}
}
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 )
{