hopefully fixes focus assertion

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@11897 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Václav Slavík
2001-10-08 22:17:15 +00:00
parent a7ae8fea47
commit 45eb524957
2 changed files with 22 additions and 8 deletions

View File

@@ -683,6 +683,8 @@ 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)
{
if (event->length == 1)
{
@@ -1713,17 +1715,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 +1764,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 +1776,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 +2831,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);