]> git.saurik.com Git - wxWidgets.git/commitdiff
make wxFrame a wxControlContainer too, so that it behaves in the same way as wxDialog
authorVáclav Slavík <vslavik@fastmail.fm>
Wed, 13 Jun 2007 16:29:23 +0000 (16:29 +0000)
committerVáclav Slavík <vslavik@fastmail.fm>
Wed, 13 Jun 2007 16:29:23 +0000 (16:29 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@46452 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/dialog.h
include/wx/frame.h
include/wx/mac/carbon/window.h
include/wx/toplevel.h
include/wx/univ/window.h
include/wx/window.h
src/common/containr.cpp
src/common/dlgcmn.cpp
src/common/toplvcmn.cpp

index 58a30e2d0c1247fea384a2e0425cbc8dd9ae44de..2d6f8ee5804a752072c33f68b43353dd68623a00 100644 (file)
@@ -13,7 +13,6 @@
 #define _WX_DIALOG_H_BASE_
 
 #include "wx/defs.h"
 #define _WX_DIALOG_H_BASE_
 
 #include "wx/defs.h"
-#include "wx/containr.h"
 #include "wx/toplevel.h"
 
 class WXDLLEXPORT wxSizer;
 #include "wx/toplevel.h"
 
 class WXDLLEXPORT wxSizer;
@@ -141,7 +140,6 @@ private:
 
     DECLARE_NO_COPY_CLASS(wxDialogBase)
     DECLARE_EVENT_TABLE()
 
     DECLARE_NO_COPY_CLASS(wxDialogBase)
     DECLARE_EVENT_TABLE()
-    WX_DECLARE_CONTROL_CONTAINER();
 };
 
 
 };
 
 
index 2d3a8988c9717750fe97e252141b5ffb232d168e..0f65132d711cefefae6d85b482fe2f4ac516e9e0 100644 (file)
@@ -190,6 +190,10 @@ protected:
 
     // test whether this window makes part of the frame
     virtual bool IsOneOfBars(const wxWindow *win) const;
 
     // test whether this window makes part of the frame
     virtual bool IsOneOfBars(const wxWindow *win) const;
+    virtual bool IsClientAreaChild(const wxWindow *child) const
+    {
+        return !IsOneOfBars(child) && wxTopLevelWindow::IsClientAreaChild(child);
+    }
 
 #if wxUSE_MENUS
     // override to update menu bar position when the frame size changes
 
 #if wxUSE_MENUS
     // override to update menu bar position when the frame size changes
index 097890bf33fd163a4baaa181d5d921b87c281d30..7f98c884833a21f1471fc88a39b07cfba8b160ef 100644 (file)
@@ -214,8 +214,13 @@ public:
     // returns true if the grandchildren need to be clipped to the children's content area
     // (e.g., splitter windows)
     virtual bool        MacClipGrandChildren() const { return false ; }
     // returns true if the grandchildren need to be clipped to the children's content area
     // (e.g., splitter windows)
     virtual bool        MacClipGrandChildren() const { return false ; }
-    bool                MacIsWindowScrollbar( const wxWindow* sb )
+    bool                MacIsWindowScrollbar( const wxWindow* sb ) const
     { return ((wxWindow*)m_hScrollBar == sb || (wxWindow*)m_vScrollBar == sb) ; }
     { return ((wxWindow*)m_hScrollBar == sb || (wxWindow*)m_vScrollBar == sb) ; }
+    virtual bool IsClientAreaChild(const wxWindow *child) const
+    {
+        return !MacIsWindowScrollbar(child) &&
+               wxWindowBase::IsClientAreaChild(child);
+    }
 
     virtual void        MacInstallEventHandler(WXWidget native) ;
     void                MacPostControlCreate(const wxPoint& pos, const wxSize& size) ;
 
     virtual void        MacInstallEventHandler(WXWidget native) ;
     void                MacPostControlCreate(const wxPoint& pos, const wxSize& size) ;
index 92fcc6b37f8f96ecc16d346839731792a5d3dab1..f10caf9f33ff6819ed60a5c6b04b31aa57c618a8 100644 (file)
@@ -20,6 +20,7 @@
 
 #include "wx/nonownedwnd.h"
 #include "wx/iconbndl.h"
 
 #include "wx/nonownedwnd.h"
 #include "wx/iconbndl.h"
