X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/cd6ce4a90c11b54cc00799d0e4611d858739a749..aa5e1f75d9cc30fccc4c5e306c584aa2db5f2c40:/src/common/utilscmn.cpp diff --git a/src/common/utilscmn.cpp b/src/common/utilscmn.cpp index 3f62793a9e..7a971cb5ac 100644 --- a/src/common/utilscmn.cpp +++ b/src/common/utilscmn.cpp @@ -78,7 +78,7 @@ #endif #ifdef __WXMSW__ - #include "windows.h" + #include "wx/msw/private.h" #endif // ---------------------------------------------------------------------------- @@ -983,6 +983,17 @@ wxWindowDisabler::wxWindowDisabler(wxWindow *winToSkip) // remember all windows we're going to (temporarily) disable m_winDisabled = new wxWindowList; +#ifdef __WXMSW__ +#ifdef __WIN32__ + // and the top level window too + HWND hwndFG = ::GetForegroundWindow(); + m_winTop = hwndFG ? wxFindWinFromHandle((WXHWND)hwndFG) : (wxWindow *)NULL; +#else + HWND hwndFG = ::GetTopWindow(); + m_winTop = hwndFG ? wxFindWinFromHandle((WXHWND)hwndFG) : (wxWindow *)NULL; +#endif +#endif // MSW + wxWindowList::Node *node; for ( node = wxTopLevelWindows.GetFirst(); node; node = node->GetNext() ) { @@ -1013,6 +1024,29 @@ wxWindowDisabler::~wxWindowDisabler() } delete m_winDisabled; + +#ifdef __WXMSW__ +#ifdef __WIN32__ + if ( m_winTop ) + { + if ( !::SetForegroundWindow(GetHwndOf(m_winTop)) ) + { + wxLogLastError("SetForegroundWindow"); + } + } +#else + if ( m_winTop ) + { + // 16-bit SetForegroundWindow() replacement + RECT reWin; + GetWindowRect(m_winTop, &reWin); + SetWindowPos (m_winTop, HWND_TOP, + reWin.left, reWin.top, + reWin.right - reWin.left, reWin.bottom, + SWP_SHOWWINDOW); + } +#endif +#endif // MSW } // Yield to other apps/messages and disable user input to all windows except @@ -1188,7 +1222,7 @@ long wxExecute(const wxString& command, wxArrayString& output) { wxInputStream& is = *process->GetInputStream(); wxTextInputStream tis(is); - while ( !is.Eof() ) + while ( !is.Eof() && is.IsOk() ) { wxString line = tis.ReadLine(); if ( is.LastError() )