diff --git a/doc/contributions.txt b/doc/contributions.txt index 3d13582531..2c5a6953c2 100755 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -203,6 +203,8 @@ Ansariel Hiller MAINT-6612 MAINT-6637 MAINT-6636 + MAINT-6744 + MAINT-6752 Aralara Rajal Arare Chantilly CHUIBUG-191 diff --git a/indra/cmake/00-Common.cmake b/indra/cmake/00-Common.cmake index 8a386ce866..403794b909 100644 --- a/indra/cmake/00-Common.cmake +++ b/indra/cmake/00-Common.cmake @@ -147,7 +147,7 @@ if (WINDOWS) add_definitions(/WX) endif (NOT VS_DISABLE_FATAL_WARNINGS) - # configure win32 API for Windows Vista+ compatibility + # configure Win32 API for Windows Vista+ compatibility set(WINVER "0x0600" CACHE STRING "Win32 API Target version (see http://msdn.microsoft.com/en-us/library/aa383745%28v=VS.85%29.aspx)") add_definitions("/DWINVER=${WINVER}" "/D_WIN32_WINNT=${WINVER}") diff --git a/indra/llcharacter/llkeyframemotion.cpp b/indra/llcharacter/llkeyframemotion.cpp index 4683c06ce8..868e8dd706 100644 --- a/indra/llcharacter/llkeyframemotion.cpp +++ b/indra/llcharacter/llkeyframemotion.cpp @@ -2207,15 +2207,7 @@ void LLKeyframeMotion::onLoadComplete(LLVFS *vfs, LLCharacter* character = *char_iter; // look for an existing instance of this motion - - // FIRE-14972/FIRE-14589 there can be more than just LLKeyframeMotion instances, in which way the c-cast will create - // a pointer to an invalid object. That quickly causes memory corruption. - - // LLKeyframeMotion* motionp = (LLKeyframeMotion*) character->findMotion(asset_uuid); - LLKeyframeMotion* motionp = dynamic_cast< LLKeyframeMotion* >( character->findMotion(asset_uuid) ); - - // - + LLKeyframeMotion* motionp = dynamic_cast (character->findMotion(asset_uuid)); if (motionp) { if (0 == status) diff --git a/indra/llwindow/llwindowwin32.cpp b/indra/llwindow/llwindowwin32.cpp index 08272345ee..8ef742262a 100644 --- a/indra/llwindow/llwindowwin32.cpp +++ b/indra/llwindow/llwindowwin32.cpp @@ -60,27 +60,13 @@ #include #include -// culled from winuser.h -#ifndef WM_MOUSEWHEEL /* Added to be compatible with later SDK's */ -const S32 WM_MOUSEWHEEL = 0x020A; -#endif -#ifndef WHEEL_DELTA /* Added to be compatible with later SDK's */ -const S32 WHEEL_DELTA = 120; /* Value for rolling one detent */ -#endif const S32 MAX_MESSAGE_PER_UPDATE = 20; const S32 BITS_PER_PIXEL = 32; const S32 MAX_NUM_RESOLUTIONS = 32; const F32 ICON_FLASH_TIME = 0.5f; -// Use default screen DPI defined in WinUser.h -//const F32 DEFAULT_DPI = 96.0f; -const F32 DEFAULT_DPI = F32(USER_DEFAULT_SCREEN_DPI); -// -#ifndef WM_DPICHANGED -// Define as per WinUser.h -//const S32 WM_DPICHANGED = 0x02E0; +#ifndef WM_DPICHANGED #define WM_DPICHANGED 0x02E0 -// #endif extern BOOL gDebugWindowProc; @@ -2658,10 +2644,7 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_ case WM_DPICHANGED: { LPRECT lprc_new_scale; - // Use constant - //F32 new_scale = LOWORD(w_param) / 96.0f; - F32 new_scale = LOWORD(w_param) / DEFAULT_DPI; - // + F32 new_scale = LOWORD(w_param) / USER_DEFAULT_SCREEN_DPI; lprc_new_scale = (LPRECT)l_param; S32 new_width = lprc_new_scale->right - lprc_new_scale->left; S32 new_height = lprc_new_scale->bottom - lprc_new_scale->top; @@ -4077,7 +4060,7 @@ F32 LLWindowWin32::getSystemUISize() hr = pGDFM(hMonitor, MDT_EFFECTIVE_DPI, &dpix, &dpiy); if (hr == S_OK) { - scale_value = dpix / DEFAULT_DPI; + scale_value = dpix / USER_DEFAULT_SCREEN_DPI; } else { @@ -4096,7 +4079,7 @@ F32 LLWindowWin32::getSystemUISize() else { LL_WARNS() << "Could not load shcore.dll library (included by from Win 8.1 SDK). Using legacy DPI awareness API of Win XP/7" << LL_ENDL; - scale_value = GetDeviceCaps(hdc, LOGPIXELSX) / DEFAULT_DPI; + scale_value = GetDeviceCaps(hdc, LOGPIXELSX) / USER_DEFAULT_SCREEN_DPI; } ReleaseDC(hWnd, hdc); diff --git a/indra/newview/llgrouplist.cpp b/indra/newview/llgrouplist.cpp index 8be5f711f4..f9abb0ae7e 100644 --- a/indra/newview/llgrouplist.cpp +++ b/indra/newview/llgrouplist.cpp @@ -475,10 +475,7 @@ void LLGroupListItem::setGroupID(const LLUUID& group_id) void LLGroupListItem::setGroupIconID(const LLUUID& group_icon_id) { - if (group_icon_id.notNull()) - { - mGroupIcon->setIconId(group_icon_id); - } + mGroupIcon->setIconId(group_icon_id); } void LLGroupListItem::setGroupIconVisible(bool visible) diff --git a/indra/newview/llinspectgroup.cpp b/indra/newview/llinspectgroup.cpp index 0c5a91e48a..a4fce36783 100644 --- a/indra/newview/llinspectgroup.cpp +++ b/indra/newview/llinspectgroup.cpp @@ -41,6 +41,7 @@ #include "lltooltip.h" // positionViewNearMouse() #include "lltrans.h" #include "lluictrl.h" +#include "llgroupiconctrl.h" ////////////////////////////////////////////////////////////////////////////// // LLInspectGroup @@ -233,8 +234,7 @@ void LLInspectGroup::processGroupData() getChild("group_details")->setValue( LLSD(data->mCharter) ); - // LLGroupIconCtrl - getChild("group_icon")->setValue(LLSD(mGroupID)); + getChild("group_icon")->setIconId(data->mInsigniaID); std::string cost; bool is_member = LLGroupActions::isInGroup(mGroupID); diff --git a/indra/newview/llnotificationofferhandler.cpp b/indra/newview/llnotificationofferhandler.cpp index c3ae9c4c39..a0e764fc37 100644 --- a/indra/newview/llnotificationofferhandler.cpp +++ b/indra/newview/llnotificationofferhandler.cpp @@ -99,27 +99,30 @@ bool LLOfferHandler::processNotification(const LLNotificationPtr& notification) LLUUID from_id = notification->getPayload()["from_id"]; - //Will not play a notification sound for inventory and teleport offer based upon chat preference - // Notification sounds - //bool playSound = (!notification->isDND() - // && ((notification->getName() == "UserGiveItem" - // && gSavedSettings.getBOOL("PlaySoundInventoryOffer")) - // || (notification->getName() == "TeleportOffered" - // && gSavedSettings.getBOOL("PlaySoundTeleportOffer")))); - const std::string notif_name = notification->getName(); - bool playSound = (!notification->isDND() - && ((notif_name == "UserGiveItem" + if (!notification->isDND()) + { + //Will not play a notification sound for inventory and teleport offer based upon chat preference + // Notification sounds + //bool playSound = (notification->getName() == "UserGiveItem" + // && gSavedSettings.getBOOL("PlaySoundInventoryOffer")) + // || ((notification->getName() == "TeleportOffered" + // || notification->getName() == "TeleportOffered_MaturityExceeded" + // || notification->getName() == "TeleportOffered_MaturityBlocked") + // && gSavedSettings.getBOOL("PlaySoundTeleportOffer")); + const std::string notif_name = notification->getName(); + bool playSound = (notif_name == "UserGiveItem" && gSavedSettings.getBOOL("PlayModeUISndInventoryOffer")) || ((notif_name == "TeleportOffered" || notif_name == "TeleportOffered_SLUrl" || notif_name == "TeleportOffered_MaturityExceeded" || notif_name == "TeleportOffered_MaturityExceeded_SLUrl" || notif_name == "TeleportOffered_MaturityBlocked" || notif_name == "TeleportOffered_MaturityBlocked_SLUrl") - && gSavedSettings.getBOOL("PlayModeUISndTeleportOffer")))); - // + && gSavedSettings.getBOOL("PlayModeUISndTeleportOffer")); + // - if(playSound) - { - notification->playSound(); - } + if (playSound) + { + notification->playSound(); + } + } // [RLVa:KB] - Checked: 2013-05-09 (RLVa-1.4.9) // Don't spawn an IM session for non-chat related events diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index 60e2c0da66..556a21f422 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -272,6 +272,12 @@ static const U8 NO_FACE = 255; BOOL gQuietSnapshot = FALSE; const F32 MIN_AFK_TIME = 6.f; // minimum time after setting away state before coming back + +// Minimum value for UIScaleFactor, also defined in preferences, ui_scale_slider +static const F32 MIN_UI_SCALE = 0.75f; +// 2.0 in preferences, but win10 supports larger scaling and value is used more as +// sanity check, so leaving space for larger values from DPI updates. +static const F32 MAX_UI_SCALE = 7.0f; static const F32 MIN_DISPLAY_SCALE = 0.75f; std::string LLViewerWindow::sSnapshotBaseName; @@ -1666,9 +1672,16 @@ BOOL LLViewerWindow::handleDeviceChange(LLWindow *window) void LLViewerWindow::handleDPIChanged(LLWindow *window, F32 ui_scale_factor, S32 window_width, S32 window_height) { - gSavedSettings.setF32("UIScaleFactor", ui_scale_factor); - LLViewerWindow::reshape(window_width, window_height); - mResDirty = true; + if (ui_scale_factor >= MIN_UI_SCALE && ui_scale_factor <= MAX_UI_SCALE) + { + gSavedSettings.setF32("UIScaleFactor", ui_scale_factor); + LLViewerWindow::reshape(window_width, window_height); + mResDirty = true; + } + else + { + LL_WARNS() << "DPI change caused UI scale to go out of bounds: " << ui_scale_factor << LL_ENDL; + } } void LLViewerWindow::handlePingWatchdog(LLWindow *window, const char * msg) @@ -1829,12 +1842,14 @@ LLViewerWindow::LLViewerWindow(const Params& p) F32 system_scale_factor = mWindow->getSystemUISize(); + if (system_scale_factor < MIN_UI_SCALE || system_scale_factor > MAX_UI_SCALE) + { + // reset to default; + system_scale_factor = 1.f; + } if (p.first_run || gSavedSettings.getF32("LastSystemUIScaleFactor") != system_scale_factor) { - // BUG-40548: Don't bug user with DPI scaling changed on first run after clean install - //mSystemUIScaleFactorChanged = true; mSystemUIScaleFactorChanged = !p.first_run; - // gSavedSettings.setF32("LastSystemUIScaleFactor", system_scale_factor); gSavedSettings.setF32("UIScaleFactor", system_scale_factor); } @@ -1842,7 +1857,7 @@ LLViewerWindow::LLViewerWindow(const Params& p) // Get the real window rect the window was created with (since there are various OS-dependent reasons why // the size of a window or fullscreen context may have been adjusted slightly...) - F32 ui_scale_factor = gSavedSettings.getF32("UIScaleFactor"); + F32 ui_scale_factor = llclamp(gSavedSettings.getF32("UIScaleFactor"), MIN_UI_SCALE, MAX_UI_SCALE); mDisplayScale.setVec(llmax(1.f / mWindow->getPixelAspectRatio(), 1.f), llmax(mWindow->getPixelAspectRatio(), 1.f)); mDisplayScale *= ui_scale_factor; @@ -5915,7 +5930,7 @@ F32 LLViewerWindow::getWorldViewAspectRatio() const void LLViewerWindow::calcDisplayScale() { - F32 ui_scale_factor = gSavedSettings.getF32("UIScaleFactor"); + F32 ui_scale_factor = llclamp(gSavedSettings.getF32("UIScaleFactor"), MIN_UI_SCALE, MAX_UI_SCALE); LLVector2 display_scale; display_scale.setVec(llmax(1.f / mWindow->getPixelAspectRatio(), 1.f), llmax(mWindow->getPixelAspectRatio(), 1.f)); display_scale *= ui_scale_factor; @@ -5928,7 +5943,7 @@ void LLViewerWindow::calcDisplayScale() if (display_scale != mDisplayScale) { - LL_INFOS() << "Setting display scale to " << display_scale << LL_ENDL; + LL_INFOS() << "Setting display scale to " << display_scale << " for ui scale: " << ui_scale_factor << LL_ENDL; mDisplayScale = display_scale; // Init default fonts