Use a "hidden" dialog, not frame, in sync wxExecute() hack in wxMSW.
Replace a "hidden" (not really, but shown far off screen) frame with a dialog to avoid this frame appearing in the Alt+TAB list. Closes #13251. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@72667 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -172,12 +172,12 @@ void *wxGUIAppTraits::BeforeChildWaitLoop()
|
|||||||
focus/activation entirely when the child process terminates which would
|
focus/activation entirely when the child process terminates which would
|
||||||
happen if we simply disabled everything using wxWindowDisabler. Indeed,
|
happen if we simply disabled everything using wxWindowDisabler. Indeed,
|
||||||
remember that Windows will never activate a disabled window and when the
|
remember that Windows will never activate a disabled window and when the
|
||||||
last childs window is closed and Windows looks for a window to activate
|
last child's window is closed and Windows looks for a window to activate
|
||||||
all our windows are still disabled. There is no way to enable them in
|
all our windows are still disabled. There is no way to enable them in
|
||||||
time because we don't know when the childs windows are going to be
|
time because we don't know when the child's windows are going to be
|
||||||
closed, so the solution we use here is to keep one special tiny frame
|
closed, so the solution we use here is to keep one special tiny dialog
|
||||||
enabled all the time. Then when the child terminates it will get
|
enabled all the time. Then when the child terminates it will get
|
||||||
activated and when we close it below -- after reenabling all the other
|
activated and when we close it below -- after re-enabling all the other
|
||||||
windows! -- the previously active window becomes activated again and
|
windows! -- the previously active window becomes activated again and
|
||||||
everything is ok.
|
everything is ok.
|
||||||
*/
|
*/
|
||||||
@@ -186,16 +186,16 @@ void *wxGUIAppTraits::BeforeChildWaitLoop()
|
|||||||
// first disable all existing windows
|
// first disable all existing windows
|
||||||
wxWindowDisabler *wd = new wxWindowDisabler;
|
wxWindowDisabler *wd = new wxWindowDisabler;
|
||||||
|
|
||||||
// then create an "invisible" frame: it has minimal size, is positioned
|
// then create an "invisible" dialog: it has minimal size, is positioned
|
||||||
// (hopefully) outside the screen and doesn't appear on the taskbar
|
// (hopefully) outside the screen and doesn't appear in the Alt-TAB list
|
||||||
wxWindow *winActive = new wxFrame
|
// (unlike the frames, which is why we use a dialog here)
|
||||||
|
wxWindow *winActive = new wxDialog
|
||||||
(
|
(
|
||||||
wxTheApp->GetTopWindow(),
|
wxTheApp->GetTopWindow(),
|
||||||
wxID_ANY,
|
wxID_ANY,
|
||||||
wxEmptyString,
|
wxEmptyString,
|
||||||
wxPoint(32600, 32600),
|
wxPoint(32600, 32600),
|
||||||
wxSize(1, 1),
|
wxSize(1, 1)
|
||||||
wxDEFAULT_FRAME_STYLE | wxFRAME_NO_TASKBAR
|
|
||||||
);
|
);
|
||||||
winActive->Show();
|
winActive->Show();
|
||||||
|
|
||||||
@@ -210,9 +210,9 @@ void wxGUIAppTraits::AfterChildWaitLoop(void *dataOrig)
|
|||||||
|
|
||||||
delete data->wd;
|
delete data->wd;
|
||||||
|
|
||||||
// finally delete the dummy frame and, as wd has been already destroyed and
|
// finally delete the dummy dialog and, as wd has been already destroyed
|
||||||
// the other windows reenabled, the activation is going to return to the
|
// and the other windows reenabled, the activation is going to return to
|
||||||
// window which had had it before
|
// the window which had had it before
|
||||||
data->winActive->Destroy();
|
data->winActive->Destroy();
|
||||||
|
|
||||||
// also delete the temporary data object itself
|
// also delete the temporary data object itself
|
||||||
|
Reference in New Issue
Block a user