Merge branch 'DRTVWR-553-maint-mix-JK' of https://bitbucket.org/lindenlab/viewer

master
Ansariel 2022-02-02 10:37:33 +01:00
commit 828fbdc571
33 changed files with 134 additions and 124 deletions

View File

@ -1275,8 +1275,6 @@ Robin Cornelius
VWR-12763
VWR-12995
VWR-20911
Rohacan Hirons
SL-14717
Rosco Teardrop
Rose Evans
Rudee Voom

View File

@ -11134,7 +11134,7 @@ Change of this parameter will affect the layout of buttons in notification toast
<key>PushToTalkToggle</key>
<map>
<key>Comment</key>
<string>Should the push-to-talk button behave as a toggle</string>
<string>Should the push-to-talk toolbar button behave as a toggle</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>

View File

@ -5,12 +5,12 @@ if [[ $SKIP_NOTARIZATION == "true" ]]; then
fi
CONFIG_FILE="$build_secrets_checkout/code-signing-osx/notarize_creds.sh"
if [ -f "$CONFIG_FILE" ]; then
source $CONFIG_FILE
if [[ -f "$CONFIG_FILE" ]]; then
source "$CONFIG_FILE"
app_file="$1"
zip_file=${app_file/app/zip}
ditto -c -k --keepParent "$app_file" "$zip_file"
if [ -f "$zip_file" ]; then
if [[ -f "$zip_file" ]]; then
res=$(xcrun altool --notarize-app --primary-bundle-id "com.secondlife.viewer" \
--username $USERNAME \
--password $PASSWORD \
@ -19,37 +19,39 @@ if [ -f "$CONFIG_FILE" ]; then
echo $res
requestUUID=$(echo $res | awk '/RequestUUID/ { print $NF; }')
echo "Apple Notarization RequestUUID: $requestUUID"
if [[ -n $requestUUID ]]; then
status="in progress"
while [[ "$status" == "in progress" ]]; do
in_progress=1
while [[ $in_progress -eq 1 ]]; do
sleep 30
status=$(xcrun altool --notarization-info "$requestUUID" \
res=$(xcrun altool --notarization-info "$requestUUID" \
--username $USERNAME \
--password $PASSWORD 2>&1 \
| awk -F ': ' '/Status:/ { print $2; }' )
echo "$status"
--password $PASSWORD 2>&1)
if [[ $res != *"in progress"* ]]; then
in_progress=0
fi
echo "."
done
# log results
xcrun altool --notarization-info "$requestUUID" \
--username $USERNAME \
--password $PASSWORD
echo $res
#remove temporary file
rm "$zip_file"
if [["$status" == "success"]]; then
if [[ $res == *"success"* ]]; then
xcrun stapler staple "$app_file"
elif [["$status" == "invalid"]]; then
exit 0
elif [[ $res == *"invalid"* ]]; then
echo "Notarization error: failed to process the app file"
exit 1
else
echo "Notarization error: unknown response status"
fi
else
echo "Notarization error: couldn't get request UUID"
echo $res
exit 1
fi
else
echo "Notarization error: ditto failed"
exit 1
fi
fi

View File

@ -660,10 +660,17 @@ Function CloseSecondLife
LOOP:
FindWindow $0 "Second Life" ""
IntCmp $0 0 DONE
IntCmp $0 0 SLEEP
Sleep 500
Goto LOOP
SLEEP:
# Second life window just closed, but program might not be fully done yet
# and OS might have not released some locks, wait a bit more to make sure
# all file handles were released.
# If something still isn't unlocked, it will trigger a notification from
# RemoveProgFilesOnInst
Sleep 1000
DONE:
Pop $0
Return
@ -710,6 +717,12 @@ Function RemoveProgFilesOnInst
# RMDir /r $INSTDIR is especially unsafe if user installed somewhere
# like Program Files
# Set retry counter. All integers are strings.
Push $0
StrCpy $0 0
PREINSTALLREMOVE:
# Remove old SecondLife.exe to invalidate any old shortcuts to it that may be in non-standard locations. See MAINT-3575
# <FS:Ansariel> Remove VMP
#Delete "$INSTDIR\$INSTEXE"
@ -727,19 +740,26 @@ RMDir /r "$INSTDIR\vmp_icons"
# find modules from different versions
RMDir /r "$INSTDIR\llplugin"
IfErrors 0 PREINSTALLCLEAN
StrCmp $SKIP_DIALOGS "true" PREINSTALLCLEAN
MessageBox MB_OKCANCEL $(CloseSecondLifeInstRM) IDOK PREINSTALLCLEAN IDCANCEL PREINSTALLFAIL
IntOp $0 $0 + 1
IfErrors 0 PREINSTALLDONE
IntCmp $0 1 PREINSTALLREMOVE #try again once
StrCmp $SKIP_DIALOGS "true" PREINSTALLDONE
MessageBox MB_ABORTRETRYIGNORE $(CloseSecondLifeInstRM) IDABORT PREINSTALLFAIL IDRETRY PREINSTALLREMOVE
# MB_ABORTRETRYIGNORE does not accept IDIGNORE
Goto PREINSTALLDONE
PREINSTALLFAIL:
Quit
PREINSTALLCLEAN:
PREINSTALLDONE:
# We are no longer including release notes with the viewer, so remove them.
;Delete "$SMPROGRAMS\$INSTSHORTCUT\SL Release Notes.lnk"
;Delete "$INSTDIR\releasenotes.txt"
Pop $0
FunctionEnd
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

View File

@ -61,7 +61,7 @@ LangString MissingSSE2 ${LANG_GERMAN} "Dieser PC besitzt möglicherweise keinen
; closesecondlife function (install)
LangString CloseSecondLifeInstDP ${LANG_GERMAN} "Warten auf die Beendigung von Firestorm ..."
LangString CloseSecondLifeInstMB ${LANG_GERMAN} "Firestorm kann nicht installiert oder ersetzt werden, wenn es bereits läuft.$\n$\nBeenden Sie, was Sie gerade tun und klicken Sie OK, um Firestorm zu beenden.$\nKlicken Sie ABBRECHEN, um die Installation abzubrechen."
LangString CloseSecondLifeInstRM ${LANG_GERMAN} "Firestorm konnte einige Dateien einer vorherigen Installation nicht entfernen.$\n$\nKlicken Sie OK um fortzufahren.$\nKlicken Sie ABBRECHEN, um die Installation abzubrechen."
LangString CloseSecondLifeInstRM ${LANG_GERMAN} "Firestorm konnte einige Dateien einer vorherigen Installation nicht entfernen."
; closesecondlife function (uninstall)
LangString CloseSecondLifeUnInstDP ${LANG_GERMAN} "Warten auf die Beendigung von Firestorm ..."

View File

@ -2809,16 +2809,8 @@ void LLAgentCamera::setFocusGlobal(const LLPickInfo& pick)
{
// focus on object plus designated offset
// which may or may not be same as pick.mPosGlobal
// except for rigged items to prevent wrong focus position
if (objectp->isRiggedMesh())
{
setFocusGlobal(pick.mPosGlobal, pick.mObjectID);
}
else
{
setFocusGlobal(objectp->getPositionGlobal() + LLVector3d(pick.mObjectOffset), pick.mObjectID);
}
}
else
{
// focus directly on point where user clicked

View File

@ -102,6 +102,7 @@ BOOL LLFloater360Capture::postBuild()
mWebBrowser = getChild<LLMediaCtrl>("360capture_contents");
mWebBrowser->addObserver(this);
mWebBrowser->setAllowFileDownload(true);
// There is a group of radio buttons that define the quality
// by each having a 'value' that is returns equal to the pixel

View File

@ -1596,7 +1596,8 @@ void LLFloaterEditExtDayCycle::onIdlePlay(void* user_data)
F32 new_frame = fmod(self->mPlayStartFrame + prcnt_played, 1.f);
self->mTimeSlider->setCurSliderValue(new_frame); // will do the rounding
self->mSkyBlender->setPosition(new_frame);
self->mWaterBlender->setPosition(new_frame);
self->synchronizeTabs();
self->updateTimeAndLabel();
self->updateButtons();

View File

@ -154,7 +154,10 @@ bool LLCanCache::operator()(LLInventoryCategory* cat, LLInventoryItem* item)
LLInventoryValidationInfo::LLInventoryValidationInfo():
mFatalErrorCount(0),
mWarningCount(0),
mInitialized(false)
mInitialized(false),
mFatalNoRootFolder(false),
mFatalNoLibraryRootFolder(false),
mFatalQADebugMode(false)
{
}
@ -176,6 +179,9 @@ void LLInventoryValidationInfo::asLLSD(LLSD& sd) const
sd["warning_count"] = mWarningCount;
sd["initialized"] = mInitialized;
sd["missing_system_folders_count"] = LLSD::Integer(mMissingRequiredSystemFolders.size());
sd["fatal_no_root_folder"] = mFatalNoRootFolder;
sd["fatal_no_library_root_folder"] = mFatalNoLibraryRootFolder;
sd["fatal_qa_debug_mode"] = mFatalQADebugMode;
if (mMissingRequiredSystemFolders.size()>0)
{
sd["missing_system_folders"] = LLSD::emptyArray();
@ -4303,11 +4309,13 @@ LLPointer<LLInventoryValidationInfo> LLInventoryModel::validate() const
if (getRootFolderID().isNull())
{
LL_WARNS("Inventory") << "Fatal inventory corruption: no root folder id" << LL_ENDL;
validation_info->mFatalNoRootFolder = true;
fatalities++;
}
if (getLibraryRootFolderID().isNull())
{
LL_WARNS("Inventory") << "Fatal inventory corruption: no library root folder id" << LL_ENDL;
validation_info->mFatalNoLibraryRootFolder = true;
fatalities++;
}
@ -4650,6 +4658,7 @@ LLPointer<LLInventoryValidationInfo> LLInventoryModel::validate() const
// Force all counts to be either 0 or 2, thus flagged as an error.
count_under_root = 2*distrib(e);
count_elsewhere = 2*distrib(e);
validation_info->mFatalQADebugMode = true;
}
if (is_singleton)
{

View File

@ -73,6 +73,9 @@ public:
S32 mFatalErrorCount;
S32 mWarningCount;
bool mInitialized;
bool mFatalNoRootFolder;
bool mFatalNoLibraryRootFolder;
bool mFatalQADebugMode;
std::set<LLFolderType::EType> mMissingRequiredSystemFolders;
std::set<LLFolderType::EType> mDuplicateRequiredSystemFolders;
};

View File

@ -46,6 +46,7 @@
#include "lluictrlfactory.h" // LLDefaultChildRegistry
#include "llkeyboard.h"
#include "llviewermenu.h"
#include "llviewermenufile.h" // LLFilePickerThread
// linden library includes
#include "llfocusmgr.h"
@ -105,7 +106,8 @@ LLMediaCtrl::LLMediaCtrl( const Params& p) :
mTrusted(p.trusted_content),
mWindowShade(NULL),
mHoverTextChanged(false),
mContextMenu(NULL)
mContextMenu(NULL),
mAllowFileDownload(false)
{
{
LLColor4 color = p.caret_color().get();
@ -1165,8 +1167,23 @@ void LLMediaCtrl::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event)
case MEDIA_EVENT_FILE_DOWNLOAD:
{
//llinfos << "Media event - file download requested - filename is " << self->getFileDownloadFilename() << llendl;
//LLNotificationsUtil::add("MediaFileDownloadUnsupported");
if (mAllowFileDownload)
{
// pick a file from SAVE FILE dialog
// for now the only thing that should be allowed to save is 360s
std::string suggested_filename = self->getFileDownloadFilename();
LLFilePicker::ESaveFilter filter = LLFilePicker::FFSAVE_ALL;
if (suggested_filename.find(".jpg") != std::string::npos || suggested_filename.find(".jpeg") != std::string::npos)
filter = LLFilePicker::FFSAVE_JPEG;
if (suggested_filename.find(".png") != std::string::npos)
filter = LLFilePicker::FFSAVE_PNG;
(new LLMediaFilePicker(self, filter, suggested_filename))->getFile();
}
else
{
LLNotificationsUtil::add("MediaFileDownloadUnsupported");
}
};
break;

View File

@ -151,6 +151,8 @@ public:
void setTrustedContent(bool trusted);
void setAllowFileDownload(bool allow) { mAllowFileDownload = allow; }
// over-rides
virtual BOOL handleKeyHere(KEY key, MASK mask);
virtual BOOL handleKeyUpHere(KEY key, MASK mask);
@ -206,7 +208,8 @@ public:
mClearCache,
mHoverTextChanged,
mDecoupleTextureSize,
mUpdateScrolls;
mUpdateScrolls,
mAllowFileDownload;
std::string mHomePageUrl,
mHomePageMimeType,

View File

@ -1793,6 +1793,7 @@ void LLPanelObjectInventory::createViewsForCategory(LLInventoryObject::object_li
child_categories[i]->second );
delete child_categories[i];
}
folder->setChildrenInited(true);
}
void LLPanelObjectInventory::refresh()

View File

@ -560,13 +560,6 @@ void update_texture_fetch()
gTextureList.updateImages(0.10f);
}
bool finish_force_quit(const LLSD& notification, const LLSD& response)
{
LLAppViewer::instance()->forceQuit();
return false;
}
void set_flags_and_update_appearance()
{
LLAppearanceMgr::instance().setAttachmentInvLinkEnable(true);
@ -2590,10 +2583,10 @@ bool idle_startup()
// a usable state and gInventory.isInventoryUsable() will be
// true.
// if inventory is unusable, we need to bail out.
// if inventory is unusable, show warning.
if (!gInventory.isInventoryUsable())
{
LLNotificationsUtil::add("InventoryUnusable", LLSD(), LLSD(), &finish_force_quit );
LLNotificationsUtil::add("InventoryUnusable");
}
gInventory.createCommonSystemCategories();

View File

@ -89,10 +89,9 @@ BOOL LLToolFace::handleDoubleClick(S32 x, S32 y, MASK mask)
BOOL LLToolFace::handleMouseDown(S32 x, S32 y, MASK mask)
{
gViewerWindow->pickAsync(x, y, mask, pickCallback);
mGrabX = x;
mGrabY = y;
gViewerWindow->pickAsync(x, y, mask, pickCallback, false, gSavedSettings.getBOOL("AnimatedObjectsAllowLeftClick"));
return TRUE;
}

View File

@ -136,7 +136,7 @@ BOOL LLToolCamera::handleMouseDown(S32 x, S32 y, MASK mask)
gViewerWindow->hideCursor();
gViewerWindow->pickAsync(x, y, mask, pickCallback, /*BOOL pick_transparent*/ FALSE, /*BOOL pick_rigged*/ gSavedSettings.getBOOL("AnimatedObjectsAllowLeftClick"), /*BOOL pick_unselectable*/ TRUE);
gViewerWindow->pickAsync(x, y, mask, pickCallback, /*BOOL pick_transparent*/ FALSE, /*BOOL pick_rigged*/ FALSE, /*BOOL pick_unselectable*/ TRUE);
return TRUE;
}

