diff options
| author | Runitai Linden <davep@lindenlab.com> | 2021-12-09 16:44:44 -0600 | 
|---|---|---|
| committer | Runitai Linden <davep@lindenlab.com> | 2021-12-09 16:44:44 -0600 | 
| commit | 7683477547131c8cb371e1357b3d25ca07b2feb4 (patch) | |
| tree | ff1a39c889c7cd307016d4e4d8eecf99142e70fe | |
| parent | f475644bb1b49f0706bb34c59f4931f83bc11e81 (diff) | |
SL-16480 Followup -- fix for unintialized mRect/mClientRect and bad getClientRectInScreenSpace
| -rw-r--r-- | indra/llwindow/llwindowwin32.cpp | 37 | 
1 files changed, 28 insertions, 9 deletions
diff --git a/indra/llwindow/llwindowwin32.cpp b/indra/llwindow/llwindowwin32.cpp index 4deebea7e8..86eca6872e 100644 --- a/indra/llwindow/llwindowwin32.cpp +++ b/indra/llwindow/llwindowwin32.cpp @@ -1654,7 +1654,8 @@ void LLWindowWin32::recreateWindow(RECT window_rect, DWORD dw_ex_style, DWORD dw      std::promise<std::pair<HWND, HDC>> promise;      // What follows must be done on the window thread.      auto window_work = -        [self=mWindowThread, +        [this, +         self=mWindowThread,           oldHandle,           // bind CreateWindowEx() parameters by value instead of           // back-referencing LLWindowWin32 members @@ -1704,7 +1705,9 @@ void LLWindowWin32::recreateWindow(RECT window_rect, DWORD dw_ex_style, DWORD dw                  self->mWindowHandle = handle;                  self->mhDC = GetDC(handle);              } -                 +             +            updateWindowRect(); +              // It's important to wake up the future either way.              promise.set_value(std::make_pair(self->mWindowHandle, self->mhDC));              LL_DEBUGS("Window") << "recreateWindow(): window_work done" << LL_ENDL; @@ -3280,15 +3283,31 @@ void LLWindowWin32::setMouseClipping( BOOL b )  BOOL LLWindowWin32::getClientRectInScreenSpace( RECT* rectp )  { -    S32 offsetx = mRect.left - mClientRect.left; -    S32 offsety = mRect.top - mClientRect.top; +    BOOL success = FALSE; -    rectp->left += offsetx; -    rectp->right += offsetx; -    rectp->bottom += offsety; -    rectp->bottom += offsety; +    RECT client_rect; +    if (mWindowHandle && GetClientRect(mWindowHandle, &client_rect)) +    { +        POINT top_left; +        top_left.x = client_rect.left; +        top_left.y = client_rect.top; +        ClientToScreen(mWindowHandle, &top_left); + +        POINT bottom_right; +        bottom_right.x = client_rect.right; +        bottom_right.y = client_rect.bottom; +        ClientToScreen(mWindowHandle, &bottom_right); + +        SetRect(rectp, +            top_left.x, +            top_left.y, +            bottom_right.x, +            bottom_right.y); + +        success = TRUE; +    } -    return TRUE; +    return success;  }  void LLWindowWin32::flashIcon(F32 seconds)  | 
