X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f17393f19902b4fd15ad20068af37aa6bbefd952..3baaf31317b1380ba9f33f8a23ff04bd20356d63:/src/gtk/window.cpp diff --git a/src/gtk/window.cpp b/src/gtk/window.cpp index 16d1c58200..e9f5e00cbb 100644 --- a/src/gtk/window.cpp +++ b/src/gtk/window.cpp @@ -683,7 +683,6 @@ static long map_to_wx_keysym( GdkEventKey *event ) case GDK_F11: key_code = WXK_F11; break; case GDK_F12: key_code = WXK_F12; break; default: - { if (event->length == 1) { key_code = (unsigned char)*event->string; @@ -692,7 +691,6 @@ static long map_to_wx_keysym( GdkEventKey *event ) { key_code = (guint)keysym; } - } } return key_code; @@ -1713,17 +1711,18 @@ static gint gtk_window_focus_in_callback( GtkWidget *widget, } #endif // wxUSE_CARET - wxWindowGTK *active = wxGetTopLevelParent(win); if ( active != g_activeFrame ) { if ( g_activeFrame ) { + wxLogTrace(wxT("activate"), wxT("Deactivating frame %p (from focus_in)"), g_activeFrame); wxActivateEvent event(wxEVT_ACTIVATE, FALSE, g_activeFrame->GetId()); event.SetEventObject(g_activeFrame); g_activeFrame->GetEventHandler()->ProcessEvent(event); } + wxLogTrace(wxT("activate"), wxT("Activating frame %p (from focus_in)"), active); g_activeFrame = active; wxActivateEvent event(wxEVT_ACTIVATE, TRUE, g_activeFrame->GetId()); event.SetEventObject(g_activeFrame); @@ -1761,9 +1760,6 @@ static gint gtk_window_focus_out_callback( GtkWidget *widget, GdkEvent *WXUNUSED if (!win->m_hasVMT) return FALSE; if (g_blockEventsOnDrag) return FALSE; - //wxASSERT_MSG( wxGetTopLevelParent(win) == g_activeFrame, wxT("unfocusing window that haven't gained focus properly") ) - g_activeFrameLostFocus = TRUE; - // VZ: this is really weird but GTK+ seems to call us from inside // gtk_widget_grab_focus(), i.e. it first sends "focus_out" signal to // this widget and then "focus_in". This is totally unexpected and @@ -1776,6 +1772,12 @@ static gint gtk_window_focus_out_callback( GtkWidget *widget, GdkEvent *WXUNUSED return FALSE; } + if ( !g_activeFrameLostFocus && g_activeFrame ) + { + wxASSERT_MSG( wxGetTopLevelParent(win) == g_activeFrame, wxT("unfocusing window that haven't gained focus properly") ) + g_activeFrameLostFocus = TRUE; + } + // if the focus goes out of our app alltogether, OnIdle() will send // wxActivateEvent, otherwise gtk_window_focus_in_callback() will reset // g_sendActivateEvent to -1 @@ -2825,6 +2827,7 @@ void wxWindowGTK::OnInternalIdle() { if ( g_activeFrame ) { + wxLogTrace(wxT("activate"), wxT("Deactivating frame %p (from idle)"), g_activeFrame); wxActivateEvent event(wxEVT_ACTIVATE, FALSE, g_activeFrame->GetId()); event.SetEventObject(g_activeFrame); g_activeFrame->GetEventHandler()->ProcessEvent(event);