#ifdef __WXMICROWIN__
-static inline bool IsIconic(HWND WXUNUSED(hwnd)) { return FALSE; }
+// static inline bool IsIconic(HWND WXUNUSED(hwnd)) { return FALSE; }
static inline bool IsZoomed(HWND WXUNUSED(hwnd)) { return FALSE; }
#endif // __WXMICROWIN__
{
parent = wxTheApp->GetTopWindow();
- // but don't use the window which is currently hidden as then the
- // dialog would be hidden as well
- if ( parent && !parent->IsShown() )
+ if ( parent )
{
- parent = NULL;
+ // don't use transient windows as parents, this is dangerous as it
+ // can lead to a crash if the parent is destroyed before the child
+ //
+ // also don't use the window which is currently hidden as then the
+ // dialog would be hidden as well
+ if ( (parent->GetExtraStyle() & wxWS_EX_TRANSIENT) ||
+ !parent->IsShown() )
+ {
+ parent = NULL;
+ }
}
}
}
// ----------------------------------------------------------------------------
-// wxTopLevelWindowMSW geometry
+// wxTopLevelWindowMSW client size
// ----------------------------------------------------------------------------
void wxTopLevelWindowMSW::DoSetClientSize(int width, int height)
{
- HWND hWnd = GetHwnd();
-
- RECT rectClient;
- ::GetClientRect(hWnd, &rectClient);
+ // call GetClientAreaOrigin() to take the toolbar into account
+ wxPoint pt = GetClientAreaOrigin();
+ width += pt.x;
+ height += pt.y;
- RECT rectTotal;
- ::GetWindowRect(hWnd, &rectTotal);
+ wxWindow::DoSetClientSize(width, height);
+}
- // Find the difference between the entire window (title bar and all)
- // and the client area; add this to the new client size to move the
- // window
- width += rectTotal.right - rectTotal.left - rectClient.right;
- height += rectTotal.bottom - rectTotal.top - rectClient.bottom;
+void wxTopLevelWindowMSW::DoGetClientSize(int *x, int *y) const
+{
+ wxWindow::DoGetClientSize(x, y);
- // note that calling GetClientAreaOrigin() takes the toolbar into account
wxPoint pt = GetClientAreaOrigin();
- width += pt.x;
- height += pt.y;
- if ( !::MoveWindow(hWnd, rectTotal.left, rectTotal.top,
- width, height, TRUE /* redraw */) )
- {
- wxLogLastError(_T("MoveWindow"));
- }
+ if ( x )
+ *x -= pt.x;
- wxSizeEvent event(wxSize(width, height), m_windowId);
- event.SetEventObject(this);
- (void)GetEventHandler()->ProcessEvent(event);
+ if ( y )
+ *y -= pt.y;
}
// ----------------------------------------------------------------------------