git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@49982 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Stefan Csomor 2007-11-15 20:20:55 +00:00
parent f5d7fd0837
commit 6258f9d978

View File

@ -44,28 +44,13 @@
// 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
@ -776,12 +761,10 @@ wxMacAssertOutputHandler(OSType WXUNUSED(componentSignature),
#endif //__WXDEBUG__
#ifdef __WXMAC_OSX__
extern "C" void macPostedEventCallback(void *WXUNUSED(unused))
{
wxTheApp->ProcessPendingEvents();
}
#endif
bool wxApp::Initialize(int& argc, wxChar **argv)
{
@ -795,21 +778,6 @@ bool wxApp::Initialize(int& argc, wxChar **argv)
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
// Mac OS X passes a process serial number command line argument when
// the application is launched from the Finder. This argument must be
// removed from the command line arguments before being handled by the
@ -832,7 +800,6 @@ bool wxApp::Initialize(int& argc, wxChar **argv)
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") )
@ -845,11 +812,7 @@ bool wxApp::Initialize(int& argc, wxChar **argv)
wxString cwd = wxMacCFStringHolder(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};
@ -858,7 +821,6 @@ bool wxApp::Initialize(int& argc, wxChar **argv)
CFRunLoopAddSource(CFRunLoopGetCurrent(), m_macEventPosted, kCFRunLoopCommonModes);
// run loop takes ownership
CFRelease(m_macEventPosted);
#endif
UMAShowArrowCursor() ;
@ -921,26 +883,15 @@ void wxApp::CleanUp()
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)
@ -976,31 +927,6 @@ void wxApp::CleanUp()
// 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__ */
bool wxMacConvertEventToRecord( EventRef event , EventRecord *rec)
{
OSStatus err = noErr ;
@ -1102,10 +1028,7 @@ wxApp::wxApp()
m_macCurrentEvent = NULL ;
m_macCurrentEventHandlerCallRef = NULL ;
#ifdef __WXMAC_OSX__
m_macEventPosted = NULL ;
#endif
}
void wxApp::OnIdle(wxIdleEvent& WXUNUSED(event))
@ -1113,7 +1036,6 @@ 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();
@ -1122,12 +1044,10 @@ void wxApp::OnIdle(wxIdleEvent& WXUNUSED(event))
void wxApp::WakeUpIdle()
{
#ifdef __WXMAC_OSX__
if (m_macEventPosted)
{
CFRunLoopSourceSignal(m_macEventPosted);
}
#endif
wxMacWakeUp() ;
}
@ -1209,7 +1129,6 @@ bool wxApp::Yield(bool onlyIfNeeded)
}
}
wxMacProcessNotifierAndPendingEvents() ;
s_inYield = false;
return true;
@ -1247,7 +1166,6 @@ void wxApp::MacDoOneEvent()
// repeaters
DeletePendingObjects() ;
wxMacProcessNotifierAndPendingEvents() ;
}
// virtual
@ -1274,8 +1192,6 @@ void wxApp::MacHandleOneEvent( WXEVENTREF evr )
if (status == eventNotHandledErr)
MacHandleUnhandledEvent(evr);
wxMacProcessNotifierAndPendingEvents() ;
#if wxUSE_THREADS
wxMutexGuiLeaveOrEnter();
#endif // wxUSE_THREADS
@ -1454,24 +1370,6 @@ int wxMacKeyCodeToModifier(wxKeyCode key)
}
}
#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;
@ -1480,16 +1378,10 @@ wxMouseState wxGetMouseState()
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);