don't access the window after it had been deleted by the focus event handler (patch 1693063)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@45294 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -1880,12 +1880,14 @@ gtk_window_focus_out_callback( GtkWidget *widget,
|
|||||||
}
|
}
|
||||||
#endif // wxUSE_CARET
|
#endif // wxUSE_CARET
|
||||||
|
|
||||||
gboolean ret = FALSE;
|
|
||||||
|
|
||||||
// don't send the window a kill focus event if it thinks that it doesn't
|
// don't send the window a kill focus event if it thinks that it doesn't
|
||||||
// have focus already
|
// have focus already
|
||||||
if ( win->m_hasFocus )
|
if ( win->m_hasFocus )
|
||||||
{
|
{
|
||||||
|
// the event handler might delete the window when it loses focus, so
|
||||||
|
// check whether this is a custom window before calling it
|
||||||
|
const bool has_wxwindow = win->m_wxwindow != NULL;
|
||||||
|
|
||||||
win->m_hasFocus = false;
|
win->m_hasFocus = false;
|
||||||
|
|
||||||
wxFocusEvent event( wxEVT_KILL_FOCUS, win->GetId() );
|
wxFocusEvent event( wxEVT_KILL_FOCUS, win->GetId() );
|
||||||
@@ -1893,14 +1895,13 @@ gtk_window_focus_out_callback( GtkWidget *widget,
|
|||||||
|
|
||||||
(void)win->GTKProcessEvent( event );
|
(void)win->GTKProcessEvent( event );
|
||||||
|
|
||||||
ret = TRUE;
|
// Disable default focus handling for custom windows
|
||||||
|
// since the default GTK+ handler issues a repaint
|
||||||
|
if ( has_wxwindow )
|
||||||
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Disable default focus handling for custom windows
|
// continue with normal processing
|
||||||
// since the default GTK+ handler issues a repaint
|
|
||||||
if (win->m_wxwindow)
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -334,6 +334,9 @@ static pascal OSStatus wxMacWindowControlEventHandler( EventHandlerCallRef handl
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if ( thisWindow->MacIsUserPane() )
|
||||||
|
result = noErr ;
|
||||||
|
|
||||||
if ( controlPart == kControlFocusNoPart )
|
if ( controlPart == kControlFocusNoPart )
|
||||||
{
|
{
|
||||||
#if wxUSE_CARET
|
#if wxUSE_CARET
|
||||||
@@ -367,9 +370,6 @@ static pascal OSStatus wxMacWindowControlEventHandler( EventHandlerCallRef handl
|
|||||||
event.SetEventObject(thisWindow);
|
event.SetEventObject(thisWindow);
|
||||||
thisWindow->GetEventHandler()->ProcessEvent(event) ;
|
thisWindow->GetEventHandler()->ProcessEvent(event) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( thisWindow->MacIsUserPane() )
|
|
||||||
result = noErr ;
|
|
||||||
}
|
}
|
||||||
break ;
|
break ;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user