Center task dialog-based wxProgressDialog on the parent window.
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
This commit is contained in:
@@ -449,6 +449,7 @@ MSW:
|
||||
- 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).
|
||||
|
||||
|
||||
|
||||
|
@@ -73,10 +73,12 @@ public:
|
||||
m_progressBarMarquee = false;
|
||||
m_skipped = false;
|
||||
m_notifications = 0;
|
||||
m_parent = NULL;
|
||||
}
|
||||
|
||||
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;
|
||||
@@ -632,6 +634,7 @@ bool wxProgressDialog::Show(bool show)
|
||||
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) )
|
||||
{
|
||||
@@ -821,6 +824,27 @@ wxProgressDialogTaskRunner::TaskDialogCallbackProc
|
||||
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) )
|
||||
|
Reference in New Issue
Block a user