// where overriden
public:
+ static bool sm_isEmbedded;
// Implementation
virtual bool Initialize(int& argc, wxChar **argv);
virtual void CleanUp();
void MacDoOneEvent() ;
WXEVENTREF MacGetCurrentEvent() { return m_macCurrentEvent ; }
void MacHandleOneEvent( WXEVENTREF ev ) ;
+
+ // For embedded use. By default does nothing.
+ virtual void MacHandleUnhandledEvent( WXEVENTREF ev );
+
#if !TARGET_CARBON
virtual void MacHandleMenuSelect( int menuid , int menuitem ) ;
virtual void MacHandleMouseUpEvent( WXEVENTREF ev ) ;
#include "wx/mac/private.h"
-void UMAInitToolbox( UInt16 inMoreMastersCalls) ;
+void UMAInitToolbox( UInt16 inMoreMastersCalls, bool isEmbedded) ;
void UMACleanupToolbox() ;
long UMAGetSystemVersion() ;
bool UMAHasAppearance() ;
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
//----------------------------------------------------------------------
// Mac-specific
- UMAInitToolbox( 4 ) ;
+ UMAInitToolbox( 4, sm_isEmbedded ) ;
SetEventMask( everyEvent ) ;
UMAShowWatchCursor() ;
#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
+ if (!sm_isEmbedded)
+ {
#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
- 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
+ }
return TRUE ;
}
::IdleControls( window ) ;
if ( wxTheApp->ProcessIdle() )
- sleepTime = 0 ;
+ sleepTime = kEventDurationNoWait;
else
sleepTime = GetCaretTime() / 2 ;
}
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 ;
- SendEventToEventTarget ((EventRef) evr , theTarget);
+ OSStatus status = SendEventToEventTarget ((EventRef) evr , theTarget);
+ if(status == eventNotHandledErr)
+ {
+ MacHandleUnhandledEvent(evr);
+ }
#else
EventRecord* ev = (EventRecord*) evr ;
m_macCurrentEvent = ev ;
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:
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
//----------------------------------------------------------------------
// Mac-specific
- UMAInitToolbox( 4 ) ;
+ UMAInitToolbox( 4, sm_isEmbedded ) ;
SetEventMask( everyEvent ) ;
UMAShowWatchCursor() ;
#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
+ if (!sm_isEmbedded)
+ {
#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
- 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
+ }
return TRUE ;
}
::IdleControls( window ) ;
if ( wxTheApp->ProcessIdle() )
- sleepTime = 0 ;
+ sleepTime = kEventDurationNoWait;
else
sleepTime = GetCaretTime() / 2 ;
}
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 ;
- SendEventToEventTarget ((EventRef) evr , theTarget);
+ OSStatus status = SendEventToEventTarget ((EventRef) evr , theTarget);
+ if(status == eventNotHandledErr)
+ {
+ MacHandleUnhandledEvent(evr);
+ }
#else
EventRecord* ev = (EventRecord*) evr ;
m_macCurrentEvent = ev ;
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:
static long sUMASystemVersion = 0 ;
static bool sUMAHasAquaLayout = false ;
+static bool sUMAHasInittedAppearance = false;
+
extern int gAGABackgroundColor ;
bool UMAHasAppearance() { return sUMAHasAppearance ; }
long UMAGetAppearanceVersion() { return sUMAAppearanceVersion ; }
void UMACleanupToolbox()
{
- if ( sUMAHasAppearance )
+ if (sUMAHasInittedAppearance)
{
UnregisterAppearanceClient() ;
}
if ( TXNTerminateTextension != (void*) kUnresolvedCFragSymbolAddress )
TXNTerminateTextension( ) ;
}
-void UMAInitToolbox( UInt16 inMoreMastersCalls )
+void UMAInitToolbox( UInt16 inMoreMastersCalls, bool isEmbedded )
{
#if !TARGET_CARBON
::MaxApplZone();
for (long i = 1; i <= inMoreMastersCalls; i++)
::MoreMasters();
- ::InitGraf(&qd.thePort);
- ::InitFonts();
- ::InitMenus();
- ::TEInit();
- ::InitDialogs(0L);
- ::FlushEvents(everyEvent, 0);
- ::InitCursor();
+ if (!isEmbedded)
+ {
+ ::InitGraf(&qd.thePort);
+ ::InitFonts();
+ ::InitMenus();
+ ::TEInit();
+ ::InitDialogs(0L);
+ ::FlushEvents(everyEvent, 0);
+ }
+
long total,contig;
PurgeSpace(&total, &contig);
-#else
- InitCursor();
#endif
+ ::InitCursor();
+
if ( Gestalt(gestaltSystemVersion, &sUMASystemVersion) != noErr)
sUMASystemVersion = 0x0000 ;
if ( Gestalt( gestaltAppearanceAttr, &theAppearance ) == noErr )
{
sUMAHasAppearance = true ;
- RegisterAppearanceClient();
+ OSStatus status = RegisterAppearanceClient();
+ // If status equals appearanceProcessRegisteredErr it means the
+ // appearance client already was registered (For example if we run
+ // embedded, the host might have registered it). In such a case
+ // we don't unregister it later on.
+ if (status != appearanceProcessRegisteredErr)
+ {
+ // Appearance client wasn't registered yet.
+ sUMAHasInittedAppearance = true;
+ }
+
if ( Gestalt( gestaltAppearanceVersion, &theAppearance ) == noErr )
{
sUMAAppearanceVersion = theAppearance ;
#if TARGET_CARBON
// Call currently implicitely done : InitFloatingWindows() ;
#else
- if ( sUMAHasWindowManager )
- InitFloatingWindows() ;
- else
- InitWindows();
+ if (!isEmbedded)
+ {
+ if ( sUMAHasWindowManager )
+ InitFloatingWindows() ;
+ else
+ InitWindows();
+ }
#endif
if ( NavServicesAvailable() )
TXNMacOSPreferredFontDescription fontDescriptions[] =
{
- { fontId , (fontSize << 16) ,kTXNDefaultFontStyle, kTXNSystemDefaultEncoding } ,
+ { fontId , (fontSize << 16) ,kTXNDefaultFontStyle, kTXNSystemDefaultEncoding }
} ;
int noOfFontDescriptions = sizeof( fontDescriptions ) / sizeof(TXNMacOSPreferredFontDescription) ;
#if 0 // TARGET_CARBON
static long sUMASystemVersion = 0 ;
static bool sUMAHasAquaLayout = false ;
+static bool sUMAHasInittedAppearance = false;
+
extern int gAGABackgroundColor ;
bool UMAHasAppearance() { return sUMAHasAppearance ; }
long UMAGetAppearanceVersion() { return sUMAAppearanceVersion ; }
void UMACleanupToolbox()
{
- if ( sUMAHasAppearance )
+ if (sUMAHasInittedAppearance)
{
UnregisterAppearanceClient() ;
}
if ( TXNTerminateTextension != (void*) kUnresolvedCFragSymbolAddress )
TXNTerminateTextension( ) ;
}
-void UMAInitToolbox( UInt16 inMoreMastersCalls )
+void UMAInitToolbox( UInt16 inMoreMastersCalls, bool isEmbedded )
{
#if !TARGET_CARBON
::MaxApplZone();
for (long i = 1; i <= inMoreMastersCalls; i++)
::MoreMasters();
- ::InitGraf(&qd.thePort);
- ::InitFonts();
- ::InitMenus();
- ::TEInit();
- ::InitDialogs(0L);
- ::FlushEvents(everyEvent, 0);
- ::InitCursor();
+ if (!isEmbedded)
+ {
+ ::InitGraf(&qd.thePort);
+ ::InitFonts();
+ ::InitMenus();
+ ::TEInit();
+ ::InitDialogs(0L);
+ ::FlushEvents(everyEvent, 0);
+ }
+
long total,contig;
PurgeSpace(&total, &contig);
-#else
- InitCursor();
#endif
+ ::InitCursor();
+
if ( Gestalt(gestaltSystemVersion, &sUMASystemVersion) != noErr)
sUMASystemVersion = 0x0000 ;
if ( Gestalt( gestaltAppearanceAttr, &theAppearance ) == noErr )
{
sUMAHasAppearance = true ;
- RegisterAppearanceClient();
+ OSStatus status = RegisterAppearanceClient();
+ // If status equals appearanceProcessRegisteredErr it means the
+ // appearance client already was registered (For example if we run
+ // embedded, the host might have registered it). In such a case
+ // we don't unregister it later on.
+ if (status != appearanceProcessRegisteredErr)
+ {
+ // Appearance client wasn't registered yet.
+ sUMAHasInittedAppearance = true;
+ }
+
if ( Gestalt( gestaltAppearanceVersion, &theAppearance ) == noErr )
{
sUMAAppearanceVersion = theAppearance ;
#if TARGET_CARBON
// Call currently implicitely done : InitFloatingWindows() ;
#else
- if ( sUMAHasWindowManager )
- InitFloatingWindows() ;
- else
- InitWindows();
+ if (!isEmbedded)
+ {
+ if ( sUMAHasWindowManager )
+ InitFloatingWindows() ;
+ else
+ InitWindows();
+ }
#endif
if ( NavServicesAvailable() )
TXNMacOSPreferredFontDescription fontDescriptions[] =
{
- { fontId , (fontSize << 16) ,kTXNDefaultFontStyle, kTXNSystemDefaultEncoding } ,
+ { fontId , (fontSize << 16) ,kTXNDefaultFontStyle, kTXNSystemDefaultEncoding }
} ;
int noOfFontDescriptions = sizeof( fontDescriptions ) / sizeof(TXNMacOSPreferredFontDescription) ;
#if 0 // TARGET_CARBON