diff --git a/doc/contributions.txt b/doc/contributions.txt index c7092df285..94033a7096 100755 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -1275,8 +1275,6 @@ Robin Cornelius VWR-12763 VWR-12995 VWR-20911 -Rohacan Hirons - SL-14717 Rosco Teardrop Rose Evans Rudee Voom diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 1435e832cc..f4114fca49 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -11134,7 +11134,7 @@ Change of this parameter will affect the layout of buttons in notification toast PushToTalkToggle Comment - Should the push-to-talk button behave as a toggle + Should the push-to-talk toolbar button behave as a toggle Persist 1 Type diff --git a/indra/newview/installers/darwin/apple-notarize.sh b/indra/newview/installers/darwin/apple-notarize.sh index e019437924..d90772ec0e 100755 --- a/indra/newview/installers/darwin/apple-notarize.sh +++ b/indra/newview/installers/darwin/apple-notarize.sh @@ -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 - diff --git a/indra/newview/installers/windows/installer_template.nsi b/indra/newview/installers/windows/installer_template.nsi index 96eff91f5e..83160b8453 100644 --- a/indra/newview/installers/windows/installer_template.nsi +++ b/indra/newview/installers/windows/installer_template.nsi @@ -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 # 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 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; diff --git a/indra/newview/installers/windows/lang_da.nsi b/indra/newview/installers/windows/lang_da.nsi index 44bb150723..0160af157e 100644 Binary files a/indra/newview/installers/windows/lang_da.nsi and b/indra/newview/installers/windows/lang_da.nsi differ diff --git a/indra/newview/installers/windows/lang_de.nsi b/indra/newview/installers/windows/lang_de.nsi index ac91b01880..d36873a462 100755 --- a/indra/newview/installers/windows/lang_de.nsi +++ b/indra/newview/installers/windows/lang_de.nsi @@ -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 ..." diff --git a/indra/newview/installers/windows/lang_en-us.nsi b/indra/newview/installers/windows/lang_en-us.nsi index 0ca91a14dd..9eb0e4d618 100644 Binary files a/indra/newview/installers/windows/lang_en-us.nsi and b/indra/newview/installers/windows/lang_en-us.nsi differ diff --git a/indra/newview/installers/windows/lang_es.nsi b/indra/newview/installers/windows/lang_es.nsi index 346d5698c3..bfdbe6e9c7 100755 Binary files a/indra/newview/installers/windows/lang_es.nsi and b/indra/newview/installers/windows/lang_es.nsi differ diff --git a/indra/newview/installers/windows/lang_fr.nsi b/indra/newview/installers/windows/lang_fr.nsi index 16f9e4ac35..f3de969c98 100755 Binary files a/indra/newview/installers/windows/lang_fr.nsi and b/indra/newview/installers/windows/lang_fr.nsi differ diff --git a/indra/newview/installers/windows/lang_it.nsi b/indra/newview/installers/windows/lang_it.nsi index 94a73976b9..7388d62f49 100755 Binary files a/indra/newview/installers/windows/lang_it.nsi and b/indra/newview/installers/windows/lang_it.nsi differ diff --git a/indra/newview/installers/windows/lang_ja.nsi b/indra/newview/installers/windows/lang_ja.nsi index c4a12c1019..3c01ecebc4 100755 Binary files a/indra/newview/installers/windows/lang_ja.nsi and b/indra/newview/installers/windows/lang_ja.nsi differ diff --git a/indra/newview/installers/windows/lang_pl.nsi b/indra/newview/installers/windows/lang_pl.nsi index 771e6531f2..5cb00d6270 100644 Binary files a/indra/newview/installers/windows/lang_pl.nsi and b/indra/newview/installers/windows/lang_pl.nsi differ diff --git a/indra/newview/installers/windows/lang_pt-br.nsi b/indra/newview/installers/windows/lang_pt-br.nsi index d91c3db349..f2ab414639 100755 Binary files a/indra/newview/installers/windows/lang_pt-br.nsi and b/indra/newview/installers/windows/lang_pt-br.nsi differ diff --git a/indra/newview/installers/windows/lang_ru.nsi b/indra/newview/installers/windows/lang_ru.nsi index dff54f08a5..131b5377de 100755 Binary files a/indra/newview/installers/windows/lang_ru.nsi and b/indra/newview/installers/windows/lang_ru.nsi differ diff --git a/indra/newview/installers/windows/lang_tr.nsi b/indra/newview/installers/windows/lang_tr.nsi index 1f0fbaf042..19006b9540 100755 Binary files a/indra/newview/installers/windows/lang_tr.nsi and b/indra/newview/installers/windows/lang_tr.nsi differ diff --git a/indra/newview/installers/windows/lang_zh.nsi b/indra/newview/installers/windows/lang_zh.nsi index b4cdba159e..0c5ead4b1a 100755 Binary files a/indra/newview/installers/windows/lang_zh.nsi and b/indra/newview/installers/windows/lang_zh.nsi differ diff --git a/indra/newview/llagentcamera.cpp b/indra/newview/llagentcamera.cpp index 1b01778685..b8a7bb482b 100644 --- a/indra/newview/llagentcamera.cpp +++ b/indra/newview/llagentcamera.cpp @@ -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 diff --git a/indra/newview/llfloater360capture.cpp b/indra/newview/llfloater360capture.cpp index 4d9935c74d..6eec980da8 100644 --- a/indra/newview/llfloater360capture.cpp +++ b/indra/newview/llfloater360capture.cpp @@ -102,6 +102,7 @@ BOOL LLFloater360Capture::postBuild() mWebBrowser = getChild("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 diff --git a/indra/newview/llfloatereditextdaycycle.cpp b/indra/newview/llfloatereditextdaycycle.cpp index eb0cd28190..24673d5a7c 100644 --- a/indra/newview/llfloatereditextdaycycle.cpp +++ b/indra/newview/llfloatereditextdaycycle.cpp @@ -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(); diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp index 8b21387dd9..80f47d5cba 100644 --- a/indra/newview/llinventorymodel.cpp +++ b/indra/newview/llinventorymodel.cpp @@ -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 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 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) { diff --git a/indra/newview/llinventorymodel.h b/indra/newview/llinventorymodel.h index 318b277586..d64590db87 100644 --- a/indra/newview/llinventorymodel.h +++ b/indra/newview/llinventorymodel.h @@ -73,6 +73,9 @@ public: S32 mFatalErrorCount; S32 mWarningCount; bool mInitialized; + bool mFatalNoRootFolder; + bool mFatalNoLibraryRootFolder; + bool mFatalQADebugMode; std::set mMissingRequiredSystemFolders; std::set mDuplicateRequiredSystemFolders; }; diff --git a/indra/newview/llmediactrl.cpp b/indra/newview/llmediactrl.cpp index b6bd6ce76e..4a5b6243f3 100644 --- a/indra/newview/llmediactrl.cpp +++ b/indra/newview/llmediactrl.cpp @@ -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; diff --git a/indra/newview/llmediactrl.h b/indra/newview/llmediactrl.h index b0baeb0ca6..2372e3d7b0 100644 --- a/indra/newview/llmediactrl.h +++ b/indra/newview/llmediactrl.h @@ -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, diff --git a/indra/newview/llpanelobjectinventory.cpp b/indra/newview/llpanelobjectinventory.cpp index a670abf086..d5afe9a853 100644 --- a/indra/newview/llpanelobjectinventory.cpp +++ b/indra/newview/llpanelobjectinventory.cpp @@ -1793,6 +1793,7 @@ void LLPanelObjectInventory::createViewsForCategory(LLInventoryObject::object_li child_categories[i]->second ); delete child_categories[i]; } + folder->setChildrenInited(true); } void LLPanelObjectInventory::refresh() diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index c08276e591..934acada5d 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -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(); diff --git a/indra/newview/lltoolface.cpp b/indra/newview/lltoolface.cpp index 105947e91f..0fa7c6c3a0 100644 --- a/indra/newview/lltoolface.cpp +++ b/indra/newview/lltoolface.cpp @@ -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; } diff --git a/indra/newview/lltoolfocus.cpp b/indra/newview/lltoolfocus.cpp index 72c580bad4..122180731d 100644 --- a/indra/newview/lltoolfocus.cpp +++ b/indra/newview/lltoolfocus.cpp @@ -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; } diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp index c1571322fd..1833c78136 100644 --- a/indra/newview/lltoolpie.cpp +++ b/indra/newview/lltoolpie.cpp @@ -87,10 +87,6 @@ static void handle_click_action_play(); static void handle_click_action_open_media(LLPointer 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 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 diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp index 6e280db4ab..2217a10d8e 100644 --- a/indra/newview/llviewermedia.cpp +++ b/indra/newview/llviewermedia.cpp @@ -78,41 +78,12 @@ #include // for SkinFolder listener #include -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& filenames) - { - mPlugin->sendPickFileResponse(mResponses); - mPlugin = NULL; - } - -private: - boost::shared_ptr 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 empty_response; + plugin->sendPickFileResponse(empty_response); } break; diff --git a/indra/newview/llviewermenufile.cpp b/indra/newview/llviewermenufile.cpp index 64b0fb86e9..23c150ae29 100644 --- a/indra/newview/llviewermenufile.cpp +++ b/indra/newview/llviewermenufile.cpp @@ -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& 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& filenames) +{ + mPlugin->sendPickFileResponse(mResponses); + mPlugin = NULL; +} + //============================================================================ #if LL_WINDOWS diff --git a/indra/newview/llviewermenufile.h b/indra/newview/llviewermenufile.h index bcde38d591..b3b4ad71b9 100644 --- a/indra/newview/llviewermenufile.h +++ b/indra/newview/llviewermenufile.h @@ -38,6 +38,7 @@ #include // 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& filenames); + +private: + boost::shared_ptr mPlugin; +}; + + #endif diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index 23974f2d75..8acd6191e2 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -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; diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index a620f5c30c..001942d6f6 100644 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -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. fail -