#include "wx/docview.h"
#include "wx/filename.h"
#include "wx/link.h"
+#include "wx/thread.h"
#include <string.h>
// mac
-#ifndef __DARWIN__
- #if __option(profile)
- #include <profiler.h>
- #endif
-#endif
-
-// #include "apprsrc.h"
-
#include "wx/mac/uma.h"
-#include "wx/mac/macnotfy.h"
#ifdef __DARWIN__
# include <CoreServices/CoreServices.h>
# if defined(WXMAKINGDLL_CORE)
# include <mach-o/dyld.h>
# endif
-#else
-# include <Sound.h>
-# include <Threads.h>
-# include <ToolUtils.h>
-# include <DiskInit.h>
-# include <Devices.h>
#endif
// Keep linker from discarding wxStockGDIMac
{
wxWindow *win = menu->GetInvokingWindow();
if (win)
- win->GetEventHandler()->ProcessEvent(wxevent);
+ win->HandleWindowEvent(wxevent);
}
}
}
return eventNotHandledErr;
}
+#ifndef __LP64__
static pascal OSStatus
wxMacAppCommandEventHandler( EventHandlerCallRef WXUNUSED(handler) ,
EventRef event ,
}
return result ;
}
+#endif
static pascal OSStatus
wxMacAppApplicationEventHandler( EventHandlerCallRef WXUNUSED(handler) ,
OSStatus result = eventNotHandledErr ;
switch ( GetEventClass( event ) )
{
+#ifndef __LP64__
case kEventClassCommand :
result = wxMacAppCommandEventHandler( handler , event , data ) ;
break ;
-
+#endif
case kEventClassApplication :
result = wxMacAppApplicationEventHandler( handler , event , data ) ;
break ;
-
+#ifndef __LP64__
case kEventClassMenu :
result = wxMacAppMenuEventHandler( handler , event , data ) ;
break ;
result = wxMacTopLevelMouseEventHandler( handler , event , NULL ) ;
}
break ;
-
+#endif
case kEventClassAppleEvent :
{
- EventRecord rec ;
+#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
+ if ( AEProcessEvent != NULL )
+ {
+ result = AEProcessEvent(event);
+ }
+#endif
+#if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5
+ {
+ EventRecord rec ;
- wxMacConvertEventToRecord( event , &rec ) ;
- result = AEProcessAppleEvent( &rec ) ;
+ wxMacConvertEventToRecord( event , &rec ) ;
+ result = AEProcessAppleEvent( &rec ) ;
+ }
+#endif
}
break ;
#endif //__WXDEBUG__
-#ifdef __WXMAC_OSX__
extern "C" void macPostedEventCallback(void *WXUNUSED(unused))
{
wxTheApp->ProcessPendingEvents();
}
-#endif
bool wxApp::Initialize(int& argc, wxChar **argv)
{
#endif
UMAInitToolbox( 4, sm_isEmbedded ) ;
- SetEventMask( everyEvent ) ;
- UMAShowWatchCursor() ;
-
-#ifndef __DARWIN__
-# if __option(profile)
- ProfilerInit( collectDetailed, bestTimeBase , 40000 , 50 ) ;
-# endif
-#endif
-
-#ifndef __DARWIN__
- // now avoid exceptions thrown for new (bad_alloc)
- // FIXME CS for some changes outside wxMac does not compile anymore
-#if 0
- std::__throws_bad_alloc = 0 ;
-#endif
-
-#endif
+// TODO CHECK Can Be Removed SetEventMask( everyEvent ) ;
// Mac OS X passes a process serial number command line argument when
// the application is launched from the Finder. This argument must be
wxFont::SetDefaultEncoding(wxLocale::GetSystemEncoding());
#endif
-#if TARGET_API_MAC_OSX
// these might be the startup dirs, set them to the 'usual' dir containing the app bundle
wxString startupCwd = wxGetCwd() ;
if ( startupCwd == wxT("/") || startupCwd.Right(15) == wxT("/Contents/MacOS") )
CFRelease( url ) ;
CFStringRef path = CFURLCopyFileSystemPath ( urlParent , kCFURLPOSIXPathStyle ) ;
CFRelease( urlParent ) ;
- wxString cwd = wxMacCFStringHolder(path).AsString(wxLocale::GetSystemEncoding());
+ wxString cwd = wxCFStringRef(path).AsString(wxLocale::GetSystemEncoding());
wxSetWorkingDirectory( cwd ) ;
}
-#endif
-
- wxMacCreateNotifierTable() ;
-#ifdef __WXMAC_OSX__
/* connect posted events to common-mode run loop so that wxPostEvent events
are handled even while we're in the menu or on a scrollbar */
CFRunLoopSourceContext event_posted_context = {0};
CFRunLoopAddSource(CFRunLoopGetCurrent(), m_macEventPosted, kCFRunLoopCommonModes);
// run loop takes ownership
CFRelease(m_macEventPosted);
-#endif
-
- UMAShowArrowCursor() ;
return true;
}
{
if ( !wxAppBase::OnInitGui() )
return false ;
-
+#ifndef __LP64__
InstallStandardEventHandler( GetApplicationEventTarget() ) ;
-
if (!sm_isEmbedded)
{
InstallApplicationEventHandler(
GetwxMacAppEventHandlerUPP(),
GetEventTypeCount(eventList), eventList, wxTheApp, (EventHandlerRef *)&(wxTheApp->m_macEventHandler));
}
+#endif
if (!sm_isEmbedded)
{
wxToolTip::RemoveToolTips() ;
#endif
-#ifdef __WXMAC_OSX__
if (m_macEventPosted)
{
CFRunLoopRemoveSource(CFRunLoopGetCurrent(), m_macEventPosted, kCFRunLoopCommonModes);
m_macEventPosted = NULL;
}
-#endif
// One last chance for pending objects to be cleaned up
wxTheApp->DeletePendingObjects();
- wxMacDestroyNotifierTable() ;
-
-#ifndef __DARWIN__
-# if __option(profile)
- ProfilerDump( (StringPtr)"\papp.prof" ) ;
- ProfilerTerm() ;
-# endif
-#endif
-
- UMACleanupToolbox() ;
-
if (!sm_isEmbedded)
RemoveEventHandler( (EventHandlerRef)(wxTheApp->m_macEventHandler) );
// misc initialization stuff
//----------------------------------------------------------------------
-#if defined(WXMAKINGDLL_CORE) && !defined(__DARWIN__)
-
-// for shared libraries we have to manually get the correct resource
-// ref num upon initializing and releasing when terminating, therefore
-// the __wxinitialize and __wxterminate must be used
-
-extern "C"
-{
- void __sinit(void); // (generated by linker)
- pascal OSErr __initialize(const CFragInitBlock *theInitBlock);
- pascal void __terminate(void);
-}
-
-pascal OSErr __wxinitialize(const CFragInitBlock *theInitBlock)
-{
- return __initialize( theInitBlock ) ;
-}
-
-pascal void __wxterminate(void)
-{
- __terminate() ;
-}
-
-#endif /* WXMAKINGDLL_CORE && !__DARWIN__ */
-
+#if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5
bool wxMacConvertEventToRecord( EventRef event , EventRecord *rec)
{
OSStatus err = noErr ;
UInt32 keyCode ;
unsigned char charCode ;
UInt32 modifiers ;
-#ifndef __LP64__
GetMouse( &rec->where) ;
-#endif
err = GetEventParameter(event, kEventParamKeyModifiers, typeUInt32, NULL, 4, NULL, &modifiers);
err = GetEventParameter(event, kEventParamKeyCode, typeUInt32, NULL, 4, NULL, &keyCode);
err = GetEventParameter(event, kEventParamKeyMacCharCodes, typeChar, NULL, 1, NULL, &charCode);
{
UInt32 keyCode, modifiers;
unsigned char charCode ;
-#ifndef __LP64__
-
GetMouse( &rec->where) ;
-#endif
rec->what = keyDown ;
err = GetEventParameter(rawEvent, kEventParamKeyModifiers, typeUInt32, NULL, 4, NULL, &modifiers);
err = GetEventParameter(rawEvent, kEventParamKeyCode, typeUInt32, NULL, 4, NULL, &keyCode);
return converted ;
}
+#endif
wxApp::wxApp()
{
m_macCurrentEvent = NULL ;
m_macCurrentEventHandlerCallRef = NULL ;
-
-#ifdef __WXMAC_OSX__
m_macEventPosted = NULL ;
-#endif
}
void wxApp::OnIdle(wxIdleEvent& WXUNUSED(event))
// If they are pending events, we must process them: pending events are
// either events to the threads other than main or events posted with
// wxPostEvent() functions
- wxMacProcessNotifierAndPendingEvents();
#ifndef __WXUNIVERSAL__
if (!wxMenuBar::MacGetInstalledMenuBar() && wxMenuBar::MacGetCommonMenuBar())
wxMenuBar::MacGetCommonMenuBar()->MacInstallMenuBar();
void wxApp::WakeUpIdle()
{
-#ifdef __WXMAC_OSX__
if (m_macEventPosted)
{
CFRunLoopSourceSignal(m_macEventPosted);
}
-#endif
wxMacWakeUp() ;
}
}
}
- wxMacProcessNotifierAndPendingEvents() ;
s_inYield = false;
return true;
// repeaters
DeletePendingObjects() ;
- wxMacProcessNotifierAndPendingEvents() ;
}
// virtual
if (status == eventNotHandledErr)
MacHandleUnhandledEvent(evr);
- wxMacProcessNotifierAndPendingEvents() ;
-
#if wxUSE_THREADS
wxMutexGuiLeaveOrEnter();
#endif // wxUSE_THREADS
}
}
-#ifndef __DARWIN__
-bool wxGetKeyState(wxKeyCode key) //virtual key code if < 10.2.x, else see below
-{
- wxASSERT_MSG(key != WXK_LBUTTON && key != WXK_RBUTTON && key !=
- WXK_MBUTTON, wxT("can't use wxGetKeyState() for mouse buttons"));
-
-//if OS X > 10.2 (i.e. 10.2.x)
-//a known apple bug prevents the system from determining led
-//states with GetKeys... can only determine caps lock led
- return !!(GetCurrentKeyModifiers() & wxMacKeyCodeToModifier(key));
-//else
-// KeyMapByteArray keymap;
-// GetKeys((BigEndianLong*)keymap);
-// return !!(BitTst(keymap, (sizeof(KeyMapByteArray)*8) - iKey));
-}
-#endif
-
-
wxMouseState wxGetMouseState()
{
wxMouseState ms;
ms.SetX(pt.x);
ms.SetY(pt.y);
-#if TARGET_API_MAC_OSX
UInt32 buttons = GetCurrentButtonState();
ms.SetLeftDown( (buttons & 0x01) != 0 );
ms.SetMiddleDown( (buttons & 0x04) != 0 );
ms.SetRightDown( (buttons & 0x02) != 0 );
-#else
- ms.SetLeftDown( Button() );
- ms.SetMiddleDown( 0 );
- ms.SetRightDown( 0 );
-#endif
UInt32 modifiers = GetCurrentKeyModifiers();
ms.SetControlDown(modifiers & controlKey);
wxKeyEvent event(wxEVT_KEY_DOWN) ;
MacCreateKeyEvent( event, focus , keymessage , modifiers , when , wherex , wherey , uniChar ) ;
- handled = focus->GetEventHandler()->ProcessEvent( event ) ;
+ handled = focus->HandleWindowEvent( event ) ;
if ( handled && event.GetSkipped() )
handled = false ;
bool handled;
wxKeyEvent event( wxEVT_KEY_UP ) ;
MacCreateKeyEvent( event, focus , keymessage , modifiers , when , wherex , wherey , uniChar ) ;
- handled = focus->GetEventHandler()->ProcessEvent( event ) ;
+ handled = focus->HandleWindowEvent( event ) ;
return handled ;
}
bool handled = false ;
- wxTopLevelWindowMac *tlw = focus->MacGetTopLevelWindow() ;
+ wxNonOwnedWindow *tlw = focus->MacGetTopLevelWindow() ;
if (tlw)
{
event.SetEventType( wxEVT_CHAR_HOOK );
- handled = tlw->GetEventHandler()->ProcessEvent( event );
+ handled = tlw->HandleWindowEvent( event );
if ( handled && event.GetSkipped() )
handled = false ;
}
{
event.SetEventType( wxEVT_CHAR );
event.Skip( false ) ;
- handled = focus->GetEventHandler()->ProcessEvent( event ) ;
+ handled = focus->HandleWindowEvent( event ) ;
}
if ( !handled && (keyval == WXK_TAB) )
/* CTRL-TAB changes the (parent) window, i.e. switch notebook page */
new_event.SetWindowChange( event.ControlDown() );
new_event.SetCurrentFocus( focus );
- handled = focus->GetParent()->GetEventHandler()->ProcessEvent( new_event );
+ handled = focus->GetParent()->HandleWindowEvent( new_event );
if ( handled && new_event.GetSkipped() )
handled = false ;
}
{
// if window is not having a focus still testing for default enter or cancel
// TODO: add the UMA version for ActiveNonFloatingWindow
+#ifndef __LP64__
wxWindow* focus = wxFindWinFromMacWindow( FrontWindow() ) ;
if ( focus )
{
// generate wxID_CANCEL if command-. or <esc> has been pressed (typically in dialogs)
wxCommandEvent new_event(wxEVT_COMMAND_BUTTON_CLICKED,wxID_CANCEL);
new_event.SetEventObject( focus );
- handled = focus->GetEventHandler()->ProcessEvent( new_event );
+ handled = focus->HandleWindowEvent( new_event );
}
}
+#endif
}
return handled ;
}
event.SetTimestamp(when);
event.SetEventObject(focus);
}
+
+
+void wxApp::MacHideApp()
+{
+ wxMacCarbonEvent event( kEventClassCommand , kEventCommandProcess );
+ HICommand command;
+ memset( &command, 0 , sizeof(command) );
+ command.commandID = kHICommandHide ;
+ event.SetParameter<HICommand>(kEventParamDirectObject, command );
+ SendEventToApplication( event );
+}