X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/91dd52fe3ba8275366cf26a729f00a6a59d34855..655076c7b07c69ea8373098859d9b14adfc8e0a4:/src/msw/frame.cpp?ds=sidebyside diff --git a/src/msw/frame.cpp b/src/msw/frame.cpp index 10ecf1553a..6723824373 100644 --- a/src/msw/frame.cpp +++ b/src/msw/frame.cpp @@ -357,6 +357,27 @@ void wxFrame::SetIcon(const wxIcon& icon) #endif // __WIN95__ } +// generate an artificial resize event +void wxFrame::SendSizeEvent() +{ + RECT r; +#ifdef __WIN16__ + ::GetWindowRect(GetHwnd(), &r); +#else + if ( !::GetWindowRect(GetHwnd(), &r) ) + { + wxLogLastError(_T("GetWindowRect")); + } +#endif + + if ( !m_iconized ) + { + (void)::PostMessage(GetHwnd(), WM_SIZE, + IsMaximized() ? SIZE_MAXIMIZED : SIZE_RESTORED, + MAKELPARAM(r.right - r.left, r.bottom - r.top)); + } +} + #if wxUSE_STATUSBAR wxStatusBar *wxFrame::OnCreateStatusBar(int number, long style, @@ -669,7 +690,8 @@ bool wxFrame::MSWCreate(int id, wxWindow *parent, const wxChar *wclass, wxWindow // wxFRAME_TOOL_WINDOW or wxFRAME_NO_TASKBAR is given - without giving them // WS_EX_APPWINDOW style, the child (i.e. owned) frames wouldn't appear in it #if !defined(__WIN16__) && !defined(__SC__) - if ( style & wxFRAME_TOOL_WINDOW ) + if ( (style & wxFRAME_TOOL_WINDOW) || + (style & wxFRAME_NO_TASKBAR) ) extendedStyle |= WS_EX_TOOLWINDOW; else if ( !(style & wxFRAME_NO_TASKBAR) ) extendedStyle |= WS_EX_APPWINDOW; @@ -705,18 +727,35 @@ void wxFrame::OnActivate(wxActivateEvent& event) // restore focus to the child which was last focused wxLogTrace(_T("focus"), _T("wxFrame %08x activated."), m_hWnd); - wxSetFocusToChild(this, &m_winLastFocused); + wxWindow *parent = m_winLastFocused ? m_winLastFocused->GetParent() + : NULL; + if ( !parent ) + { + parent = this; + } + + wxSetFocusToChild(parent, &m_winLastFocused); } - else + else // deactivating { - // remember the last focused child + // remember the last focused child if it is our child m_winLastFocused = FindFocus(); - while ( m_winLastFocused ) + + // so we NULL it out if it's a child from some other frame + wxWindow *win = m_winLastFocused; + while ( win ) { - if ( GetChildren().Find(m_winLastFocused) ) + if ( win->IsTopLevel() ) + { + if ( win != this ) + { + m_winLastFocused = NULL; + } + break; + } - m_winLastFocused = m_winLastFocused->GetParent(); + win = win->GetParent(); } wxLogTrace(_T("focus"),