Use wxWindowRef to hold pointer to default button
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@53773 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -21,6 +21,7 @@
|
|||||||
#include "wx/nonownedwnd.h"
|
#include "wx/nonownedwnd.h"
|
||||||
#include "wx/iconbndl.h"
|
#include "wx/iconbndl.h"
|
||||||
#include "wx/containr.h"
|
#include "wx/containr.h"
|
||||||
|
#include "wx/weakref.h"
|
||||||
|
|
||||||
// the default names for various classes
|
// the default names for various classes
|
||||||
extern WXDLLIMPEXP_DATA_CORE(const char) wxFrameNameStr[];
|
extern WXDLLIMPEXP_DATA_CORE(const char) wxFrameNameStr[];
|
||||||
@@ -288,19 +289,15 @@ protected:
|
|||||||
static int WidthDefault(int w) { return w == wxDefaultCoord ? GetDefaultSize().x : w; }
|
static int WidthDefault(int w) { return w == wxDefaultCoord ? GetDefaultSize().x : w; }
|
||||||
static int HeightDefault(int h) { return h == wxDefaultCoord ? GetDefaultSize().y : h; }
|
static int HeightDefault(int h) { return h == wxDefaultCoord ? GetDefaultSize().y : h; }
|
||||||
|
|
||||||
// reset m_winDefault and m_winTmpDefault if they point to the window being
|
|
||||||
// destroyed
|
|
||||||
void OnChildDestroy(wxWindowDestroyEvent& event);
|
|
||||||
|
|
||||||
|
|
||||||
// the frame icon
|
// the frame icon
|
||||||
wxIconBundle m_icons;
|
wxIconBundle m_icons;
|
||||||
|
|
||||||
// a default window (usually a button) or NULL
|
// a default window (usually a button) or NULL
|
||||||
wxWindow *m_winDefault;
|
wxWindowRef m_winDefault;
|
||||||
|
|
||||||
// a temporary override of m_winDefault, use the latter if NULL
|
// a temporary override of m_winDefault, use the latter if NULL
|
||||||
wxWindow *m_winTmpDefault;
|
wxWindowRef m_winTmpDefault;
|
||||||
|
|
||||||
DECLARE_NO_COPY_CLASS(wxTopLevelWindowBase)
|
DECLARE_NO_COPY_CLASS(wxTopLevelWindowBase)
|
||||||
DECLARE_EVENT_TABLE()
|
DECLARE_EVENT_TABLE()
|
||||||
|
@@ -39,7 +39,6 @@
|
|||||||
BEGIN_EVENT_TABLE(wxTopLevelWindowBase, wxWindow)
|
BEGIN_EVENT_TABLE(wxTopLevelWindowBase, wxWindow)
|
||||||
EVT_CLOSE(wxTopLevelWindowBase::OnCloseWindow)
|
EVT_CLOSE(wxTopLevelWindowBase::OnCloseWindow)
|
||||||
EVT_SIZE(wxTopLevelWindowBase::OnSize)
|
EVT_SIZE(wxTopLevelWindowBase::OnSize)
|
||||||
EVT_WINDOW_DESTROY(wxTopLevelWindowBase::OnChildDestroy)
|
|
||||||
WX_EVENT_TABLE_CONTROL_CONTAINER(wxTopLevelWindowBase)
|
WX_EVENT_TABLE_CONTROL_CONTAINER(wxTopLevelWindowBase)
|
||||||
END_EVENT_TABLE()
|
END_EVENT_TABLE()
|
||||||
|
|
||||||
@@ -59,17 +58,12 @@ wxTopLevelWindowBase::wxTopLevelWindowBase()
|
|||||||
{
|
{
|
||||||
// Unlike windows, top level windows are created hidden by default.
|
// Unlike windows, top level windows are created hidden by default.
|
||||||
m_isShown = false;
|
m_isShown = false;
|
||||||
m_winDefault =
|
|
||||||
m_winTmpDefault = NULL;
|
|
||||||
|
|
||||||
WX_INIT_CONTROL_CONTAINER();
|
WX_INIT_CONTROL_CONTAINER();
|
||||||
}
|
}
|
||||||
|
|
||||||
wxTopLevelWindowBase::~wxTopLevelWindowBase()
|
wxTopLevelWindowBase::~wxTopLevelWindowBase()
|
||||||
{
|
{
|
||||||
m_winDefault =
|
|
||||||
m_winTmpDefault = NULL;
|
|
||||||
|
|
||||||
// don't let wxTheApp keep any stale pointers to us
|
// don't let wxTheApp keep any stale pointers to us
|
||||||
if ( wxTheApp && wxTheApp->GetTopWindow() == this )
|
if ( wxTheApp && wxTheApp->GetTopWindow() == this )
|
||||||
wxTheApp->SetTopWindow(NULL);
|
wxTheApp->SetTopWindow(NULL);
|
||||||
@@ -422,17 +416,6 @@ void wxTopLevelWindowBase::OnCloseWindow(wxCloseEvent& WXUNUSED(event))
|
|||||||
Destroy();
|
Destroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxTopLevelWindowBase::OnChildDestroy(wxWindowDestroyEvent& event)
|
|
||||||
{
|
|
||||||
event.Skip();
|
|
||||||
|
|
||||||
wxWindow * const win = event.GetWindow();
|
|
||||||
if ( win == m_winDefault )
|
|
||||||
m_winDefault = NULL;
|
|
||||||
if ( win == m_winTmpDefault )
|
|
||||||
m_winTmpDefault = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool wxTopLevelWindowBase::SendIconizeEvent(bool iconized)
|
bool wxTopLevelWindowBase::SendIconizeEvent(bool iconized)
|
||||||
{
|
{
|
||||||
wxIconizeEvent event(GetId(), iconized);
|
wxIconizeEvent event(GetId(), iconized);
|
||||||
|
Reference in New Issue
Block a user