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:
@@ -683,6 +683,8 @@ static long map_to_wx_keysym( GdkEventKey *event )
|
|||||||
case GDK_F11: key_code = WXK_F11; break;
|
case GDK_F11: key_code = WXK_F11; break;
|
||||||
case GDK_F12: key_code = WXK_F12; break;
|
case GDK_F12: key_code = WXK_F12; break;
|
||||||
default:
|
default:
|
||||||
|
{
|
||||||
|
if (event->length == 1)
|
||||||
{
|
{
|
||||||
if (event->length == 1)
|
if (event->length == 1)
|
||||||
{
|
{
|
||||||
@@ -1713,17 +1715,18 @@ static gint gtk_window_focus_in_callback( GtkWidget *widget,
|
|||||||
}
|
}
|
||||||
#endif // wxUSE_CARET
|
#endif // wxUSE_CARET
|
||||||
|
|
||||||
|
|
||||||
wxWindowGTK *active = wxGetTopLevelParent(win);
|
wxWindowGTK *active = wxGetTopLevelParent(win);
|
||||||
if ( active != g_activeFrame )
|
if ( active != g_activeFrame )
|
||||||
{
|
{
|
||||||
if ( 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());
|
wxActivateEvent event(wxEVT_ACTIVATE, FALSE, g_activeFrame->GetId());
|
||||||
event.SetEventObject(g_activeFrame);
|
event.SetEventObject(g_activeFrame);
|
||||||
g_activeFrame->GetEventHandler()->ProcessEvent(event);
|
g_activeFrame->GetEventHandler()->ProcessEvent(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wxLogTrace(wxT("activate"), wxT("Activating frame %p (from focus_in)"), active);
|
||||||
g_activeFrame = active;
|
g_activeFrame = active;
|
||||||
wxActivateEvent event(wxEVT_ACTIVATE, TRUE, g_activeFrame->GetId());
|
wxActivateEvent event(wxEVT_ACTIVATE, TRUE, g_activeFrame->GetId());
|
||||||
event.SetEventObject(g_activeFrame);
|
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 (!win->m_hasVMT) return FALSE;
|
||||||
if (g_blockEventsOnDrag) 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
|
// 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
|
// gtk_widget_grab_focus(), i.e. it first sends "focus_out" signal to
|
||||||
// this widget and then "focus_in". This is totally unexpected and
|
// 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;
|
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
|
// if the focus goes out of our app alltogether, OnIdle() will send
|
||||||
// wxActivateEvent, otherwise gtk_window_focus_in_callback() will reset
|
// wxActivateEvent, otherwise gtk_window_focus_in_callback() will reset
|
||||||
// g_sendActivateEvent to -1
|
// g_sendActivateEvent to -1
|
||||||
@@ -2825,6 +2831,7 @@ void wxWindowGTK::OnInternalIdle()
|
|||||||
{
|
{
|
||||||
if ( g_activeFrame )
|
if ( g_activeFrame )
|
||||||
{
|
{
|
||||||
|
wxLogTrace(wxT("activate"), wxT("Deactivating frame %p (from idle)"), g_activeFrame);
|
||||||
wxActivateEvent event(wxEVT_ACTIVATE, FALSE, g_activeFrame->GetId());
|
wxActivateEvent event(wxEVT_ACTIVATE, FALSE, g_activeFrame->GetId());
|
||||||
event.SetEventObject(g_activeFrame);
|
event.SetEventObject(g_activeFrame);
|
||||||
g_activeFrame->GetEventHandler()->ProcessEvent(event);
|
g_activeFrame->GetEventHandler()->ProcessEvent(event);
|
||||||
|
@@ -683,6 +683,8 @@ static long map_to_wx_keysym( GdkEventKey *event )
|
|||||||
case GDK_F11: key_code = WXK_F11; break;
|
case GDK_F11: key_code = WXK_F11; break;
|
||||||
case GDK_F12: key_code = WXK_F12; break;
|
case GDK_F12: key_code = WXK_F12; break;
|
||||||
default:
|
default:
|
||||||
|
{
|
||||||
|
if (event->length == 1)
|
||||||
{
|
{
|
||||||
if (event->length == 1)
|
if (event->length == 1)
|
||||||
{
|
{
|
||||||
@@ -1713,17 +1715,18 @@ static gint gtk_window_focus_in_callback( GtkWidget *widget,
|
|||||||
}
|
}
|
||||||
#endif // wxUSE_CARET
|
#endif // wxUSE_CARET
|
||||||
|
|
||||||
|
|
||||||
wxWindowGTK *active = wxGetTopLevelParent(win);
|
wxWindowGTK *active = wxGetTopLevelParent(win);
|
||||||
if ( active != g_activeFrame )
|
if ( active != g_activeFrame )
|
||||||
{
|
{
|
||||||
if ( 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());
|
wxActivateEvent event(wxEVT_ACTIVATE, FALSE, g_activeFrame->GetId());
|
||||||
event.SetEventObject(g_activeFrame);
|
event.SetEventObject(g_activeFrame);
|
||||||
g_activeFrame->GetEventHandler()->ProcessEvent(event);
|
g_activeFrame->GetEventHandler()->ProcessEvent(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wxLogTrace(wxT("activate"), wxT("Activating frame %p (from focus_in)"), active);
|
||||||
g_activeFrame = active;
|
g_activeFrame = active;
|
||||||
wxActivateEvent event(wxEVT_ACTIVATE, TRUE, g_activeFrame->GetId());
|
wxActivateEvent event(wxEVT_ACTIVATE, TRUE, g_activeFrame->GetId());
|
||||||
event.SetEventObject(g_activeFrame);
|
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 (!win->m_hasVMT) return FALSE;
|
||||||
if (g_blockEventsOnDrag) 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
|
// 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
|
// gtk_widget_grab_focus(), i.e. it first sends "focus_out" signal to
|
||||||
// this widget and then "focus_in". This is totally unexpected and
|
// 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;
|
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
|
// if the focus goes out of our app alltogether, OnIdle() will send
|
||||||
// wxActivateEvent, otherwise gtk_window_focus_in_callback() will reset
|
// wxActivateEvent, otherwise gtk_window_focus_in_callback() will reset
|
||||||
// g_sendActivateEvent to -1
|
// g_sendActivateEvent to -1
|
||||||
@@ -2825,6 +2831,7 @@ void wxWindowGTK::OnInternalIdle()
|
|||||||
{
|
{
|
||||||
if ( g_activeFrame )
|
if ( g_activeFrame )
|
||||||
{
|
{
|
||||||
|
wxLogTrace(wxT("activate"), wxT("Deactivating frame %p (from idle)"), g_activeFrame);
|
||||||
wxActivateEvent event(wxEVT_ACTIVATE, FALSE, g_activeFrame->GetId());
|
wxActivateEvent event(wxEVT_ACTIVATE, FALSE, g_activeFrame->GetId());
|
||||||
event.SetEventObject(g_activeFrame);
|
event.SetEventObject(g_activeFrame);
|
||||||
g_activeFrame->GetEventHandler()->ProcessEvent(event);
|
g_activeFrame->GetEventHandler()->ProcessEvent(event);
|
||||||
|
Reference in New Issue
Block a user