X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/42b0d8b96d2b4246ccfbe985639ee40f94225b5b..12bb29f5432174ecbd65549bda832d70d34a98ae:/src/dfb/toplevel.cpp diff --git a/src/dfb/toplevel.cpp b/src/dfb/toplevel.cpp index cf667df95d..8a5ef12fa9 100644 --- a/src/dfb/toplevel.cpp +++ b/src/dfb/toplevel.cpp @@ -19,6 +19,8 @@ #include "wx/dfb/private.h" +#define TRACE_EVENTS "events" + // ============================================================================ // wxTopLevelWindowDFB // ============================================================================ @@ -72,7 +74,6 @@ bool wxTopLevelWindowDFB::Create(wxWindow *parent, // showing and hiding // ---------------------------------------------------------------------------- -#warning "FIXME: the rest of this file is almost same as for MGL, merge it" bool wxTopLevelWindowDFB::ShowFullScreen(bool show, long style) { if ( show == m_fsIsShowing ) @@ -166,3 +167,40 @@ bool wxTopLevelWindowDFB::IsIconized() const { return false; } + +// ---------------------------------------------------------------------------- +// focus handling +// ---------------------------------------------------------------------------- + +void wxTopLevelWindowDFB::HandleFocusEvent(const wxDFBWindowEvent& event_) +{ + const DFBWindowEvent& dfbevent = event_; + const bool activate = (dfbevent.type == DWET_GOTFOCUS); + + wxLogTrace(TRACE_EVENTS, + "toplevel window %p ('%s') %s focus", + this, GetName(), + activate ? "got" : "lost"); + + wxActivateEvent event(wxEVT_ACTIVATE, activate, GetId()); + event.SetEventObject(this); + HandleWindowEvent(event); + + // if a frame that doesn't have wx focus inside it just got focus, we + // need to set focus to it (or its child): + if ( activate ) + { + wxWindow *focused = wxWindow::FindFocus(); + if ( !focused || focused->GetTLW() != this ) + { + wxLogTrace(TRACE_EVENTS, + "setting wx focus to toplevel window %p ('%s')", + this, GetName()); + + if ( CanAcceptFocus() ) + SetFocus(); + else + wxLogTrace(TRACE_EVENTS, "...which doesn't accept it"); + } + } +}