Merge branch 'DRTVWR-553-maint-mix-JK' of https://bitbucket.org/lindenlab/viewer
commit
828fbdc571
|
|
@ -1275,8 +1275,6 @@ Robin Cornelius
|
|||
VWR-12763
|
||||
VWR-12995
|
||||
VWR-20911
|
||||
Rohacan Hirons
|
||||
SL-14717
|
||||
Rosco Teardrop
|
||||
Rose Evans
|
||||
Rudee Voom
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -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 ..."
|
||||
|
|
|
|||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -1793,6 +1793,7 @@ void LLPanelObjectInventory::createViewsForCategory(LLInventoryObject::object_li
|
|||
child_categories[i]->second );
|
||||
delete child_categories[i];
|
||||
}
|
||||
folder->setChildrenInited(true);
|
||||
}
|
||||
|
||||
void LLPanelObjectInventory::refresh()
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue