- wxLogTrace(TRACE_FOCUS,
- _T("%s: focus in"), win->GetName().c_str());
-
-#if wxUSE_CARET
- // caret needs to be informed about focus change
- wxCaret *caret = win->GetCaret();
- if ( caret )
- {
- caret->OnSetFocus();
- }
-#endif // wxUSE_CARET
-
- gboolean ret = FALSE;
-
- // does the window itself think that it has the focus?
- if ( !win->m_hasFocus )
- {
- // not yet, notify it
- win->m_hasFocus = true;
-
- (void)DoSendFocusEvents(win);
-
- ret = TRUE;
- }
-
- // Disable default focus handling for custom windows
- // since the default GTK+ handler issues a repaint
- if (win->m_wxwindow)
- return ret;
-
- return FALSE;
-}
-
-//-----------------------------------------------------------------------------
-// "focus_out_event"
-//-----------------------------------------------------------------------------
-
-static gboolean
-gtk_window_focus_out_callback( GtkWidget * WXUNUSED(widget),
- GdkEventFocus * WXUNUSED(gdk_event),
- wxWindowGTK *win )
-{
- DEBUG_MAIN_THREAD
-
- if (win->m_imData)
- gtk_im_context_focus_out(win->m_imData->context);
-
- wxLogTrace( TRACE_FOCUS,
- _T("%s: focus out"), win->GetName().c_str() );
-
-
- wxWindowGTK *winFocus = wxFindFocusedChild(win);
- if ( winFocus )
- win = winFocus;
-
- g_focusWindow = (wxWindowGTK *)NULL;
-
-#if wxUSE_CARET
- // caret needs to be informed about focus change
- wxCaret *caret = win->GetCaret();
- if ( caret )
- {
- caret->OnKillFocus();
- }
-#endif // wxUSE_CARET
-
- // 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() );
- event.SetEventObject( win );
-
- (void)win->GTKProcessEvent( event );
-
- // Disable default focus handling for custom windows
- // since the default GTK+ handler issues a repaint
- if ( has_wxwindow )
- return TRUE;
- }
-
- // continue with normal processing
- return FALSE;
-}