+#include "wx/containr.h"
 
 // the default names for various classes
 extern WXDLLEXPORT_DATA(const wxChar) wxFrameNameStr[];
 
 // the default names for various classes
 extern WXDLLEXPORT_DATA(const wxChar) wxFrameNameStr[];
@@ -206,9 +207,6 @@ public:
     // reverts to the "permanent" default as soon as this temporary default
     // item loses focus
 
     // reverts to the "permanent" default as soon as this temporary default
     // item loses focus
 
-    // used to reset default if pointing to removed child
-    virtual void RemoveChild(wxWindowBase *child);
-
     // get the default item, temporary or permanent
     wxWindow *GetDefaultItem() const
         { return m_winTmpDefault ? m_winTmpDefault : m_winDefault; }
     // get the default item, temporary or permanent
     wxWindow *GetDefaultItem() const
         { return m_winTmpDefault ? m_winTmpDefault : m_winDefault; }
@@ -306,6 +304,7 @@ protected:
 
     DECLARE_NO_COPY_CLASS(wxTopLevelWindowBase)
     DECLARE_EVENT_TABLE()
 
     DECLARE_NO_COPY_CLASS(wxTopLevelWindowBase)
     DECLARE_EVENT_TABLE()
+    WX_DECLARE_CONTROL_CONTAINER();
 };
 
 
 };
 
 
index fe6a23f7bda471faa180496cd4285f266d441b9d..92b17be4a71b6cf7a75b79eb1bcc9d8d3b6c48d0 100644 (file)
@@ -190,6 +190,16 @@ public:
     // should we use the standard control colours or not?
     virtual bool ShouldInheritColours() const { return false; }
 
     // should we use the standard control colours or not?
     virtual bool ShouldInheritColours() const { return false; }
 
+    virtual bool IsClientAreaChild(const wxWindow *child) const
+    {
+#if wxUSE_SCROLLBAR
+        if ( child == (wxWindow*)m_scrollbarHorz ||
+             child == (wxWindow*)m_scrollbarVert )
+            return false;
+#endif
+        return wxWindowNative::IsClientAreaChild(child);
+    }
+
 protected:
     // common part of all ctors
     void Init();
 protected:
     // common part of all ctors
     void Init();
index 91a1ac180de645a72d97ebae58c164b604395a32..80c4b0961ec0c90fe4adddc2822806a989ad58f5 100644 (file)
@@ -641,6 +641,11 @@ public:
     virtual void AddChild( wxWindowBase *child );
     virtual void RemoveChild( wxWindowBase *child );
 
     virtual void AddChild( wxWindowBase *child );
     virtual void RemoveChild( wxWindowBase *child );
 
+    // returns true if the child is in the client area of the window, i.e. is
+    // not scrollbar, toolbar etc.
+    virtual bool IsClientAreaChild(const wxWindow *WXUNUSED(child)) const
+        { return true; }
+
     // looking for windows
     // -------------------
 
     // looking for windows
     // -------------------
 
index a7de0bd423e71e1201923a408b818dd0f925ed8c..16fda35e9d8632efa52957e0b6fae8744e99cf20 100644 (file)
@@ -75,10 +75,8 @@ bool wxControlContainerBase::ShouldAcceptFocus() const
         wxWindow *child = node->GetData();
         node = node->GetNext();
 
         wxWindow *child = node->GetData();
         node = node->GetNext();
 
-#ifdef __WXMAC__
-        if ( m_winParent->MacIsWindowScrollbar( child ) )
+        if ( !m_winParent->IsClientAreaChild(child) )
             continue;
             continue;
-#endif
 
         if ( child->CanAcceptFocus() )
             return false;
 
         if ( child->CanAcceptFocus() )
             return false;
@@ -658,11 +656,10 @@ bool wxSetFocusToChild(wxWindow *win, wxWindow **childLastFocused)
         wxWindow *child = node->GetData();
         node = node->GetNext();
 
         wxWindow *child = node->GetData();
         node = node->GetNext();
 
-#ifdef __WXMAC__
-        if ( child->GetParent()->MacIsWindowScrollbar( child ) )
+        // skip special windows:
+        if ( !win->IsClientAreaChild(child) )
             continue;
             continue;
