X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/cbc66a27047635e86fbba08043da831666d74f4a..c2c436609de95b0c35943f50aa333a2722d04d26:/src/common/utilscmn.cpp diff --git a/src/common/utilscmn.cpp b/src/common/utilscmn.cpp index 13270f231b..0eb8453bd6 100644 --- a/src/common/utilscmn.cpp +++ b/src/common/utilscmn.cpp @@ -48,8 +48,10 @@ #endif // wxUSE_GUI #endif // WX_PRECOMP +#ifndef __WIN16__ #include "wx/process.h" #include "wx/txtstrm.h" +#endif #include #include @@ -962,53 +964,42 @@ void wxEnableTopLevelWindows(bool enable) node->GetData()->Enable(enable); } -static void wxFindDisabledWindows(wxWindowList& winDisabled, - wxWindow *win, - wxWindow *winToSkip) -{ - wxWindowList::Node *node; - for ( node = win->GetChildren().GetFirst(); node; node = node->GetNext() ) - { - wxWindow *child = node->GetData(); - if ( child == winToSkip ) - continue; - - wxFindDisabledWindows(winDisabled, child, winToSkip); - - if ( child->IsEnabled() ) - { - winDisabled.Append(child); - child->Disable(); - } - } -} - 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(); + HWND hwndFG = ::GetTopWindow(0); m_winTop = hwndFG ? wxFindWinFromHandle((WXHWND)hwndFG) : (wxWindow *)NULL; #endif #endif // MSW + // remember the top level windows which were already disabled, so that we + // don't reenable them later + m_winDisabled = NULL; + wxWindowList::Node *node; for ( node = wxTopLevelWindows.GetFirst(); node; node = node->GetNext() ) { wxWindow *winTop = node->GetData(); - if ( winTop != winToSkip && winTop->IsEnabled() ) + if ( winTop == winToSkip ) + continue; + + if ( winTop->IsEnabled() ) { - wxFindDisabledWindows(*m_winDisabled, winTop, winToSkip); + winTop->Disable(); + } + else + { + if ( !m_winDisabled ) + { + m_winDisabled = new wxWindowList; + } m_winDisabled->Append(winTop); - winTop->Disable(); } } } @@ -1016,9 +1007,14 @@ wxWindowDisabler::wxWindowDisabler(wxWindow *winToSkip) wxWindowDisabler::~wxWindowDisabler() { wxWindowList::Node *node; - for ( node = m_winDisabled->GetFirst(); node; node = node->GetNext() ) + for ( node = wxTopLevelWindows.GetFirst(); node; node = node->GetNext() ) { - node->GetData()->Enable(); + wxWindow *winTop = node->GetData(); + if ( !m_winDisabled || !m_winDisabled->Find(winTop) ) + { + winTop->Enable(); + } + //else: had been already disabled, don't reenable } delete m_winDisabled; @@ -1037,8 +1033,8 @@ wxWindowDisabler::~wxWindowDisabler() { // 16-bit SetForegroundWindow() replacement RECT reWin; - GetWindowRect(m_winTop, &reWin); - SetWindowPos (m_winTop, HWND_TOP, + GetWindowRect((HWND) m_winTop, &reWin); + SetWindowPos ((HWND) m_winTop, HWND_TOP, reWin.left, reWin.top, reWin.right - reWin.left, reWin.bottom, SWP_SHOWWINDOW); @@ -1051,7 +1047,7 @@ wxWindowDisabler::~wxWindowDisabler() // the given one bool wxSafeYield(wxWindow *win) { - wxWindowDisabler wd; + wxWindowDisabler wd(win); bool rc = wxYield(); @@ -1095,14 +1091,13 @@ wxString wxGetEmailAddress() { wxString email; - wxString host = wxGetHostName(); + wxString host = wxGetFullHostName(); if ( !!host ) { wxString user = wxGetUserId(); if ( !!user ) { - wxString email(user); - email << wxT('@') << host; + email << user << wxT('@') << host; } } @@ -1215,6 +1210,10 @@ wxString wxGetCurrentDir() long wxExecute(const wxString& command, wxArrayString& output) { +#ifdef __WIN16__ + wxFAIL_MSG("Sorry, this version of wxExecute not implemented on WIN16."); + return 0; +#else // create a wxProcess which will capture the output wxProcess *process = new wxProcess; process->Redirect(); @@ -1235,4 +1234,5 @@ long wxExecute(const wxString& command, wxArrayString& output) } return rc; +#endif }