wxProgressDialog was created without the parent when using task dialogs so it
was centred on screen and not on its parent as usual. Fix this by explicitly
positioning it so that it's centered over the parent.
Closes #12699.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@66244
c3d73ce0-8a6f-49c7-b76d-
6d57e0e08775
- Fix Cygwin 1.7 build (David Gangola).
- Allow using wxDC::DrawText() with multiline texts.
- Fix wxBitmapButton best size determination broken in 2.9.1.
- Fix Cygwin 1.7 build (David Gangola).
- Allow using wxDC::DrawText() with multiline texts.
- Fix wxBitmapButton best size determination broken in 2.9.1.
+- Center task dialog-based wxProgressDialog on the parent (John Roberts).
m_progressBarMarquee = false;
m_skipped = false;
m_notifications = 0;
m_progressBarMarquee = false;
m_skipped = false;
m_notifications = 0;
}
wxCriticalSection m_cs;
}
wxCriticalSection m_cs;
+ wxWindow *m_parent; // Parent window only used to center us over it.
HWND m_hwnd; // Task dialog handler
long m_style; // wxProgressDialog style
int m_value;
HWND m_hwnd; // Task dialog handler
long m_style; // wxProgressDialog style
int m_value;
m_sharedData->m_range = m_maximum;
m_sharedData->m_state = Uncancelable;
m_sharedData->m_style = GetPDStyle();
m_sharedData->m_range = m_maximum;
m_sharedData->m_state = Uncancelable;
m_sharedData->m_style = GetPDStyle();
+ m_sharedData->m_parent = GetTopParent();
if ( HasPDFlag(wxPD_CAN_ABORT) )
{
if ( HasPDFlag(wxPD_CAN_ABORT) )
{
0,
MAKELPARAM(0, sharedData->m_range) );
0,
MAKELPARAM(0, sharedData->m_range) );
+ // We always create this task dialog with NULL parent because our
+ // parent in wx sense is a window created from a different thread
+ // and so can't be used as our real parent. However we still center
+ // this window on the parent one as the task dialogs do with their
+ // real parent usually.
+ if ( sharedData->m_parent )
+ {
+ wxRect rect(wxRectFromRECT(wxGetWindowRect(hwnd)));
+ rect = rect.CentreIn(sharedData->m_parent->GetRect());
+ ::SetWindowPos(hwnd,
+ NULL,
+ rect.x,
+ rect.y,
+ -1,
+ -1,
+ SWP_NOACTIVATE |
+ SWP_NOOWNERZORDER |
+ SWP_NOSIZE |
+ SWP_NOZORDER);
+ }
+
// If we can't be aborted, the "Close" button will only be enabled
// when the progress ends (and not even then with wxPD_AUTO_HIDE).
if ( !(sharedData->m_style & wxPD_CAN_ABORT) )
// If we can't be aborted, the "Close" button will only be enabled
// when the progress ends (and not even then with wxPD_AUTO_HIDE).
if ( !(sharedData->m_style & wxPD_CAN_ABORT) )