-#endif
-        
+
         if ( child->CanAcceptFocusFromKeyboard() && !child->IsTopLevel() )
         {
 #ifdef __WXMSW__
         if ( child->CanAcceptFocusFromKeyboard() && !child->IsTopLevel() )
         {
 #ifdef __WXMSW__
index 0991a598ae976e16ba6d10e5e6d6e582b59e6aa4..92417acc0e216b8395b6ad3b78c9732c098ae6b7 100644 (file)
@@ -52,12 +52,8 @@ BEGIN_EVENT_TABLE(wxDialogBase, wxTopLevelWindow)
     EVT_CLOSE(wxDialogBase::OnCloseWindow)
 
     EVT_CHAR_HOOK(wxDialogBase::OnCharHook)
     EVT_CLOSE(wxDialogBase::OnCloseWindow)
 
     EVT_CHAR_HOOK(wxDialogBase::OnCharHook)
-
-    WX_EVENT_TABLE_CONTROL_CONTAINER(wxDialogBase)
 END_EVENT_TABLE()
 
 END_EVENT_TABLE()
 
-WX_DELEGATE_TO_CONTROL_CONTAINER(wxDialogBase, wxTopLevelWindow)
-
 void wxDialogBase::Init()
 {
     m_returnCode = 0;
 void wxDialogBase::Init()
 {
     m_returnCode = 0;
@@ -68,8 +64,6 @@ void wxDialogBase::Init()
     // dialog controls from reaching the parent frame which is usually
     // undesirable and can lead to unexpected and hard to find bugs
     SetExtraStyle(GetExtraStyle() | wxWS_EX_BLOCK_EVENTS);
     // dialog controls from reaching the parent frame which is usually
     // undesirable and can lead to unexpected and hard to find bugs
     SetExtraStyle(GetExtraStyle() | wxWS_EX_BLOCK_EVENTS);
-
-    WX_INIT_CONTROL_CONTAINER();
 }
 
 // helper of GetParentForModalDialog()
 }
 
 // helper of GetParentForModalDialog()
index e72953cf7edefb692cce71dbf65d863429670d4d..77cbec058283921f0db1100d8b57447674ca0e22 100644 (file)
@@ -40,8 +40,11 @@ BEGIN_EVENT_TABLE(wxTopLevelWindowBase, wxWindow)
     EVT_CLOSE(wxTopLevelWindowBase::OnCloseWindow)
     EVT_SIZE(wxTopLevelWindowBase::OnSize)
     EVT_WINDOW_DESTROY(wxTopLevelWindowBase::OnChildDestroy)
     EVT_CLOSE(wxTopLevelWindowBase::OnCloseWindow)
     EVT_SIZE(wxTopLevelWindowBase::OnSize)
     EVT_WINDOW_DESTROY(wxTopLevelWindowBase::OnChildDestroy)
+    WX_EVENT_TABLE_CONTROL_CONTAINER(wxTopLevelWindowBase)
 END_EVENT_TABLE()
 
 END_EVENT_TABLE()
 
+WX_DELEGATE_TO_CONTROL_CONTAINER(wxTopLevelWindowBase, wxWindow)
+
 // ============================================================================
 // implementation
 // ============================================================================
 // ============================================================================
 // implementation
 // ============================================================================
@@ -58,10 +61,14 @@ wxTopLevelWindowBase::wxTopLevelWindowBase()
     m_isShown = false;
     m_winDefault = NULL;
     m_winTmpDefault = NULL;
     m_isShown = false;
     m_winDefault = NULL;
     m_winTmpDefault = NULL;
+
+    WX_INIT_CONTROL_CONTAINER();
 }
 
 wxTopLevelWindowBase::~wxTopLevelWindowBase()
 {
 }
 
 wxTopLevelWindowBase::~wxTopLevelWindowBase()
 {
+    m_winDefault = m_winTmpDefault = NULL;
+
     // don't let wxTheApp keep any stale pointers to us
     if ( wxTheApp && wxTheApp->GetTopWindow() == this )
         wxTheApp->SetTopWindow(NULL);
     // don't let wxTheApp keep any stale pointers to us
     if ( wxTheApp && wxTheApp->GetTopWindow() == this )
         wxTheApp->SetTopWindow(NULL);
@@ -412,14 +419,3 @@ void wxTopLevelWindowBase::RequestUserAttention(int WXUNUSED(flags))
     // it's probably better than do nothing, isn't it?
     Raise();
 }
     // it's probably better than do nothing, isn't it?
     Raise();
 }
-
-void wxTopLevelWindowBase::RemoveChild(wxWindowBase *child)
-{
-    if ( child == m_winDefault )
-        m_winDefault = NULL;
-
-    if ( child == m_winTmpDefault )
-        m_winTmpDefault = NULL;
-
-    wxWindow::RemoveChild(child);
-}