]> git.saurik.com Git - wxWidgets.git/commitdiff
wrap native TLWs so that they also appear in the tlw list
authorStefan Csomor <csomor@advancedconcepts.ch>
Tue, 20 Apr 2010 14:51:54 +0000 (14:51 +0000)
committerStefan Csomor <csomor@advancedconcepts.ch>
Tue, 20 Apr 2010 14:51:54 +0000 (14:51 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64061 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/osx/toplevel.h
src/osx/nonownedwnd_osx.cpp
src/osx/toplevel_osx.cpp

index 14fb396b8bbef3bbc023f5335d1ed61310f5cc50..8ddac703e8d748b8ad9ba959a56faa2fccf1e476 100644 (file)
@@ -35,6 +35,8 @@ public:
         (void)Create(parent, id, title, pos, size, style, name);
     }
 
+    virtual ~wxTopLevelWindowMac();
+
     bool Create(wxWindow *parent,
                 wxWindowID id,
                 const wxString& title,
@@ -42,9 +44,9 @@ public:
                 const wxSize& size = wxDefaultSize,
                 long style = wxDEFAULT_FRAME_STYLE,
                 const wxString& name = wxFrameNameStr);
-
-    virtual ~wxTopLevelWindowMac();
-
+    
+    bool Create(wxWindow *parent, WXWindow nativeWindow);
+    
     virtual bool Destroy();
 
     virtual wxPoint GetClientAreaOrigin() const;
index 741b6468776c7d8ef54faa642f7191d8c93a34c8..b3987670d7478a0347c561cb18ac4e595d5ca948 100644 (file)
@@ -45,36 +45,30 @@ wxWindow* g_MacLastWindow = NULL ;
 // wxWindowMac utility functions
 // ---------------------------------------------------------------------------
 
-// Find an item given the Macintosh Window Reference
-
-WX_DECLARE_HASH_MAP(WXWindow, wxNonOwnedWindow*, wxPointerHash, wxPointerEqual, MacWindowMap);
+WX_DECLARE_HASH_MAP(WXWindow, wxNonOwnedWindowImpl*, wxPointerHash, wxPointerEqual, MacWindowMap);
 
 static MacWindowMap wxWinMacWindowList;
 
-wxNonOwnedWindow *wxFindWindowFromWXWindow(WXWindow inWindowRef)
+wxNonOwnedWindow* wxNonOwnedWindow::GetFromWXWindow( WXWindow win )
 {
-    MacWindowMap::iterator node = wxWinMacWindowList.find(inWindowRef);
-
-    return (node == wxWinMacWindowList.end()) ? NULL : node->second;
+    wxNonOwnedWindowImpl* impl = wxNonOwnedWindowImpl::FindFromWXWindow(win);
+    
+    return ( impl != NULL ? impl->GetWXPeer() : NULL ) ;
 }
 
-void wxAssociateWindowWithWXWindow(WXWindow inWindowRef, wxNonOwnedWindow *win) ;
-void wxAssociateWindowWithWXWindow(WXWindow inWindowRef, wxNonOwnedWindow *win)
+wxNonOwnedWindowImpl* wxNonOwnedWindowImpl::FindFromWXWindow (WXWindow window)
 {
-    // adding NULL WindowRef is (first) surely a result of an error and
-    // nothing else :-)
-    wxCHECK_RET( inWindowRef != (WXWindow) NULL, wxT("attempt to add a NULL WindowRef to window list") );
-
-    wxWinMacWindowList[inWindowRef] = win;
+    MacWindowMap::iterator node = wxWinMacWindowList.find(window);
+    
+    return (node == wxWinMacWindowList.end()) ? NULL : node->second;
 }
 
-void wxRemoveWXWindowAssociation(wxNonOwnedWindow *win) ;
-void wxRemoveWXWindowAssociation(wxNonOwnedWindow *win)
+void wxNonOwnedWindowImpl::RemoveAssociations( wxNonOwnedWindowImpl* impl)
 {
     MacWindowMap::iterator it;
     for ( it = wxWinMacWindowList.begin(); it != wxWinMacWindowList.end(); ++it )
     {
-        if ( it->second == win )
+        if ( it->second == impl )
         {
             wxWinMacWindowList.erase(it);
             break;
@@ -82,9 +76,13 @@ void wxRemoveWXWindowAssociation(wxNonOwnedWindow *win)
     }
 }
 
-wxNonOwnedWindow* wxNonOwnedWindow::GetFromWXWindow( WXWindow win )
+void wxNonOwnedWindowImpl::Associate( WXWindow window, wxNonOwnedWindowImpl *impl )
 {
-    return wxFindWindowFromWXWindow( win );
+    // adding NULL WindowRef is (first) surely a result of an error and
+    // nothing else :-)
+    wxCHECK_RET( window != (WXWindow) NULL, wxT("attempt to add a NULL WindowRef to window list") );
+    
+    wxWinMacWindowList[window] = impl;
 }
 
 // ----------------------------------------------------------------------------
@@ -132,7 +130,7 @@ bool wxNonOwnedWindow::Create(wxWindow *parent,
     int h = HeightDefault(size.y);
 
     m_nowpeer = wxNonOwnedWindowImpl::CreateNonOwnedWindow(this, parent, wxPoint(x,y) , wxSize(w,h) , style , GetExtraStyle(), name );
-    wxAssociateWindowWithWXWindow( m_nowpeer->GetWXWindow() , this ) ;
+    wxNonOwnedWindowImpl::Associate( m_nowpeer->GetWXWindow() , m_nowpeer ) ;
     m_peer = wxWidgetImpl::CreateContentView(this);
 
     DoSetWindowVariant( m_windowVariant ) ;
@@ -152,7 +150,7 @@ bool wxNonOwnedWindow::Create(wxWindow *parent, WXWindow nativeWindow)
 {
     m_nowpeer = wxNonOwnedWindowImpl::CreateNonOwnedWindow(this, parent, nativeWindow );
     m_isNativeWindowWrapper = true;
-    wxAssociateWindowWithWXWindow( m_nowpeer->GetWXWindow() , this ) ;
+    wxNonOwnedWindowImpl::Associate( m_nowpeer->GetWXWindow() , m_nowpeer ) ;
     m_peer = wxWidgetImpl::CreateContentView(this);
 
     if ( parent )
@@ -165,7 +163,7 @@ wxNonOwnedWindow::~wxNonOwnedWindow()
 {
     SendDestroyEvent();
 
-    wxRemoveWXWindowAssociation( this ) ;
+    wxNonOwnedWindowImpl::RemoveAssociations(m_nowpeer) ;
 
     DestroyChildren();
 
index 785a0e10c27c6937ef776d4fbd65a32d8f3aa9c2..4f62bae0a2d0232eac3f92fae273f75eaab22f20 100644 (file)
@@ -86,6 +86,17 @@ bool wxTopLevelWindowMac::Create(wxWindow *parent,
     return true;
 }
 
+bool wxTopLevelWindowMac::Create(wxWindow *parent,
+                                 WXWindow nativeWindow)
+{
+    if ( !wxNonOwnedWindow::Create(parent, nativeWindow ) )
+        return false;
+    
+    wxTopLevelWindows.Append(this);
+    
+    return true;
+}
+
 wxTopLevelWindowMac::~wxTopLevelWindowMac()
 {
 }