/////////////////////////////////////////////////////////////////////////////
-// Name: app.cpp
+// Name: src/mac/classic/app.cpp
// Purpose: wxApp
// Author: Stefan Csomor
// Modified by:
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
-#ifdef __GNUG__
-#pragma implementation "app.h"
-#endif
+#include "wx/wxprec.h"
-#include "wx/defs.h"
+#ifdef __BORLANDC__
+ #pragma hdrstop
+#endif
-#include "wx/window.h"
-#include "wx/frame.h"
-#include "wx/button.h"
#include "wx/app.h"
-#include "wx/utils.h"
-#include "wx/gdicmn.h"
-#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"
-#include "wx/dialog.h"
-#include "wx/msgdlg.h"
-#include "wx/log.h"
-#include "wx/module.h"
-#include "wx/memory.h"
+
+#ifndef WX_PRECOMP
+ #include "wx/intl.h"
+ #include "wx/log.h"
+ #include "wx/utils.h"
+ #include "wx/window.h"
+ #include "wx/frame.h"
+ #include "wx/dc.h"
+ #include "wx/button.h"
+ #include "wx/menu.h"
+ #include "wx/pen.h"
+ #include "wx/brush.h"
+ #include "wx/palette.h"
+ #include "wx/icon.h"
+ #include "wx/cursor.h"
+ #include "wx/dialog.h"
+ #include "wx/msgdlg.h"
+ #include "wx/textctrl.h"
+ #include "wx/memory.h"
+ #include "wx/gdicmn.h"
+ #include "wx/module.h"
+#endif
+
#include "wx/tooltip.h"
-#include "wx/textctrl.h"
-#include "wx/menu.h"
#include "wx/docview.h"
#include "wx/filename.h"
// mac
#ifndef __DARWIN__
- #if __option(profile)
- #include <profiler.h>
- #endif
+ #if __option(profile)
+ #include <profiler.h>
+ #endif
#endif
#include "apprsrc.h"
// statics for implementation
-static bool s_inYield = FALSE;
+static bool s_inYield = false;
#if TARGET_CARBON
-static bool s_inReceiveEvent = FALSE ;
+static bool s_inReceiveEvent = false ;
static EventTime sleepTime = kEventDurationNoWait ;
#else
static long sleepTime = 0 ;
#endif
-#if !USE_SHARED_LIBRARY
IMPLEMENT_DYNAMIC_CLASS(wxApp, wxEvtHandler)
BEGIN_EVENT_TABLE(wxApp, wxEvtHandler)
EVT_IDLE(wxApp::OnIdle)
EVT_END_SESSION(wxApp::OnEndSession)
EVT_QUERY_END_SESSION(wxApp::OnQueryEndSession)
END_EVENT_TABLE()
-#endif
-
const short kMacMinHeap = (29 * 1024) ;
// platform specific static variables
{
wxCommandEvent exitEvent(wxEVT_COMMAND_MENU_SELECTED, s_macExitMenuItemId);
if (!win->ProcessEvent(exitEvent))
- win->Close(TRUE ) ;
+ win->Close(true) ;
}
else
{
if (printout)
{
wxPrinter printer;
- printer.Print(view->GetFrame(), printout, TRUE);
+ printer.Print(view->GetFrame(), printout, true);
delete printout;
}
}
MenuEventHandler( EventHandlerCallRef handler , EventRef event , void *data )
{
wxMenuBar* mbar = wxMenuBar::MacGetInstalledMenuBar();
-
+
if ( mbar )
{
wxFrame* win = mbar->GetFrame();
if ( win )
{
-
+
// VZ: we could find the menu from its handle here by examining all
// the menus in the menu bar recursively but knowing that neither
// wxMSW nor wxGTK do it why bother...
- #if 0
+#if 0
MenuRef menuRef;
GetEventParameter(event,
typeMenuRef, NULL,
sizeof(menuRef), NULL,
&menuRef);
- #endif // 0
+#endif // 0
- wxEventType type=0;
+ wxEventType type=0;
MenuCommand cmd=0;
switch (GetEventKind(event))
{
// due to the rather low-level event API of wxWidgets, we cannot use RunApplicationEventLoop
// but have to use ReceiveNextEvent dealing with events manually, therefore we also have
-// deal with clicks in the menu bar explicitely
+// to deal with clicks in the menu bar explicitly
pascal OSStatus wxMacWindowEventHandler( EventHandlerCallRef handler , EventRef event , void *data ) ;
UMAShowArrowCursor() ;
ParamText("\pFatal Error", message, (ConstStr255Param)"\p", (ConstStr255Param)"\p");
itemHit = Alert(128, nil);
- return FALSE ;
+ return false ;
}
#ifndef __DARWIN__
#endif
}
- return TRUE ;
+ return true ;
}
void wxApp::CleanUp()
wxApp::wxApp()
{
- m_printMode = wxPRINT_WINDOWS;
- m_auto3D = TRUE;
+ m_printMode = wxPRINT_WINDOWS;
+ m_auto3D = true;
- m_macCurrentEvent = NULL ;
+ m_macCurrentEvent = NULL ;
#if TARGET_CARBON
- m_macCurrentEventHandlerCallRef = NULL ;
+ m_macCurrentEventHandlerCallRef = NULL ;
#endif
}
int wxApp::MainLoop()
{
- m_keepGoing = TRUE;
+ m_keepGoing = true;
while (m_keepGoing)
{
void wxApp::ExitMainLoop()
{
- m_keepGoing = FALSE;
+ m_keepGoing = false;
}
// Is a message/event pending?
// without the receive event (with pull param = false ) nothing is ever reported
EventRef theEvent;
ReceiveNextEvent (0, NULL, kEventDurationNoWait, false, &theEvent);
- return GetNumEventsInQueue( GetMainEventQueue() ) > 0 ;
+ return GetNumEventsInQueue( GetMainEventQueue() ) > 0 ;
#else
EventRecord event ;
void wxApp::OnEndSession(wxCloseEvent& WXUNUSED(event))
{
if (GetTopWindow())
- GetTopWindow()->Close(TRUE);
+ GetTopWindow()->Close(true);
}
// Default behaviour: close the application with prompts. The
if (GetTopWindow())
{
if (!GetTopWindow()->Close(!event.CanVeto()))
- event.Veto(TRUE);
+ event.Veto(true);
}
}
wxFAIL_MSG( wxT("wxYield called recursively" ) );
}
- return FALSE;
+ return false;
}
- s_inYield = TRUE;
+ s_inYield = true;
#if wxUSE_THREADS
YieldToAnyThread() ;
#endif
wxMacProcessNotifierAndPendingEvents() ;
- s_inYield = FALSE;
+ s_inYield = false;
- return TRUE;
+ return true;
}
// platform specifics
/*virtual*/ void wxApp::MacHandleUnhandledEvent( WXEVENTREF evr )
{
- // Override to process unhandled events as you please
+ // Override to process unhandled events as you please
}
void wxApp::MacHandleOneEvent( WXEVENTREF evr )
event.m_x = ev->where.h;
event.m_y = ev->where.v;
- event.m_timeStamp = ev->when;
+ event.SetTimestamp( ev->when );
wxWindow* focus = wxWindow::FindFocus() ;
event.SetEventObject(focus);
{
// we must avoid reentrancy problems when processing high level events eg printing
bool former = s_inYield ;
- s_inYield = TRUE ;
+ s_inYield = true ;
EventRecord* ev = (EventRecord*) evr ;
::AEProcessAppleEvent( ev ) ;
s_inYield = former ;
::GetWindowAttributes( frontWindow , &frontWindowAttributes ) ;
short windowPart = ::FindWindow(ev->where, &window);
- wxTopLevelWindowMac* win = wxFindWinFromMacWindow( window ) ;
+ wxTopLevelWindowMac* win = wxFindWinFromMacWindow( (WXWindow) window ) ;
if ( wxPendingDelete.Member(win) )
return ;
break ;
default:
{
- wxTopLevelWindowMac* win = wxFindWinFromMacWindow( window ) ;
+ wxTopLevelWindowMac* win = wxFindWinFromMacWindow( (WXWindow) window ) ;
if ( win )
win->MacMouseUp( ev , windowPart ) ;
}
bool wxGetKeyState(wxKeyCode key) //virtual key code if < 10.2.x, else see below
{
-#if __WXMAC_CARBON__
-//#ifdef __DARWIN__
-// wxHIDKeyboard keyboard;
-// return keyboard.IsActive(key);
-//#else
-// TODO: Have it use HID Manager on OSX...
-//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() & wxKeyCodeToMacModifier(key));
-#else
- KeyMap keymap;
- GetKeys(keymap);
- return !!(BitTst(keymap, (sizeof(KeyMap)*8) - key));
-#endif
+ wxASSERT_MSG(key != WXK_LBUTTON && key != WXK_RBUTTON && key !=
+ WXK_MBUTTON, wxT("can't use wxGetKeyState() for mouse buttons"));
+
+ KeyMap keymap;
+ GetKeys(keymap);
+ return !!(BitTst(keymap, (sizeof(KeyMap)*8) - key));
}
#if !TARGET_CARBON
event.m_x = wherex;
event.m_y = wherey;
- event.m_timeStamp = when;
+ event.SetTimestamp(when);
event.SetEventObject(focus);
handled = focus->GetEventHandler()->ProcessEvent( event ) ;
if ( handled && event.GetSkipped() )
}
if (!handled)
{
- event.Skip( FALSE ) ;
+ event.Skip( false ) ;
event.SetEventType( wxEVT_CHAR ) ;
// raw value again
event.m_keyCode = realkeyval ;
// backdoor handler for default return and command escape
if ( !handled && (!focus->IsKindOf(CLASSINFO(wxControl) ) || !focus->MacCanFocus() ) )
{
- // if window is not having a focus still testing for default enter or cancel
- // TODO add the UMA version for ActiveNonFloatingWindow
- wxWindow* focus = wxFindWinFromMacWindow( FrontWindow() ) ;
- if ( focus )
- {
+ // if window is not having a focus still testing for default enter or cancel
+ // TODO add the UMA version for ActiveNonFloatingWindow
+ wxWindow* focus = wxFindWinFromMacWindow( (WXWindow) FrontWindow() ) ;
+ if ( focus )
+ {
if ( keyval == WXK_RETURN )
{
- wxButton *def = wxDynamicCast(focus->GetDefaultItem(),
- wxButton);
- if ( def && def->IsEnabled() )
- {
- wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED, def->GetId() );
- event.SetEventObject(def);
- def->Command(event);
- return true ;
+ wxTopLevelWindow *tlw = wxDynamicCast(wxGetTopLevelParent(this), wxTopLevelWindow);
+ if ( tlw && tlw->GetDefaultItem() )
+ {
+ wxButton *def = wxDynamicCast(tlw->GetDefaultItem(), wxButton);
+ if ( def && def->IsEnabled() )
+ {
+ wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED, def->GetId() );
+ event.SetEventObject(def);
+ def->Command(event);
+ return true ;
+ }
}
}
/* generate wxID_CANCEL if command-. or <esc> has been pressed (typically in dialogs) */
else if (keyval == WXK_ESCAPE || (keyval == '.' && modifiers & cmdKey ) )
{
- wxCommandEvent new_event(wxEVT_COMMAND_BUTTON_CLICKED,wxID_CANCEL);
- new_event.SetEventObject( focus );
- handled = focus->GetEventHandler()->ProcessEvent( new_event );
+ wxCommandEvent new_event(wxEVT_COMMAND_BUTTON_CLICKED,wxID_CANCEL);
+ new_event.SetEventObject( focus );
+ handled = focus->GetEventHandler()->ProcessEvent( new_event );
}
- }
+ }
}
return handled ;
}
event.m_x = wherex;
event.m_y = wherey;
- event.m_timeStamp = when;
+ event.SetTimestamp(when);
event.SetEventObject(focus);
handled = focus->GetEventHandler()->ProcessEvent( event ) ;
// if it is a floater we activate/deactivate the front non-floating window instead
window = ::FrontNonFloatingWindow() ;
}
- wxTopLevelWindowMac* win = wxFindWinFromMacWindow( window ) ;
+ wxTopLevelWindowMac* win = wxFindWinFromMacWindow( (WXWindow) window ) ;
if ( win )
win->MacActivate( ev->when , activate ) ;
}
{
EventRecord* ev = (EventRecord*) evr ;
WindowRef window = (WindowRef) ev->message ;
- wxTopLevelWindowMac * win = wxFindWinFromMacWindow( window ) ;
+ wxTopLevelWindowMac * win = wxFindWinFromMacWindow( (WXWindow) window ) ;
if ( win )
{
if ( !wxPendingDelete.Member(win) )
if ( oldFrontWindow )
{
- wxTopLevelWindowMac* win = wxFindWinFromMacWindow( oldFrontWindow ) ;
+ wxTopLevelWindowMac* win = wxFindWinFromMacWindow( (WXWindow) oldFrontWindow ) ;
if ( win )
win->MacActivate( ev->when , false ) ;
}
if ( newFrontWindow )
{
- wxTopLevelWindowMac* win = wxFindWinFromMacWindow( newFrontWindow ) ;
+ wxTopLevelWindowMac* win = wxFindWinFromMacWindow( (WXWindow) newFrontWindow ) ;
if ( win )
win->MacActivate( ev->when , true ) ;
}
bool controlDown = ev->modifiers & controlKey ; // for simulating right mouse
event.m_leftDown = isDown && !controlDown;
- event.m_middleDown = FALSE;
+ event.m_middleDown = false;
event.m_rightDown = isDown && controlDown;
event.m_shiftDown = ev->modifiers & shiftKey;
event.m_controlDown = ev->modifiers & controlKey;
event.m_metaDown = ev->modifiers & cmdKey;
event.m_x = ev->where.h;
event.m_y = ev->where.v;
- event.m_timeStamp = ev->when;
+ event.SetTimestamp( ev->when );
event.SetEventObject(this);
if ( wxWindow::s_lastMouseWindow )
{
case inContent :
{
- wxTopLevelWindowMac* win = wxFindWinFromMacWindow( window ) ;
+ wxTopLevelWindowMac* win = wxFindWinFromMacWindow( (WXWindow) window ) ;
if ( win )
win->MacMouseMoved( ev , windowPart ) ;
else
event.m_leftDown = isDown && !controlDown;
- event.m_middleDown = FALSE;
+ event.m_middleDown = false;
event.m_rightDown = isDown && controlDown;
event.m_shiftDown = modifiers & shiftKey;
event.m_x = x;
event.m_y = y;
- event.m_timeStamp = timestamp;
+ event.SetTimestamp(timestamp);
if ( wxWindow::s_lastMouseWindow )
{