From 638b3cd7a8e52e144291c4665f74d1c805fb5d06 Mon Sep 17 00:00:00 2001 From: Stefan Csomor Date: Tue, 20 Apr 2010 14:51:54 +0000 Subject: [PATCH] wrap native TLWs so that they also appear in the tlw list git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64061 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/osx/toplevel.h | 8 ++++--- src/osx/nonownedwnd_osx.cpp | 42 ++++++++++++++++++------------------- src/osx/toplevel_osx.cpp | 11 ++++++++++ 3 files changed, 36 insertions(+), 25 deletions(-) diff --git a/include/wx/osx/toplevel.h b/include/wx/osx/toplevel.h index 14fb396b8b..8ddac703e8 100644 --- a/include/wx/osx/toplevel.h +++ b/include/wx/osx/toplevel.h @@ -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; diff --git a/src/osx/nonownedwnd_osx.cpp b/src/osx/nonownedwnd_osx.cpp index 741b646877..b3987670d7 100644 --- a/src/osx/nonownedwnd_osx.cpp +++ b/src/osx/nonownedwnd_osx.cpp @@ -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(); diff --git a/src/osx/toplevel_osx.cpp b/src/osx/toplevel_osx.cpp index 785a0e10c2..4f62bae0a2 100644 --- a/src/osx/toplevel_osx.cpp +++ b/src/osx/toplevel_osx.cpp @@ -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() { } -- 2.45.2