View File

@ -87,10 +87,6 @@ static void handle_click_action_play();
static void handle_click_action_open_media(LLPointer<LLViewerObject> objectp);
static ECursorType cursor_from_parcel_media(U8 click_action);
BOOL rigged_hovering_keep_hand = false;
U64 last_rigged_hovering_check_clock_count = 0;
U64 last_rigged_pick_clock_count = 0;
LLToolPie::LLToolPie()
: LLTool(std::string("Pie")),
mMouseButtonDown( false ),
@ -125,7 +121,7 @@ BOOL LLToolPie::handleMouseDown(S32 x, S32 y, MASK mask)
mMouseDownX = x;
mMouseDownY = y;
LLTimer pick_timer;
BOOL pick_rigged = gSavedSettings.getBOOL("AnimatedObjectsAllowLeftClick");
BOOL pick_rigged = false; //gSavedSettings.getBOOL("AnimatedObjectsAllowLeftClick");
LLPickInfo transparent_pick = gViewerWindow->pickImmediate(x, y, TRUE /*includes transparent*/, pick_rigged);
LLPickInfo visible_pick = gViewerWindow->pickImmediate(x, y, FALSE, pick_rigged);
LLViewerObject *transp_object = transparent_pick.getObject();
@ -839,21 +835,7 @@ void LLToolPie::selectionPropertiesReceived()
BOOL LLToolPie::handleHover(S32 x, S32 y, MASK mask)
{
// prevent rigged item hovering causing FPS to drop by faking we're still hovering it for 0.25 seconds
U64 current_clock_count = LLTimer::getCurrentClockCount();
if (current_clock_count - last_rigged_pick_clock_count < 2500000) {
if(rigged_hovering_keep_hand) gViewerWindow->setCursor(UI_CURSOR_HAND);
return TRUE;
}
rigged_hovering_keep_hand = 0;
static LLCachedControl<bool> pick_rigged_setting(gSavedSettings, "AnimatedObjectsAllowLeftClick");
BOOL pick_rigged = pick_rigged_setting;
if (pick_rigged) {
pick_rigged = (current_clock_count - last_rigged_hovering_check_clock_count > 1000000); // only 10 per seconds
if (pick_rigged) last_rigged_hovering_check_clock_count = current_clock_count;
}
BOOL pick_rigged = false; //gSavedSettings.getBOOL("AnimatedObjectsAllowLeftClick");
mHoverPick = gViewerWindow->pickImmediate(x, y, FALSE, pick_rigged);
LLViewerObject *parent = NULL;
LLViewerObject *object = mHoverPick.getObject();
@ -869,10 +851,6 @@ BOOL LLToolPie::handleHover(S32 x, S32 y, MASK mask)
if (object)
{
parent = object->getRootEdit();
// Update gLastRiggedPickClockCount if we're hovering a rigged item
if (object->isRiggedMesh()) {
last_rigged_pick_clock_count = current_clock_count;
}
}
// Show screen-space highlight glow effect
@ -951,7 +929,6 @@ BOOL LLToolPie::handleHover(S32 x, S32 y, MASK mask)
{
show_highlight = true;
gViewerWindow->setCursor(UI_CURSOR_HAND);
rigged_hovering_keep_hand = true;
LL_DEBUGS("UserInput") << "hover handled by LLToolPie (inactive)" << LL_ENDL;
}
else

View File

@ -78,41 +78,12 @@
#include <boost/bind.hpp> // for SkinFolder listener
#include <boost/signals2.hpp>
class LLMediaFilePicker : public LLFilePickerThread // deletes itself when done
{
public:
LLMediaFilePicker(LLPluginClassMedia* plugin, LLFilePicker::ELoadFilter filter, bool get_multiple)
: LLFilePickerThread(filter, get_multiple),
mPlugin(plugin->getSharedPrt())
{
}
LLMediaFilePicker(LLPluginClassMedia* plugin, LLFilePicker::ESaveFilter filter, const std::string &proposed_name)
: LLFilePickerThread(filter, proposed_name),
mPlugin(plugin->getSharedPrt())
{
}
virtual void notify(const std::vector<std::string>& filenames)
{
mPlugin->sendPickFileResponse(mResponses);
mPlugin = NULL;
}
private:
boost::shared_ptr<LLPluginClassMedia> mPlugin;
};
void init_threaded_picker_load_dialog(LLPluginClassMedia* plugin, LLFilePicker::ELoadFilter filter, bool get_multiple)
{
(new LLMediaFilePicker(plugin, filter, get_multiple))->getFile(); // will delete itself
}
void init_threaded_picker_save_dialog(LLPluginClassMedia* plugin, LLFilePicker::ESaveFilter filter, std::string &proposed_name)
{
(new LLMediaFilePicker(plugin, filter, proposed_name))->getFile(); // will delete itself
}
///////////////////////////////////////////////////////////////////////////////
// Move this to its own file.
@ -3291,18 +3262,10 @@ void LLViewerMediaImpl::handleMediaEvent(LLPluginClassMedia* plugin, LLPluginCla
case LLViewerMediaObserver::MEDIA_EVENT_FILE_DOWNLOAD:
{
LL_DEBUGS("Media") << "Media event - file download requested - filename is " << plugin->getFileDownloadFilename() << LL_ENDL;
// pick a file from SAVE FILE dialog
// need a better algorithm that this or else, pass in type of save type
// from event that initiated it - this is okay for now - only thing
// that saves is 360s
std::string suggested_filename = plugin->getFileDownloadFilename();
LLFilePicker::ESaveFilter filter = LLFilePicker::FFSAVE_ALL;
if (suggested_filename.find(".jpg") != std::string::npos || suggested_filename.find(".jpeg") != std::string::npos)
filter = LLFilePicker::FFSAVE_JPEG;
if (suggested_filename.find(".png") != std::string::npos)
filter = LLFilePicker::FFSAVE_PNG;
init_threaded_picker_save_dialog(plugin, filter, suggested_filename);
//unblock media plugin
const std::vector<std::string> empty_response;
plugin->sendPickFileResponse(empty_response);
}
break;

View File

@ -46,6 +46,7 @@
#include "llimagejpeg.h"
#include "llimagetga.h"
#include "llinventorymodel.h" // gInventory
#include "llpluginclassmedia.h"
#include "llresourcedata.h"
#include "lltoast.h"
#include "llfloaterperms.h"
@ -259,6 +260,25 @@ void LLFilePickerReplyThread::notify(const std::vector<std::string>& filenames)
}
}
LLMediaFilePicker::LLMediaFilePicker(LLPluginClassMedia* plugin, LLFilePicker::ELoadFilter filter, bool get_multiple)
: LLFilePickerThread(filter, get_multiple),
mPlugin(plugin->getSharedPrt())
{
}
LLMediaFilePicker::LLMediaFilePicker(LLPluginClassMedia* plugin, LLFilePicker::ESaveFilter filter, const std::string &proposed_name)
: LLFilePickerThread(filter, proposed_name),
mPlugin(plugin->getSharedPrt())
{
}
void LLMediaFilePicker::notify(const std::vector<std::string>& filenames)
{
mPlugin->sendPickFileResponse(mResponses);
mPlugin = NULL;
}
//============================================================================
#if LL_WINDOWS

