Fixed problem with kill focus event getting sent to control

that is getting the focus.


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@18947 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Julian Smart 2003-01-26 19:04:10 +00:00
parent f2dec5b10d
commit eed1be652a
2 changed files with 34 additions and 16 deletions

View File

@ -227,24 +227,32 @@ void wxWindowMac::SetFocus()
{
if (gFocusWindow )
{
#if wxUSE_CARET
#if wxUSE_CARET
// Deal with caret
if ( gFocusWindow->m_caret )
{
gFocusWindow->m_caret->OnKillFocus();
}
#endif // wxUSE_CARET
#ifndef __WXUNIVERSAL__
#endif // wxUSE_CARET
#ifndef __WXUNIVERSAL__
wxControl* control = wxDynamicCast( gFocusWindow , wxControl ) ;
if ( control && control->GetMacControl() )
{
UMASetKeyboardFocus( (WindowRef) gFocusWindow->MacGetRootWindow() , (ControlHandle) control->GetMacControl() , kControlFocusNoPart ) ;
control->MacRedrawControl() ;
}
#endif
wxFocusEvent event(wxEVT_KILL_FOCUS, gFocusWindow->m_windowId);
event.SetEventObject(gFocusWindow);
gFocusWindow->GetEventHandler()->ProcessEvent(event) ;
#endif
// Without testing the window id, for some reason
// a kill focus event can still be sent to
// the control just being focussed.
int thisId = this->m_windowId;
int gFocusWindowId = gFocusWindow->m_windowId;
if (gFocusWindowId != thisId)
{
wxFocusEvent event(wxEVT_KILL_FOCUS, gFocusWindow->m_windowId);
event.SetEventObject(gFocusWindow);
gFocusWindow->GetEventHandler()->ProcessEvent(event) ;
}
}
gFocusWindow = this ;
{
@ -1765,7 +1773,8 @@ void wxWindowMac::MacRedraw( WXHRGN updatergnr , long time, bool erase)
if ( erase && !EmptyRgn(ownUpdateRgn) )
{
wxWindowDC dc(this);
dc.SetClippingRegion(wxRegion(ownUpdateRgn));
if (!EmptyRgn(ownUpdateRgn))
dc.SetClippingRegion(wxRegion(ownUpdateRgn));
wxEraseEvent eevent( GetId(), &dc );
eevent.SetEventObject( this );
GetEventHandler()->ProcessEvent( eevent );

View File

@ -227,24 +227,32 @@ void wxWindowMac::SetFocus()
{
if (gFocusWindow )
{
#if wxUSE_CARET
#if wxUSE_CARET
// Deal with caret
if ( gFocusWindow->m_caret )
{
gFocusWindow->m_caret->OnKillFocus();
}
#endif // wxUSE_CARET
#ifndef __WXUNIVERSAL__
#endif // wxUSE_CARET
#ifndef __WXUNIVERSAL__
wxControl* control = wxDynamicCast( gFocusWindow , wxControl ) ;
if ( control && control->GetMacControl() )
{
UMASetKeyboardFocus( (WindowRef) gFocusWindow->MacGetRootWindow() , (ControlHandle) control->GetMacControl() , kControlFocusNoPart ) ;
control->MacRedrawControl() ;
}
#endif
wxFocusEvent event(wxEVT_KILL_FOCUS, gFocusWindow->m_windowId);
event.SetEventObject(gFocusWindow);
gFocusWindow->GetEventHandler()->ProcessEvent(event) ;
#endif
// Without testing the window id, for some reason
// a kill focus event can still be sent to
// the control just being focussed.
int thisId = this->m_windowId;
int gFocusWindowId = gFocusWindow->m_windowId;
if (gFocusWindowId != thisId)
{
wxFocusEvent event(wxEVT_KILL_FOCUS, gFocusWindow->m_windowId);
event.SetEventObject(gFocusWindow);
gFocusWindow->GetEventHandler()->ProcessEvent(event) ;
}
}
gFocusWindow = this ;
{
@ -1765,7 +1773,8 @@ void wxWindowMac::MacRedraw( WXHRGN updatergnr , long time, bool erase)
if ( erase && !EmptyRgn(ownUpdateRgn) )
{
wxWindowDC dc(this);
dc.SetClippingRegion(wxRegion(ownUpdateRgn));
if (!EmptyRgn(ownUpdateRgn))
dc.SetClippingRegion(wxRegion(ownUpdateRgn));
wxEraseEvent eevent( GetId(), &dc );
eevent.SetEventObject( this );
GetEventHandler()->ProcessEvent( eevent );