- fixed redraw problems in dynamically resized wxStaticText
- improvements to wxWindows applications behaviour when the system colours
are changed
+- choose implicit parent for the dialog boxes better
- fixed wxProgressDialog for ranges > 65535
- wxSpinButton and wxSpinCtrl now support full 32 bit range (if the version
of comctl32.dll installed on the system supports it)
#endif // wxUSE_CTL3D
protected:
+ // find the window to use as parent for this dialog if none has been
+ // specified explicitly by the user
+ //
+ // may return NULL
+ wxWindow *FindSuitableParent() const;
+
// show modal dialog and enter modal loop
void DoShowModal();
return wxModalDialogs.Find((wxDialog *)this) != NULL; // const_cast
}
+wxWindow *wxDialog::FindSuitableParent() const
+{
+ // first try to use the currently active window
+ HWND hwndFg = ::GetForegroundWindow();
+ wxWindow *parent = hwndFg ? wxFindWinFromHandle((WXHWND)hwndFg)
+ : NULL;
+ if ( !parent )
+ {
+ // next try the main app window
+ parent = wxTheApp->GetTopWindow();
+ }
+
+ // finally, check if the parent we found is really suitable
+ if ( !parent || parent == (wxWindow *)this || !parent->IsShown() )
+ {
+ // don't use this one
+ parent = NULL;
+ }
+
+ return parent;
+}
+
void wxDialog::DoShowModal()
{
wxCHECK_RET( !IsModalShowing(), _T("DoShowModal() called twice") );
// modal dialog needs a parent window, so try to find one
if ( !GetParent() )
{
- wxWindow *parent = wxTheApp->GetTopWindow();
- if ( parent && parent != this && parent->IsShown() )
- {
- // use it
- m_parent = parent;
- }
+ m_parent = FindSuitableParent();
}
DoShowModal();
int wxMessageDialog::ShowModal()
{
- wxWindow *winTop = wxTheApp->GetTopWindow();
- if ( !winTop )
+ if ( !wxTheApp->GetTopWindow() )
{
// when the message box is shown from wxApp::OnInit() (i.e. before the
// message loop is entered), this must be done or the next message box
}
// use the top level window as parent if none specified
- HWND hWnd = 0;
- if ( m_parent )
- hWnd = GetHwndOf(m_parent);
- else if ( winTop )
- hWnd = GetHwndOf(winTop);
+ if ( !m_parent )
+ m_parent = FindSuitableParent();
+ HWND hWnd = m_parent ? GetHwndOf(m_parent) : NULL;
// translate wx style in MSW
unsigned int msStyle = MB_OK;