diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 7cefb59c6..07fac7459 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -15140,6 +15140,17 @@ This should be as low as possible, but too low may break functionality Value 0 + UseTypingBubbles + + Comment + Show typing indicator in avatar nametags + Persist + 1 + Type + Boolean + Value + 0 + UseDebugMenus Comment diff --git a/indra/newview/ascentprefschat.cpp b/indra/newview/ascentprefschat.cpp index 599ab0c66..f24724279 100644 --- a/indra/newview/ascentprefschat.cpp +++ b/indra/newview/ascentprefschat.cpp @@ -329,6 +329,7 @@ void LLPrefsAscentChat::refreshValues() mHideTypingNotification = gSavedSettings.getBOOL("AscentHideTypingNotification"); mShowGroupNameInChatIM = gSavedSettings.getBOOL("OptionShowGroupNameInChatIM"); mShowDisplayNameChanges = gSavedSettings.getBOOL("ShowDisplayNameChanges"); + mUseTypingBubbles = gSavedSettings.getBOOL("UseTypingBubbles"); mPlayTypingSound = gSavedSettings.getBOOL("PlayTypingSound"); mHideNotificationsInChat = gSavedSettings.getBOOL("HideNotificationsInChat"); mEnableMUPose = gSavedSettings.getBOOL("AscentAllowMUpose"); @@ -545,6 +546,7 @@ void LLPrefsAscentChat::cancel() gSavedSettings.setBOOL("AscentHideTypingNotification", mHideTypingNotification); gSavedSettings.setBOOL("OptionShowGroupNameInChatIM", mShowGroupNameInChatIM); gSavedSettings.setBOOL("ShowDisplayNameChanges", mShowDisplayNameChanges); + gSavedSettings.setBOOL("UseTypingBubbles", mUseTypingBubbles); gSavedSettings.setBOOL("PlayTypingSound", mPlayTypingSound); gSavedSettings.setBOOL("HideNotificationsInChat", mHideNotificationsInChat); gSavedSettings.setBOOL("AscentAllowMUpose", mEnableMUPose); diff --git a/indra/newview/ascentprefschat.h b/indra/newview/ascentprefschat.h index 291645b42..04fa1a69c 100644 --- a/indra/newview/ascentprefschat.h +++ b/indra/newview/ascentprefschat.h @@ -66,6 +66,7 @@ protected: BOOL mHideTypingNotification; BOOL mShowGroupNameInChatIM; bool mShowDisplayNameChanges; + bool mUseTypingBubbles; BOOL mPlayTypingSound; BOOL mHideNotificationsInChat; BOOL mEnableMUPose; diff --git a/indra/newview/linux_tools/client-readme-voice.txt b/indra/newview/linux_tools/client-readme-voice.txt index 23a42f484..aa04a5704 100644 --- a/indra/newview/linux_tools/client-readme-voice.txt +++ b/indra/newview/linux_tools/client-readme-voice.txt @@ -4,14 +4,20 @@ Second Life - Linux Voice Support README WHAT IS IT? -=-=-=-=-=- -Linux Voice Support is a new feature in testing which allows users -of the Linux Second Life client to participate in voice-chat with other -residents and groups inside Second Life, with an appropriate -headset/microphone. +Linux Voice Support is a feature in testing which allows users of the Linux +Second Life client to participate in voice-chat with other residents and +groups inside Second Life, with an appropriate headset/microphone. Linux Voice Support is currently EXPERIMENTAL and is known to still have some compatibility issues. +SINGULARITY MULTI-VOICE +-=-=-=-=-=-=-=-=-=-=-=- +Singularity multi-voice is an experimental feature that allows you to run multiple +SLVoice daemons at the same time, in order to do this, the debug setting VoiceMultiInstance +must be TRUE, this allows multiple instances of the viewer to run concurrently and +each connect to voice. + REQUIREMENTS -=-=-=-=-=-= @@ -29,6 +35,13 @@ systems: * Fedora Core 6 with (unknown) audio chipset * Ubuntu 8.04 (Hardy) with (unknown) audio chipset +TESTING YOUR SETTINGS +-=-=-=-=-=-=-=-=-=-=- + +* The Second Life region 'Voice Echo Canyon' is a great place for testing +your hardware settings and quality - it will 'echo' your voice back to you +when you speak. + KNOWN PROBLEMS -=-=-=-=-=-=-= @@ -41,12 +54,12 @@ TROUBLESHOOTING PROBLEM 1: I don't see a white dot over the head of my avatar or other Voice-using avatars. SOLUTION: -a. Ensure that 'Enable voice chat' is enabled in the Voice Chat - preferences window and that you are in a voice-enabled area (you - will see a blue headphone icon in the SL menu-bar). +a. Ensure that 'Enable voice chat' is enabled in the 'Voice Chat' section of the + Preferences window, and that you are in a voice-enabled area + (you will see a blue headphone icon in the SL menu-bar). b. If the above does not help, exit Second Life and ensure that any remaining 'SLVoice' processes (as reported by 'ps', 'top' or similar) - are killed. + are killed before restarting. PROBLEM 2: I have a white dot over my head but I never see (or hear!) anyone except myself listed in the Active Speakers dialog when I'm sure that other @@ -65,12 +78,13 @@ c. Update to the latest version of ALSA manually. For a guide, see the PROBLEM 3: I can hear other people, but they cannot hear me. SOLUTION: -a. Ensure that you have the 'Talk' button activated while you are trying to - speak. +a. Ensure that you have the 'Talk' button (at the bottom of the Second Life + window)activated while you are trying to speak. b. Ensure that your microphone jack is inserted into the correct socket of your sound card, where appropriate. -c. Use your system mixer-setting program or the 'alsamixer' program to ensure - that microphone input is set as the active input source and is not muted. +c. Use your system mixer-setting program (such as the PulseAudio 'volume + control' applet or the ALSA 'alsamixer' program) to ensure that microphone + input is set as the active input source and is not muted. d. Verify that audio input works in other applications, i.e. Audacity PROBLEM 4: Other people just hear bursts of loud noise when I speak. diff --git a/indra/newview/linux_tools/client-readme.txt b/indra/newview/linux_tools/client-readme.txt index 99c973f7e..f9f60c833 100644 --- a/indra/newview/linux_tools/client-readme.txt +++ b/indra/newview/linux_tools/client-readme.txt @@ -15,7 +15,7 @@ Life itself - please see . 5.3. Blank window after minimizing it 5.4. Audio 5.5. 'Alt' key for camera controls doesn't work - 5.6. In-world streaming movie/music playback + 5.6. In-world streaming movie, music and Flash playback 6. Advanced Troubleshooting 6.1. Audio 6.2. OpenGL @@ -75,10 +75,11 @@ Life Linux client is very similar to that for Windows, as detailed at: 3. INSTALLING & RUNNING -=-=-=-=-=-=-=-=-=-=-=- -The Second Life Linux client entirely runs out of the directory you have -unpacked it into - no installation step is required. +The Singularity Linux client can entirely run from the directory you have +unpacked it into - no installation step is required. If you wish to +perform a separate installation step anyway, you may run './install.sh' -Run ./secondlife from the installation directory to start Second Life. +Run ./singularity from the installation directory to start Singularity. For in-world MOVIE and MUSIC PLAYBACK, you will need (32-bit) GStreamer 0.10 installed on your system. This is optional - it is not required for general @@ -168,12 +169,15 @@ SOLUTION:- Some window managers eat the Alt key for their own purposes; you example, the 'Windows' key!) which will allow the Alt key to function properly with mouse actions in Second Life and other applications. -PROBLEM 6:- In-world movie and/or music playback doesn't work for me. +PROBLEM 6:- In-world movie, music, or Flash playback doesn't work for me. SOLUTION:- You need to have a working installation of GStreamer 0.10; this is usually an optional package for most versions of Linux. If you have installed GStreamer 0.10 and you can play some music/movies but not others then you need to install a wider selection of GStreamer plugins, either - from your vendor or an appropriate third party. + from your vendor (i.e. the 'Ugly' plugins) or an appropriate third party. + For Flash playback, you need to have Flash 10 installed for your normal + web browser (for example, Firefox). PulseAudio is required for Flash + volume control / muting to fully function inside Second Life. 6. ADVANCED TROUBLESHOOTING diff --git a/indra/newview/linux_tools/install.sh b/indra/newview/linux_tools/install.sh new file mode 100644 index 000000000..86d020671 --- /dev/null +++ b/indra/newview/linux_tools/install.sh @@ -0,0 +1,106 @@ +#!/bin/bash + +# Install Singularity Viewer. This script can install the viewer both +# system-wide and for an individual user. + +VT102_STYLE_NORMAL='\E[0m' +VT102_COLOR_RED='\E[31m' + +SCRIPTSRC=`readlink -f "$0" || echo "$0"` +RUN_PATH=`dirname "${SCRIPTSRC}" || echo .` +tarball_path=${RUN_PATH} + +function prompt() +{ + local prompt=$1 + local input + + echo -n "$prompt" + + while read input; do + case $input in + [Yy]* ) + return 1 + ;; + [Nn]* ) + return 0 + ;; + * ) + echo "Please enter yes or no." + echo -n "$prompt" + esac + done +} + +function die() +{ + warn $1 + exit 1 +} + +function warn() +{ + echo -n -e $VT102_COLOR_RED + echo $1 + echo -n -e $VT102_STYLE_NORMAL +} + +function homedir_install() +{ + warn "You are not running as a privileged user, so you will only be able" + warn "to install Singularity Viewer in your home directory. If you" + warn "would like to install Singularity Viewer system-wide, please run" + warn "this script as the root user, or with the 'sudo' command." + echo + + prompt "Proceed with the installation? [Y/N]: " + if [[ $? == 0 ]]; then + exit 0 + fi + + install_to_prefix "$HOME/.singularity-install" + $HOME/.singularity-install/refresh_desktop_app_entry.sh +} + +function root_install() +{ + local default_prefix="/opt/singularity-install" + + echo -n "Enter the desired installation directory [${default_prefix}]: "; + read + if [[ "$REPLY" = "" ]] ; then + local install_prefix=$default_prefix + else + local install_prefix=$REPLY + fi + + install_to_prefix "$install_prefix" + + mkdir -p /usr/local/share/applications + ${install_prefix}/refresh_desktop_app_entry.sh +} + +function install_to_prefix() +{ + test -e "$1" && backup_previous_installation "$1" + mkdir -p "$1" || die "Failed to create installation directory!" + + echo " - Installing to $1" + + cp -a "${tarball_path}"/* "$1/" || die "Failed to complete the installation!" +} + +function backup_previous_installation() +{ + local backup_dir="$1".backup-$(date -I) + echo " - Backing up previous installation to $backup_dir" + + mv "$1" "$backup_dir" || die "Failed to create backup of existing installation!" +} + + +if [ "$UID" == "0" ]; then + root_install +else + homedir_install +fi diff --git a/indra/newview/linux_tools/refresh_desktop_app_entry.sh b/indra/newview/linux_tools/refresh_desktop_app_entry.sh new file mode 100644 index 000000000..9412c840c --- /dev/null +++ b/indra/newview/linux_tools/refresh_desktop_app_entry.sh @@ -0,0 +1,36 @@ +#!/bin/bash + +SCRIPTSRC=`readlink -f "$0" || echo "$0"` +RUN_PATH=`dirname "${SCRIPTSRC}" || echo .` + +install_prefix=${RUN_PATH} + +function install_desktop_entry() +{ + local installation_prefix="$1" + local desktop_entries_dir="$2" + + local desktop_entry="\ +[Desktop Entry]\n\ +Name=Singularity\n\ +Comment=Client for Online Virtual Worlds, such as Second Life\n\ +Exec=${installation_prefix}/singularity\n\ +Icon=${installation_prefix}/singularity_icon.png\n\ +Terminal=false\n\ +Type=Application\n\ +Categories=Application;Network;\n\ +StartupNotify=true\n\ +X-Desktop-File-Install-Version=3.0" + + echo " - Installing menu entries in ${desktop_entries_dir}" + mkdir -vp "${desktop_entries_dir}" + echo -e $desktop_entry > "${desktop_entries_dir}/singularity-viewer.desktop" || "Failed to install application menu!" +} + +if [ "$UID" == "0" ]; then + # system-wide + install_desktop_entry "$install_prefix" /usr/local/share/applications +else + # user-specific + install_desktop_entry "$install_prefix" "$HOME/.local/share/applications" +fi diff --git a/indra/newview/linux_tools/wrapper.sh b/indra/newview/linux_tools/wrapper.sh index e406e3c71..ff7fc48ae 100755 --- a/indra/newview/linux_tools/wrapper.sh +++ b/indra/newview/linux_tools/wrapper.sh @@ -4,10 +4,10 @@ ## These options are for self-assisted troubleshooting during this beta ## testing phase; you should not usually need to touch them. -## - Avoids using any OpenAL audio driver. -#export LL_BAD_OPENAL_DRIVER=x ## - Avoids using any FMOD Ex audio driver. #export LL_BAD_FMODEX_DRIVER=x +## - Avoids using any OpenAL audio driver. +#export LL_BAD_OPENAL_DRIVER=x ## - Avoids using any FMOD audio driver. #export LL_BAD_FMOD_DRIVER=x @@ -20,7 +20,6 @@ ## - Avoids using the FMOD or FMOD Ex ESD audio driver. #export LL_BAD_FMOD_ESD=x - ## - Avoids the optional OpenGL extensions which have proven most problematic ## on some hardware. Disabling this option may cause BETTER PERFORMANCE but ## may also cause CRASHES and hangs on some unstable combinations of drivers @@ -109,6 +108,10 @@ cd "${RUN_PATH}" # Re-register the secondlife:// protocol handler every launch, for now. ./register_secondlifeprotocol.sh + +# Re-register the application with the desktop system every launch, for now. +./refresh_desktop_app_entry.sh + ## Before we mess with LD_LIBRARY_PATH, save the old one to restore for ## subprocesses that care. export SAVED_LD_LIBRARY_PATH="${LD_LIBRARY_PATH}" @@ -147,16 +150,11 @@ fi export SL_CMD='$LL_WRAPPER bin/$VIEWER_BINARY' export SL_OPT="`cat gridargs.dat` $@" -# Run the program +# Run the program. eval ${SL_ENV} ${SL_CMD} ${SL_OPT} || LL_RUN_ERR=runerr # Handle any resulting errors -if [ -n "$LL_RUN_ERR" ]; then - LL_RUN_ERR_MSG="" - if [ "$LL_RUN_ERR" = "runerr" ]; then - # generic error running the binary - echo '*** Bad shutdown. ***' - - - fi +if [ -n "$LL_RUN_ERR" = "runerr" ]; then + # generic error running the binary + echo '*** Bad shutdown. ***' fi diff --git a/indra/newview/llassetuploadresponders.cpp b/indra/newview/llassetuploadresponders.cpp index 77a0558f1..de8da30e6 100644 --- a/indra/newview/llassetuploadresponders.cpp +++ b/indra/newview/llassetuploadresponders.cpp @@ -3,10 +3,9 @@ * @brief Processes responses received for asset upload requests. * * $LicenseInfo:firstyear=2007&license=viewergpl$ - * + * Second Life Viewer Source Code * Copyright (c) 2007-2009, Linden Research, Inc. * - * Second Life Viewer Source Code * The source code in this file ("Source Code") is provided by Linden Lab * to you under the terms of the GNU General Public License, version 2.0 * ("GPL"), unless you have obtained a separate licensing agreement @@ -53,7 +52,6 @@ #include "llviewerobject.h" #include "llviewercontrol.h" #include "llviewerobjectlist.h" -#include "llviewermenufile.h" #include "llviewertexlayer.h" #include "llviewerwindow.h" #include "lltrans.h" @@ -255,6 +253,7 @@ void LLAssetUploadResponder::result(const LLSD& content) lldebugs << "LLAssetUploadResponder::result from capabilities" << llendl; std::string state = content["state"]; + if (state == "upload") { uploadUpload(content); @@ -343,6 +342,7 @@ void LLNewAgentInventoryResponder::error(U32 statusNum, const std::string& reaso //LLImportColladaAssetCache::getInstance()->assetUploaded(mVFileID, LLUUID(), FALSE); } + //virtual void LLNewAgentInventoryResponder::uploadFailure(const LLSD& content) { @@ -351,6 +351,7 @@ void LLNewAgentInventoryResponder::uploadFailure(const LLSD& content) (*mCallBack)(false, mUserData); } LLAssetUploadResponder::uploadFailure(content); + //LLImportColladaAssetCache::getInstance()->assetUploaded(mVFileID, content["new_asset"], FALSE); } @@ -397,10 +398,14 @@ void LLNewAgentInventoryResponder::uploadComplete(const LLSD& content) // continue uploading for bulk uploads - if (!gUploadQueue.empty()) + /* Singu Note: sUploadQueue was never getting populated, anywhere! Therefore, this entire block never was reached. + ** I have condensed it to here in the hopes it may one day see use. Apparently, it came in with Siana's prep work + ** for mesh upload (697dd7e9298282590f8cf858a58335f70302532b), but we never needed it. + static std::deque sUploadQueue; + if (!sUploadQueue.empty()) { - std::string next_file = gUploadQueue.front(); - gUploadQueue.pop_front(); + std::string next_file = sUploadQueue.front(); + sUploadQueue.pop_front(); if (next_file.empty()) return; std::string name = gDirUtilp->getBaseFileName(next_file, true); @@ -448,6 +453,7 @@ void LLNewAgentInventoryResponder::uploadComplete(const LLSD& content) expected_upload_cost, userdata); } + */ } LLSendTexLayerResponder::LLSendTexLayerResponder(const LLSD& post_data, @@ -698,6 +704,7 @@ void LLUpdateTaskInventoryResponder::uploadComplete(const LLSD& content) } } + ///////////////////////////////////////////////////// // LLNewAgentInventoryVariablePriceResponder::Impl // ///////////////////////////////////////////////////// @@ -1165,3 +1172,4 @@ void LLNewAgentInventoryVariablePriceResponder::showConfirmationDialog( boost::intrusive_ptr(this))); } } + diff --git a/indra/newview/llviewermenufile.cpp b/indra/newview/llviewermenufile.cpp index 7eb89b582..a111d95de 100644 --- a/indra/newview/llviewermenufile.cpp +++ b/indra/newview/llviewermenufile.cpp @@ -3,10 +3,9 @@ * @brief "File" menu in the main menu bar. * * $LicenseInfo:firstyear=2002&license=viewergpl$ - * + * Second Life Viewer Source Code * Copyright (c) 2002-2009, Linden Research, Inc. * - * Second Life Viewer Source Code * The source code in this file ("Source Code") is provided by Linden Lab * to you under the terms of the GNU General Public License, version 2.0 * ("GPL"), unless you have obtained a separate licensing agreement @@ -63,11 +62,9 @@ #include "lltrans.h" #include "llfloaterbuycurrency.h" // -#include "llselectmgr.h" +#include "floaterlocalassetbrowse.h" #include "llassettype.h" #include "llinventorytype.h" -#include "llbvhloader.h" -#include "lllocalinventory.h" // // linden libraries @@ -89,12 +86,9 @@ #include #include "hippogridmanager.h" -#include "importtracker.h" using namespace LLOldEvents; -std::deque gUploadQueue; - typedef LLMemberListener view_listener_t; @@ -502,6 +496,15 @@ class LLFileMinimizeAllWindows : public view_listener_t return true; } }; + +class LLFileLocalAssetBrowser : public view_listener_t +{ + bool handleEvent(LLPointer, const LLSD&) + { + FloaterLocalAssetBrowser::show(0); + return true; + } +}; // class LLFileSavePreview : public view_listener_t @@ -600,20 +603,6 @@ class LLFileTakeSnapshotToDisk : public view_listener_t } }; -class LLFileLogOut : public view_listener_t -{ - bool handleEvent(LLPointer event, const LLSD& userdata) - { - std::string command(gDirUtilp->getExecutableDir() + gDirUtilp->getDirDelimiter() + gDirUtilp->getExecutableFilename()); - gSavedSettings.setBOOL("ShowConsoleWindow", FALSE); - gViewerWindow->getWindow()->ShellEx(command); - gSavedSettings.setBOOL("ShowConsoleWindow", FALSE); - LLAppViewer::instance()->userQuit(); - gSavedSettings.setBOOL("ShowConsoleWindow", FALSE); - return true; - } -}; - class LLFileQuit : public view_listener_t { bool handleEvent(LLPointer event, const LLSD& userdata) @@ -696,7 +685,7 @@ void upload_new_resource(const std::string& src_filename, std::string name, "No file extension for the file: '%s'\nPlease make sure the file has a correct file extension", short_name.c_str()); args["FILE"] = short_name; - upload_error(error_message, "NofileExtension", filename, args); + upload_error(error_message, "NoFileExtension", filename, args); return; } else if (codec == IMG_CODEC_J2C) @@ -992,16 +981,10 @@ void temp_upload_callback(const LLUUID& uuid, void* user_data, S32 result, LLExt perms->setMaskEveryone(PERM_ALL); perms->setMaskGroup(PERM_ALL); perms->setMaskNext(PERM_ALL); - - LLUUID destination = gInventory.findCategoryUUIDForType(LLFolderType::FT_TEXTURE); - BOOL bUseSystemInventory = (gSavedSettings.getBOOL("AscentUseSystemFolder") && gSavedSettings.getBOOL("AscentSystemTemporary")); - if (bUseSystemInventory) - { - destination = gSystemFolderAssets; - } + LLViewerInventoryItem* item = new LLViewerInventoryItem( item_id, - destination, + gInventory.findCategoryUUIDForType(LLFolderType::FT_TEXTURE), *perms, uuid, (LLAssetType::EType)data->mAssetInfo.mType, @@ -1011,16 +994,10 @@ void temp_upload_callback(const LLUUID& uuid, void* user_data, S32 result, LLExt LLSaleInfo::DEFAULT, 0, time_corrected()); - if (bUseSystemInventory) - { - LLLocalInventory::addItem(item); - } - else - { - item->updateServer(TRUE); - gInventory.updateItem(item); - gInventory.notifyObservers(); - } + + item->updateServer(TRUE); + gInventory.updateItem(item); + gInventory.notifyObservers(); } else { @@ -1129,40 +1106,44 @@ void upload_done_callback(const LLUUID& uuid, void* user_data, S32 result, LLExt data = NULL; } -static LLAssetID upload_new_resource_prep(const LLTransactionID& tid, - LLAssetType::EType asset_type, - LLInventoryType::EType& inventory_type, - std::string& name, - const std::string& display_name, - std::string& description) +static LLAssetID upload_new_resource_prep( + const LLTransactionID& tid, + LLAssetType::EType asset_type, + LLInventoryType::EType& inventory_type, + std::string& name, + const std::string& display_name, + std::string& description) { LLAssetID uuid = generate_asset_id_for_new_upload(tid); increase_new_upload_stats(asset_type); - assign_defaults_and_show_upload_message(asset_type, - inventory_type, - name, - display_name, - description); + assign_defaults_and_show_upload_message( + asset_type, + inventory_type, + name, + display_name, + description); return uuid; } -LLSD generate_new_resource_upload_capability_body(LLAssetType::EType asset_type, - const std::string& name, - const std::string& desc, - LLFolderType::EType destination_folder_type, - LLInventoryType::EType inv_type, - U32 next_owner_perms, - U32 group_perms, - U32 everyone_perms) +LLSD generate_new_resource_upload_capability_body( + LLAssetType::EType asset_type, + const std::string& name, + const std::string& desc, + LLFolderType::EType destination_folder_type, + LLInventoryType::EType inv_type, + U32 next_owner_perms, + U32 group_perms, + U32 everyone_perms) { LLSD body; - body["folder_id"] = gInventory.findCategoryUUIDForType(destination_folder_type == LLFolderType::FT_NONE ? - LLFolderType::assetTypeToFolderType(asset_type) : - destination_folder_type); + body["folder_id"] = gInventory.findCategoryUUIDForType( + destination_folder_type == LLFolderType::FT_NONE ? + LLFolderType::assetTypeToFolderType(asset_type) : + destination_folder_type); body["asset_type"] = LLAssetType::lookup(asset_type); body["inventory_type"] = LLInventoryType::lookup(inv_type); @@ -1175,28 +1156,36 @@ LLSD generate_new_resource_upload_capability_body(LLAssetType::EType asset_type, return body; } -bool upload_new_resource(const LLTransactionID &tid, LLAssetType::EType asset_type, - std::string name, - std::string desc, S32 compression_info, - LLFolderType::EType destination_folder_type, - LLInventoryType::EType inv_type, - U32 next_owner_perms, - U32 group_perms, - U32 everyone_perms, - const std::string& display_name, - LLAssetStorage::LLStoreAssetCallback callback, - S32 expected_upload_cost, - void *userdata, - void (*callback2)(bool, void*)) +bool upload_new_resource( + const LLTransactionID &tid, + LLAssetType::EType asset_type, + std::string name, + std::string desc, + S32 compression_info, + LLFolderType::EType destination_folder_type, + LLInventoryType::EType inv_type, + U32 next_owner_perms, + U32 group_perms, + U32 everyone_perms, + const std::string& display_name, + LLAssetStorage::LLStoreAssetCallback callback, + S32 expected_upload_cost, + void *userdata, + void (*callback2)(bool, void*)) { if(gDisconnected) { return false; } - - LLAssetID uuid = upload_new_resource_prep(tid, asset_type, inv_type, - name, display_name, desc); + LLAssetID uuid = + upload_new_resource_prep( + tid, + asset_type, + inv_type, + name, + display_name, + desc); llinfos << "*** Uploading: " << "\nType: " << LLAssetType::lookup(asset_type) << "\nUUID: " << uuid @@ -1216,6 +1205,7 @@ bool upload_new_resource(const LLTransactionID &tid, LLAssetType::EType asset_ty // { llinfos << "New Agent Inventory via capability" << llendl; + LLSD body; body["folder_id"] = gInventory.findCategoryUUIDForType((destination_folder_type == LLFolderType::FT_NONE) ? LLFolderType::assetTypeToFolderType(asset_type) : destination_folder_type); body["asset_type"] = LLAssetType::lookup(asset_type); @@ -1227,8 +1217,15 @@ bool upload_new_resource(const LLTransactionID &tid, LLAssetType::EType asset_ty body["everyone_mask"] = LLSD::Integer(everyone_perms); body["expected_upload_cost"] = LLSD::Integer(expected_upload_cost); - LLHTTPClient::post(url, body, - new LLNewAgentInventoryResponder(body, uuid, asset_type, callback2, userdata)); + LLHTTPClient::post( + url, + body, + new LLNewAgentInventoryResponder( + body, + uuid, + asset_type, + callback2, + userdata)); } else { @@ -1274,12 +1271,14 @@ bool upload_new_resource(const LLTransactionID &tid, LLAssetType::EType asset_ty { asset_callback = callback; } - gAssetStorage->storeAssetData(data->mAssetInfo.mTransactionID, data->mAssetInfo.mType, - asset_callback, - (void*)data, - temporary, - TRUE, - temporary); + gAssetStorage->storeAssetData( + data->mAssetInfo.mTransactionID, + data->mAssetInfo.mType, + asset_callback, + (void*)data, + temporary, + TRUE, + temporary); } // Return true when a call to a callback function will follow. @@ -1330,6 +1329,7 @@ void assign_defaults_and_show_upload_message(LLAssetType::EType asset_type, } LLStringUtil::stripNonprintable(name); LLStringUtil::stripNonprintable(description); + if (name.empty()) { name = "(No Name)"; @@ -1345,6 +1345,7 @@ void assign_defaults_and_show_upload_message(LLAssetType::EType asset_type, LLUploadDialog::modalUploadDialog(upload_message); } + void init_menu_file() { (new LLFileUploadImage())->registerListener(gMenuHolder, "File.UploadImage"); @@ -1358,13 +1359,13 @@ void init_menu_file() (new LLFileEnableCloseAllWindows())->registerListener(gMenuHolder, "File.EnableCloseAllWindows"); // (new LLFileMinimizeAllWindows())->registerListener(gMenuHolder, "File.MinimizeAllWindows"); + (new LLFileLocalAssetBrowser())->registerListener(gMenuHolder, "File.LocalAssetBrowser"); // (new LLFileSavePreview())->registerListener(gMenuHolder, "File.SavePreview"); (new LLFileSavePreviewPNG())->registerListener(gMenuHolder, "File.SavePreviewPNG"); (new LLFileTakeSnapshot())->registerListener(gMenuHolder, "File.TakeSnapshot"); (new LLFileTakeSnapshotToDisk())->registerListener(gMenuHolder, "File.TakeSnapshotToDisk"); (new LLFileQuit())->registerListener(gMenuHolder, "File.Quit"); - (new LLFileLogOut())->registerListener(gMenuHolder, "File.LogOut"); (new LLFileEnableUpload())->registerListener(gMenuHolder, "File.EnableUpload"); (new LLFileEnableUploadModel())->registerListener(gMenuHolder, "File.EnableUploadModel"); diff --git a/indra/newview/llviewermenufile.h b/indra/newview/llviewermenufile.h index 426a5a4bf..65ff1a425 100644 --- a/indra/newview/llviewermenufile.h +++ b/indra/newview/llviewermenufile.h @@ -48,8 +48,6 @@ class NewResourceItemCallback : public LLInventoryCallback class LLTransactionID; -extern std::deque gUploadQueue; - void init_menu_file(); void upload_new_resource(const std::string& src_filename, diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index 1044f1f59..843c9ad81 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -2830,14 +2830,17 @@ void LLVOAvatar::idleUpdateNameTag(const LLVector3& root_pos_last) static const LLCachedControl NAME_SHOW_TIME("RenderNameShowTime",10); // seconds static const LLCachedControl FADE_DURATION("RenderNameFadeDuration",1); // seconds static const LLCachedControl use_chat_bubbles("UseChatBubbles",false); + static const LLCachedControl use_typing_bubbles("UseTypingBubbles"); static const LLCachedControl render_name_hide_self("RenderNameHideSelf",false); static const LLCachedControl allow_nameplate_override ("CCSAllowNameplateOverride", true); -// [RLVa:KB] - Checked: 2009-07-08 (RLVa-1.0.0e) | Added: RLVa-0.2.0b +// [RLVa:KB] - Checked: 2010-04-04 (RLVa-1.2.2a) | Added: RLVa-0.2.0b bool fRlvShowNames = gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES); // [/RLVa:KB] BOOL visible_avatar = isVisible() || mNeedsAnimUpdate; BOOL visible_chat = use_chat_bubbles && (mChats.size() || mTyping); + bool visible_typing = use_typing_bubbles && mTyping; BOOL render_name = visible_chat || + visible_typing || (visible_avatar && // [RLVa:KB] - Checked: 2010-04-04 (RLVa-1.2.2a) | Added: RLVa-1.0.0h ( (!fRlvShowNames) || (RlvSettings::getShowNameTags()) ) && @@ -2871,6 +2874,11 @@ void LLVOAvatar::idleUpdateNameTag(const LLVector3& root_pos_last) mVisibleChat = visible_chat; new_name = TRUE; } + if (visible_typing != mVisibleTyping) + { + mVisibleTyping = visible_typing; + new_name = true; + } // [RLVa:KB] - Checked: 2010-04-04 (RLVa-1.2.2a) | Added: RLVa-0.2.0b if (fRlvShowNames) @@ -2895,7 +2903,7 @@ void LLVOAvatar::idleUpdateNameTag(const LLVector3& root_pos_last) if (mAppAngle > 5.f) { const F32 START_FADE_TIME = NAME_SHOW_TIME - FADE_DURATION; - if (!visible_chat && sRenderName == RENDER_NAME_FADE && time_visible > START_FADE_TIME) + if (!visible_chat && !visible_typing && sRenderName == RENDER_NAME_FADE && time_visible > START_FADE_TIME) { alpha = 1.f - (time_visible - START_FADE_TIME) / FADE_DURATION; } @@ -3271,7 +3279,7 @@ void LLVOAvatar::idleUpdateNameTagText(BOOL new_name) new_name = TRUE; } - if (mVisibleChat) + if (mVisibleChat || mVisibleTyping) { mNameText->setFont(LLFontGL::getFontSansSerif()); mNameText->setTextAlignment(LLHUDNameTag::ALIGN_TEXT_LEFT); @@ -3281,6 +3289,8 @@ void LLVOAvatar::idleUpdateNameTagText(BOOL new_name) mNameText->clearString(); LLColor4 new_chat = gColors.getColor( "AvatarNameColor" ); + if (mVisibleChat) + { LLColor4 normal_chat = lerp(new_chat, LLColor4(0.8f, 0.8f, 0.8f, 1.f), 0.7f); LLColor4 old_chat = lerp(normal_chat, LLColor4(0.6f, 0.6f, 0.6f, 1.f), 0.7f); if (mTyping && mChats.size() >= MAX_BUBBLE_CHAT_UTTERANCES) @@ -3320,6 +3330,7 @@ void LLVOAvatar::idleUpdateNameTagText(BOOL new_name) mNameText->addLine(chat_iter->mText, old_chat, style); } } + } mNameText->setVisibleOffScreen(TRUE); if (mTyping) @@ -3351,7 +3362,7 @@ void LLVOAvatar::idleUpdateNameTagText(BOOL new_name) void LLVOAvatar::addNameTagLine(const std::string& line, const LLColor4& color, S32 style, const LLFontGL* font) { llassert(mNameText); - if (mVisibleChat) + if (mVisibleChat || mVisibleTyping) { mNameText->addLabel(line); } diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h index b4f8f12f0..90d9bcd62 100644 --- a/indra/newview/llvoavatar.h +++ b/indra/newview/llvoavatar.h @@ -814,6 +814,7 @@ public: void stopTyping() { mTyping = FALSE; mIdleTimer.reset();} private: BOOL mVisibleChat; + bool mVisibleTyping; //-------------------------------------------------------------------- // Lip synch morphs diff --git a/indra/newview/skins/default/xui/en-us/menu_viewer.xml b/indra/newview/skins/default/xui/en-us/menu_viewer.xml index 4cf1dd66d..988513a4b 100644 --- a/indra/newview/skins/default/xui/en-us/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en-us/menu_viewer.xml @@ -37,6 +37,9 @@ + + + @@ -44,6 +47,9 @@ + + + diff --git a/indra/newview/skins/default/xui/en-us/panel_preferences_ascent_chat.xml b/indra/newview/skins/default/xui/en-us/panel_preferences_ascent_chat.xml index d2bb0c5a5..b1910f032 100644 --- a/indra/newview/skins/default/xui/en-us/panel_preferences_ascent_chat.xml +++ b/indra/newview/skins/default/xui/en-us/panel_preferences_ascent_chat.xml @@ -24,6 +24,7 @@ + Show links on chatting object names in chat history for: diff --git a/indra/newview/skins/default/xui/fr/menu_viewer.xml b/indra/newview/skins/default/xui/fr/menu_viewer.xml index c8d33a2e4..21e7d6395 100644 --- a/indra/newview/skins/default/xui/fr/menu_viewer.xml +++ b/indra/newview/skins/default/xui/fr/menu_viewer.xml @@ -8,6 +8,7 @@ + @@ -15,6 +16,7 @@ + @@ -240,4 +242,4 @@ - \ No newline at end of file + diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_ascent_chat.xml b/indra/newview/skins/default/xui/fr/panel_preferences_ascent_chat.xml index c9fe2c813..9ef71a46c 100644 --- a/indra/newview/skins/default/xui/fr/panel_preferences_ascent_chat.xml +++ b/indra/newview/skins/default/xui/fr/panel_preferences_ascent_chat.xml @@ -11,6 +11,7 @@ + Active un lien qui montre le nom du propriétaire dans l'historique du chat pour : Aucun objet diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_ascent_system.xml b/indra/newview/skins/default/xui/fr/panel_preferences_ascent_system.xml index 506c5b591..a63cf082c 100644 --- a/indra/newview/skins/default/xui/fr/panel_preferences_ascent_system.xml +++ b/indra/newview/skins/default/xui/fr/panel_preferences_ascent_system.xml @@ -71,6 +71,7 @@ + diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_network.xml b/indra/newview/skins/default/xui/fr/panel_preferences_network.xml index 4fa83170c..fd167c580 100644 --- a/indra/newview/skins/default/xui/fr/panel_preferences_network.xml +++ b/indra/newview/skins/default/xui/fr/panel_preferences_network.xml @@ -3,37 +3,31 @@ Bande passante max: kbps (kilobits par seconde) Bande passante de la texture: - kbps (kilobits par seconde) - - kbps (kilobits par seconde) + + kbps (kilobits par seconde) Utiliser HTTP pour: - Taille du cache: Mo -