diff --git a/src/gtk/window.cpp b/src/gtk/window.cpp index 60f6e36bab..683944f6b2 100644 --- a/src/gtk/window.cpp +++ b/src/gtk/window.cpp @@ -1904,12 +1904,14 @@ gtk_window_focus_out_callback( GtkWidget *widget, } #endif // wxUSE_CARET - gboolean ret = FALSE; - // don't send the window a kill focus event if it thinks that it doesn't // have focus already 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; wxFocusEvent event( wxEVT_KILL_FOCUS, win->GetId() ); @@ -1917,14 +1919,13 @@ gtk_window_focus_out_callback( GtkWidget *widget, (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 - // since the default GTK+ handler issues a repaint - if (win->m_wxwindow) - return ret; - + // continue with normal processing return FALSE; } diff --git a/src/mac/carbon/window.cpp b/src/mac/carbon/window.cpp index 49c8deb142..c3c11d1273 100644 --- a/src/mac/carbon/window.cpp +++ b/src/mac/carbon/window.cpp @@ -334,6 +334,9 @@ static pascal OSStatus wxMacWindowControlEventHandler( EventHandlerCallRef handl } #endif + if ( thisWindow->MacIsUserPane() ) + result = noErr ; + if ( controlPart == kControlFocusNoPart ) { #if wxUSE_CARET @@ -367,9 +370,6 @@ static pascal OSStatus wxMacWindowControlEventHandler( EventHandlerCallRef handl event.SetEventObject(thisWindow); thisWindow->GetEventHandler()->ProcessEvent(event) ; } - - if ( thisWindow->MacIsUserPane() ) - result = noErr ; } break ;