+ 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;
+
+ wxPoint pt = wxGetMousePosition();
+ 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);
+ ms.SetShiftDown(modifiers & shiftKey);
+ ms.SetAltDown(modifiers & optionKey);
+ ms.SetMetaDown(modifiers & cmdKey);
+
+ return ms;
+}
+
+// TODO : once the new key/char handling is tested, move all the code to wxWindow
+
+bool wxApp::MacSendKeyDownEvent( wxWindow* focus , long keymessage , long modifiers , long when , short wherex , short wherey , wxChar uniChar )
+{
+ if ( !focus )
+ return false ;
+
+ bool handled;
+ wxKeyEvent event(wxEVT_KEY_DOWN) ;
+ MacCreateKeyEvent( event, focus , keymessage , modifiers , when , wherex , wherey , uniChar ) ;
+
+ handled = focus->GetEventHandler()->ProcessEvent( event ) ;
+ if ( handled && event.GetSkipped() )
+ handled = false ;
+
+#if wxUSE_ACCEL
+ if ( !handled )