// headers
// ----------------------------------------------------------------------------
-#ifdef __GNUG__
+#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
#pragma implementation "toplevel.h"
#endif
#include "wx/log.h"
#include "wx/intl.h"
#include "wx/settings.h"
+ #include "wx/control.h"
#endif //WX_PRECOMP
#include "wx/mac/uma.h"
static pascal OSStatus KeyboardEventHandler( EventHandlerCallRef handler , EventRef event , void *data )
{
OSStatus result = eventNotHandledErr ;
-
- wxWindow* focus = wxWindow::FindFocus() ;
+ // call DoFindFocus instead of FindFocus, because for Composite Windows(like WxGenericListCtrl)
+ // FindFocus does not return the actual focus window,but the enclosing window
+ wxWindow* focus = wxWindow::DoFindFocus();
if ( focus == NULL )
return result ;
event.m_x = point.h;
event.m_y = point.v;
- event.m_timeStamp = when;
- wxWindow* focus = wxWindow::FindFocus() ;
+ event.SetTimestamp(when);
event.SetEventObject(focus);
if ( focus && (modifiers ^ wxTheApp->s_lastModifiers ) & controlKey )
currentMouseWindow = wxFindControlFromMacControl( control ) ;
if ( currentMouseWindow == NULL && cEvent.GetKind() == kEventMouseMoved )
{
+#if wxUSE_TOOLBAR
// for wxToolBar to function we have to send certaint events to it
// instead of its children (wxToolBarTools)
ControlRef parent ;
wxWindow *wxParent = wxFindControlFromMacControl( parent ) ;
if ( wxParent && wxParent->IsKindOf( CLASSINFO( wxToolBar ) ) )
currentMouseWindow = wxParent ;
+#endif
}
}
}
} // if ( windowPart == inMenuBar )
else if ( currentMouseWindow )
{
- currentMouseWindow->ScreenToClient( &wxevent.m_x , &wxevent.m_y ) ;
wxWindow *currentMouseWindowParent = currentMouseWindow->GetParent();
+
+ currentMouseWindow->ScreenToClient( &wxevent.m_x , &wxevent.m_y ) ;
wxevent.SetEventObject( currentMouseWindow ) ;
wxToolTip::RelayEvent( currentMouseWindow , wxevent);
#endif // wxUSE_TOOLTIPS
if ( currentMouseWindow->GetEventHandler()->ProcessEvent(wxevent) )
+ {
+ if ((currentMouseWindowParent != NULL) &&
+ (currentMouseWindowParent->GetChildren().Find(currentMouseWindow) == NULL))
+ currentMouseWindow = NULL;
+
result = noErr;
+ }
else
{
// if the user code did _not_ handle the event, then perform the
HandleControlClick( (ControlRef) currentMouseWindow->GetHandle() , clickLocation ,
modifiers , (ControlActionUPP ) -1 ) ;
- // We need to handle the rare case that the control to
- // which the currentMouseWindow points gets deleted as
- // a reaction to HandleControlClick. This would lead to
- // a crash in the update cursor code below.
- if (!currentMouseWindowParent->GetChildren().Find( currentMouseWindow ))
+ if ((currentMouseWindowParent != NULL) &&
+ (currentMouseWindowParent->GetChildren().Find(currentMouseWindow) == NULL))
currentMouseWindow = NULL;
}
result = noErr ;