]> git.saurik.com Git - wxWidgets.git/blobdiff - src/dfb/toplevel.cpp
Applied patch [ 1776951 ] wxSizer::GetContainingWindow fails for nested sizers
[wxWidgets.git] / src / dfb / toplevel.cpp
index cf667df95ddccd3f85d99e5f8b1155991f7caa42..cac71c9acb33009db48f3c8a78dd0012608391c3 100644 (file)
@@ -19,6 +19,8 @@
 
 #include "wx/dfb/private.h"
 
+#define TRACE_EVENTS "events"
+
 // ============================================================================
 // wxTopLevelWindowDFB
 // ============================================================================
@@ -166,3 +168,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);
+    GetEventHandler()->ProcessEvent(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");
+        }
+    }
+}