Removing manual focus handling
see https://github.com/wxWidgets/wxWidgets/pull/672 , commit 61b1a9a3533d4e16b2b7a9441e42766d8d9655c7 , revert this change if problems arise to see whether this is a recursion
This commit is contained in:
@@ -21,7 +21,7 @@ class WXDLLIMPEXP_CORE wxFrame: public wxFrameBase
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
// construction
|
// construction
|
||||||
wxFrame() { Init(); }
|
wxFrame() { }
|
||||||
wxFrame(wxWindow *parent,
|
wxFrame(wxWindow *parent,
|
||||||
wxWindowID id,
|
wxWindowID id,
|
||||||
const wxString& title,
|
const wxString& title,
|
||||||
@@ -30,8 +30,6 @@ public:
|
|||||||
long style = wxDEFAULT_FRAME_STYLE,
|
long style = wxDEFAULT_FRAME_STYLE,
|
||||||
const wxString& name = wxFrameNameStr)
|
const wxString& name = wxFrameNameStr)
|
||||||
{
|
{
|
||||||
Init();
|
|
||||||
|
|
||||||
Create(parent, id, title, pos, size, style, name);
|
Create(parent, id, title, pos, size, style, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -75,19 +73,12 @@ public:
|
|||||||
const wxString& name = wxStatusLineNameStr) wxOVERRIDE;
|
const wxString& name = wxStatusLineNameStr) wxOVERRIDE;
|
||||||
#endif // wxUSE_STATUSBAR
|
#endif // wxUSE_STATUSBAR
|
||||||
|
|
||||||
// called by wxWindow whenever it gets focus
|
|
||||||
void SetLastFocus(wxWindow *win) { m_winLastFocused = win; }
|
|
||||||
wxWindow *GetLastFocus() const { return m_winLastFocused; }
|
|
||||||
|
|
||||||
void PositionBars();
|
void PositionBars();
|
||||||
|
|
||||||
// internal response to size events
|
// internal response to size events
|
||||||
virtual void MacOnInternalSize() wxOVERRIDE { PositionBars(); }
|
virtual void MacOnInternalSize() wxOVERRIDE { PositionBars(); }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// common part of all ctors
|
|
||||||
void Init();
|
|
||||||
|
|
||||||
#if wxUSE_TOOLBAR
|
#if wxUSE_TOOLBAR
|
||||||
virtual void PositionToolBar() wxOVERRIDE;
|
virtual void PositionToolBar() wxOVERRIDE;
|
||||||
#endif
|
#endif
|
||||||
@@ -104,9 +95,6 @@ protected:
|
|||||||
virtual void AttachMenuBar(wxMenuBar *menubar) wxOVERRIDE;
|
virtual void AttachMenuBar(wxMenuBar *menubar) wxOVERRIDE;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// the last focused child: we restore focus to it on activation
|
|
||||||
wxWindow *m_winLastFocused;
|
|
||||||
|
|
||||||
virtual bool MacIsChildOfClientArea( const wxWindow* child ) const wxOVERRIDE;
|
virtual bool MacIsChildOfClientArea( const wxWindow* child ) const wxOVERRIDE;
|
||||||
|
|
||||||
wxDECLARE_EVENT_TABLE();
|
wxDECLARE_EVENT_TABLE();
|
||||||
|
@@ -36,11 +36,6 @@ wxEND_EVENT_TABLE()
|
|||||||
// creation/destruction
|
// creation/destruction
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
void wxFrame::Init()
|
|
||||||
{
|
|
||||||
m_winLastFocused = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool wxFrame::Create(wxWindow *parent,
|
bool wxFrame::Create(wxWindow *parent,
|
||||||
wxWindowID id,
|
wxWindowID id,
|
||||||
const wxString& title,
|
const wxString& title,
|
||||||
@@ -156,38 +151,10 @@ void wxFrame::OnActivate(wxActivateEvent& event)
|
|||||||
{
|
{
|
||||||
if ( !event.GetActive() )
|
if ( !event.GetActive() )
|
||||||
{
|
{
|
||||||
// remember the last focused child if it is our child
|
|
||||||
m_winLastFocused = FindFocus();
|
|
||||||
|
|
||||||
// so we NULL it out if it's a child from some other frame
|
|
||||||
wxWindow *win = m_winLastFocused;
|
|
||||||
while ( win )
|
|
||||||
{
|
|
||||||
if ( win->IsTopLevel() )
|
|
||||||
{
|
|
||||||
if ( win != this )
|
|
||||||
m_winLastFocused = NULL;
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
win = win->GetParent();
|
|
||||||
}
|
|
||||||
|
|
||||||
event.Skip();
|
event.Skip();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// restore focus to the child which was last focused
|
|
||||||
wxWindow *parent = m_winLastFocused
|
|
||||||
? m_winLastFocused->GetParent()
|
|
||||||
: NULL;
|
|
||||||
|
|
||||||
if (parent == NULL)
|
|
||||||
parent = this;
|
|
||||||
|
|
||||||
wxSetFocusToChild(parent, &m_winLastFocused);
|
|
||||||
|
|
||||||
#if wxUSE_MENUS
|
#if wxUSE_MENUS
|
||||||
if (m_frameMenuBar != NULL)
|
if (m_frameMenuBar != NULL)
|
||||||
{
|
{
|
||||||
|
@@ -239,20 +239,6 @@ wxWindowMac::~wxWindowMac()
|
|||||||
|
|
||||||
MacInvalidateBorders() ;
|
MacInvalidateBorders() ;
|
||||||
|
|
||||||
#ifndef __WXUNIVERSAL__
|
|
||||||
// VS: make sure there's no wxFrame with last focus set to us:
|
|
||||||
for ( wxWindow *win = GetParent(); win; win = win->GetParent() )
|
|
||||||
{
|
|
||||||
wxFrame *frame = wxDynamicCast(win, wxFrame);
|
|
||||||
if ( frame )
|
|
||||||
{
|
|
||||||
if ( frame->GetLastFocus() == this )
|
|
||||||
frame->SetLastFocus(NULL);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// destroy children before destroying this window itself
|
// destroy children before destroying this window itself
|
||||||
DestroyChildren();
|
DestroyChildren();
|
||||||
|
|
||||||
@@ -266,15 +252,6 @@ wxWindowMac::~wxWindowMac()
|
|||||||
tlw->SetDefaultItem(NULL);
|
tlw->SetDefaultItem(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef __WXUNIVERSAL__
|
|
||||||
wxFrame* frame = wxDynamicCast( wxGetTopLevelParent( (wxWindow*)this ) , wxFrame ) ;
|
|
||||||
if ( frame )
|
|
||||||
{
|
|
||||||
if ( frame->GetLastFocus() == this )
|
|
||||||
frame->SetLastFocus( NULL ) ;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// delete our drop target if we've got one
|
// delete our drop target if we've got one
|
||||||
#if wxUSE_DRAG_AND_DROP
|
#if wxUSE_DRAG_AND_DROP
|
||||||
wxDELETE(m_dropTarget);
|
wxDELETE(m_dropTarget);
|
||||||
|
Reference in New Issue
Block a user