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
This commit is contained in:
Stefan Csomor
2010-04-20 14:51:54 +00:00
parent e17ac396d0
commit 638b3cd7a8
3 changed files with 37 additions and 26 deletions

View File

@@ -35,6 +35,8 @@ public:
(void)Create(parent, id, title, pos, size, style, name); (void)Create(parent, id, title, pos, size, style, name);
} }
virtual ~wxTopLevelWindowMac();
bool Create(wxWindow *parent, bool Create(wxWindow *parent,
wxWindowID id, wxWindowID id,
const wxString& title, const wxString& title,
@@ -42,9 +44,9 @@ public:
const wxSize& size = wxDefaultSize, const wxSize& size = wxDefaultSize,
long style = wxDEFAULT_FRAME_STYLE, long style = wxDEFAULT_FRAME_STYLE,
const wxString& name = wxFrameNameStr); const wxString& name = wxFrameNameStr);
virtual ~wxTopLevelWindowMac(); bool Create(wxWindow *parent, WXWindow nativeWindow);
virtual bool Destroy(); virtual bool Destroy();
virtual wxPoint GetClientAreaOrigin() const; virtual wxPoint GetClientAreaOrigin() const;

View File

@@ -45,36 +45,30 @@ wxWindow* g_MacLastWindow = NULL ;
// wxWindowMac utility functions // wxWindowMac utility functions
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
// Find an item given the Macintosh Window Reference WX_DECLARE_HASH_MAP(WXWindow, wxNonOwnedWindowImpl*, wxPointerHash, wxPointerEqual, MacWindowMap);
WX_DECLARE_HASH_MAP(WXWindow, wxNonOwnedWindow*, wxPointerHash, wxPointerEqual, MacWindowMap);
static MacWindowMap wxWinMacWindowList; static MacWindowMap wxWinMacWindowList;
wxNonOwnedWindow *wxFindWindowFromWXWindow(WXWindow inWindowRef) wxNonOwnedWindow* wxNonOwnedWindow::GetFromWXWindow( WXWindow win )
{ {
MacWindowMap::iterator node = wxWinMacWindowList.find(inWindowRef); wxNonOwnedWindowImpl* impl = wxNonOwnedWindowImpl::FindFromWXWindow(win);
return ( impl != NULL ? impl->GetWXPeer() : NULL ) ;
}
wxNonOwnedWindowImpl* wxNonOwnedWindowImpl::FindFromWXWindow (WXWindow window)
{
MacWindowMap::iterator node = wxWinMacWindowList.find(window);
return (node == wxWinMacWindowList.end()) ? NULL : node->second; return (node == wxWinMacWindowList.end()) ? NULL : node->second;
} }
void wxAssociateWindowWithWXWindow(WXWindow inWindowRef, wxNonOwnedWindow *win) ; void wxNonOwnedWindowImpl::RemoveAssociations( wxNonOwnedWindowImpl* impl)
void wxAssociateWindowWithWXWindow(WXWindow inWindowRef, wxNonOwnedWindow *win)
{
// 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;
}
void wxRemoveWXWindowAssociation(wxNonOwnedWindow *win) ;
void wxRemoveWXWindowAssociation(wxNonOwnedWindow *win)
{ {
MacWindowMap::iterator it; MacWindowMap::iterator it;
for ( it = wxWinMacWindowList.begin(); it != wxWinMacWindowList.end(); ++it ) for ( it = wxWinMacWindowList.begin(); it != wxWinMacWindowList.end(); ++it )
{ {
if ( it->second == win ) if ( it->second == impl )
{ {
wxWinMacWindowList.erase(it); wxWinMacWindowList.erase(it);
break; 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); int h = HeightDefault(size.y);
m_nowpeer = wxNonOwnedWindowImpl::CreateNonOwnedWindow(this, parent, wxPoint(x,y) , wxSize(w,h) , style , GetExtraStyle(), name ); 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); m_peer = wxWidgetImpl::CreateContentView(this);
DoSetWindowVariant( m_windowVariant ) ; DoSetWindowVariant( m_windowVariant ) ;
@@ -152,7 +150,7 @@ bool wxNonOwnedWindow::Create(wxWindow *parent, WXWindow nativeWindow)
{ {
m_nowpeer = wxNonOwnedWindowImpl::CreateNonOwnedWindow(this, parent, nativeWindow ); m_nowpeer = wxNonOwnedWindowImpl::CreateNonOwnedWindow(this, parent, nativeWindow );
m_isNativeWindowWrapper = true; m_isNativeWindowWrapper = true;
wxAssociateWindowWithWXWindow( m_nowpeer->GetWXWindow() , this ) ; wxNonOwnedWindowImpl::Associate( m_nowpeer->GetWXWindow() , m_nowpeer ) ;
m_peer = wxWidgetImpl::CreateContentView(this); m_peer = wxWidgetImpl::CreateContentView(this);
if ( parent ) if ( parent )
@@ -165,7 +163,7 @@ wxNonOwnedWindow::~wxNonOwnedWindow()
{ {
SendDestroyEvent(); SendDestroyEvent();
wxRemoveWXWindowAssociation( this ) ; wxNonOwnedWindowImpl::RemoveAssociations(m_nowpeer) ;
DestroyChildren(); DestroyChildren();

View File

@@ -86,6 +86,17 @@ bool wxTopLevelWindowMac::Create(wxWindow *parent,
return true; return true;
} }
bool wxTopLevelWindowMac::Create(wxWindow *parent,
WXWindow nativeWindow)
{
if ( !wxNonOwnedWindow::Create(parent, nativeWindow ) )
return false;
wxTopLevelWindows.Append(this);
return true;
}
wxTopLevelWindowMac::~wxTopLevelWindowMac() wxTopLevelWindowMac::~wxTopLevelWindowMac()
{ {
} }