View File

@ -38,6 +38,7 @@
#include <boost/signals2.hpp> // <FS:CR Threaded Filepickers />
class LLTransactionID;
class LLPluginClassMedia;
void init_menu_file();
@ -72,6 +73,7 @@ void assign_defaults_and_show_upload_message(
const std::string& display_name,
std::string& description);
//consider moving all file pickers below to more suitable place
class LLFilePickerThread : public LLThread
{ //multi-threaded file picker (runs system specific file picker in background and calls "notify" from main thread)
public:
@ -128,4 +130,17 @@ private:
file_picked_signal_t* mFailureSignal;
};
class LLMediaFilePicker : public LLFilePickerThread
{
public:
LLMediaFilePicker(LLPluginClassMedia* plugin, LLFilePicker::ELoadFilter filter, bool get_multiple);
LLMediaFilePicker(LLPluginClassMedia* plugin, LLFilePicker::ESaveFilter filter, const std::string &proposed_name);
virtual void notify(const std::vector<std::string>& filenames);
private:
boost::shared_ptr<LLPluginClassMedia> mPlugin;
};
#endif

View File

@ -7396,7 +7396,6 @@ LLViewerObject* LLPipeline::lineSegmentIntersectInWorld(const LLVector4a& start,
if (!sPickAvatar)
{
pick_rigged = false;
//save hit info in case we need to restore
//due to attachment override
LLVector4a local_normal;

View File

@ -3095,11 +3095,8 @@ You have been logged out of [CURRENT_GRID].
icon="alertmodal.tga"
name="InventoryUnusable"
type="alertmodal">
There is a problem with your inventory. First, try logging out and logging in again. If you see this message again, contact Support and ask them to correct the problem.
There was a problem loading your inventory. First, try logging out and logging in again. If you see this message again, contact Support to correct the problem.
<tag>fail</tag>
<usetemplate
name="okbutton"
yestext="Log out"/>
</notification>
<notification