summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview')
-rw-r--r--indra/newview/app_settings/settings.xml11
-rw-r--r--indra/newview/llappviewer.cpp4
-rw-r--r--indra/newview/llbottomtray.cpp2
-rw-r--r--indra/newview/llchathistory.cpp37
-rw-r--r--indra/newview/llchathistory.h1
-rw-r--r--indra/newview/llchatitemscontainerctrl.cpp2
-rw-r--r--indra/newview/llimview.cpp18
-rw-r--r--indra/newview/llimview.h3
-rw-r--r--indra/newview/lllocationinputctrl.cpp2
-rw-r--r--indra/newview/llnearbychat.cpp29
-rw-r--r--indra/newview/llnearbychathandler.cpp18
-rw-r--r--indra/newview/llpanelgroupnotices.cpp3
-rw-r--r--indra/newview/llpanelimcontrolpanel.cpp9
-rw-r--r--indra/newview/llpanelimcontrolpanel.h5
-rw-r--r--indra/newview/llpanellandmarks.cpp17
-rw-r--r--indra/newview/llpanelpeoplemenus.cpp4
-rw-r--r--indra/newview/llpanelplaces.cpp18
-rw-r--r--indra/newview/llpanelplacestab.h8
-rw-r--r--indra/newview/llpanelprimmediacontrols.cpp112
-rw-r--r--indra/newview/llpanelprimmediacontrols.h7
-rw-r--r--indra/newview/llscriptfloater.cpp52
-rw-r--r--indra/newview/llscriptfloater.h11
-rw-r--r--indra/newview/llteleporthistory.cpp5
-rw-r--r--indra/newview/lltexturefetch.cpp8
-rw-r--r--indra/newview/llviewerfloaterreg.cpp1
-rw-r--r--indra/newview/llviewerkeyboard.cpp3
-rw-r--r--indra/newview/llviewermedia.cpp82
-rw-r--r--indra/newview/llviewermedia.h7
-rw-r--r--indra/newview/llviewermessage.cpp11
-rw-r--r--indra/newview/llviewertexturelist.cpp4
-rw-r--r--indra/newview/llviewerwindow.cpp4
-rw-r--r--indra/newview/llvoicechannel.cpp28
-rw-r--r--indra/newview/llvoicechannel.h1
-rw-r--r--indra/newview/skins/default/xui/en/floater_aaa.xml1
-rw-r--r--indra/newview/skins/default/xui/en/menu_people_nearby.xml1
-rw-r--r--indra/newview/skins/default/xui/en/menu_viewer.xml11
-rw-r--r--indra/newview/skins/default/xui/en/panel_my_profile.xml2
-rw-r--r--indra/newview/skins/default/xui/en/panel_picks.xml5
-rw-r--r--indra/newview/skins/default/xui/en/panel_preferences_privacy.xml11
-rw-r--r--indra/newview/skins/default/xui/en/panel_prim_media_controls.xml175
-rw-r--r--indra/newview/skins/default/xui/en/panel_profile.xml8
41 files changed, 391 insertions, 350 deletions
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index fa4dfe767b..6252bd002e 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -386,17 +386,6 @@
<key>Value</key>
<integer>0</integer>
</map>
- <key>AutoPlayMedia</key>
- <map>
- <key>Comment</key>
- <string>Allow media objects to automatically play or navigate?</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>Boolean</string>
- <key>Value</key>
- <integer>1</integer>
- </map>
<key>AutoSnapshot</key>
<map>
<key>Comment</key>
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index eb08707b61..ddc818172d 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -899,6 +899,8 @@ bool LLAppViewer::init()
loadEventHostModule(gSavedSettings.getS32("QAModeEventHostPort"));
}
+ LLViewerMedia::initClass();
+
return true;
}
@@ -1666,7 +1668,7 @@ bool LLAppViewer::initThreads()
// Image decoding
LLAppViewer::sImageDecodeThread = new LLImageDecodeThread(enable_threads && true);
LLAppViewer::sTextureCache = new LLTextureCache(enable_threads && true);
- LLAppViewer::sTextureFetch = new LLTextureFetch(LLAppViewer::getTextureCache(), sImageDecodeThread, enable_threads && true);
+ LLAppViewer::sTextureFetch = new LLTextureFetch(LLAppViewer::getTextureCache(), sImageDecodeThread, enable_threads && false);
LLImage::initClass();
if (LLFastTimer::sLog || LLFastTimer::sMetricLog)
diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp
index 96c06b1665..6d3d61d4fe 100644
--- a/indra/newview/llbottomtray.cpp
+++ b/indra/newview/llbottomtray.cpp
@@ -391,7 +391,7 @@ bool LLBottomTray::onContextMenuItemEnabled(const LLSD& userdata)
}
else if (item == "can_select_all")
{
- return edit_box->canSelectAll();
+ return edit_box->canSelectAll() && (edit_box->getLength()>0);
}
return true;
}
diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp
index 5e17770314..96b5ae5908 100644
--- a/indra/newview/llchathistory.cpp
+++ b/indra/newview/llchathistory.cpp
@@ -43,6 +43,7 @@
#include "lltrans.h"
#include "llfloaterreg.h"
#include "llmutelist.h"
+#include "llstylemap.h"
#include "llsidetray.h"//for blocked objects panel
@@ -355,6 +356,7 @@ void LLChatHistory::clear()
{
mLastFromName.clear();
LLTextEditor::clear();
+ mLastFromID = LLUUID::null;
}
void LLChatHistory::appendMessage(const LLChat& chat, const bool use_plain_text_chat_history, const LLStyle::Params& input_append_params)
@@ -371,13 +373,25 @@ void LLChatHistory::appendMessage(const LLChat& chat, const bool use_plain_text_
style_params.font.size(font_size);
style_params.font.style(input_append_params.font.style);
- std::string header_text = "[" + chat.mTimeStr + "] ";
- if (utf8str_trim(chat.mFromName).size() != 0 && chat.mFromName != SYSTEM_FROM)
- header_text += chat.mFromName + ": ";
-
if (use_plain_text_chat_history)
{
- appendText(header_text, getText().size() != 0, style_params);
+ appendText("[" + chat.mTimeStr + "] ", getText().size() != 0, style_params);
+
+ if (utf8str_trim(chat.mFromName).size() != 0)
+ {
+ // Don't hotlink any messages from the system (e.g. "Second Life:"), so just add those in plain text.
+ if ( chat.mFromName != SYSTEM_FROM && chat.mFromID.notNull() )
+ {
+ LLStyle::Params link_params(style_params);
+ link_params.fillFrom(LLStyleMap::instance().lookupAgent(chat.mFromID));
+ // Convert the name to a hotlink and add to message.
+ appendText(chat.mFromName + ": ", false, link_params);
+ }
+ else
+ {
+ appendText(chat.mFromName + ": ", false, style_params);
+ }
+ }
}
else
{
@@ -389,9 +403,11 @@ void LLChatHistory::appendMessage(const LLChat& chat, const bool use_plain_text_
LLDate new_message_time = LLDate::now();
- if (mLastFromName == chat.mFromName &&
- mLastMessageTime.notNull() &&
- (new_message_time.secondsSinceEpoch() - mLastMessageTime.secondsSinceEpoch()) < 60.0 )
+ if (mLastFromName == chat.mFromName
+ && mLastFromID == chat.mFromID
+ && mLastMessageTime.notNull()
+ && (new_message_time.secondsSinceEpoch() - mLastMessageTime.secondsSinceEpoch()) < 60.0
+ )
{
view = getSeparator();
p.top_pad = mTopSeparatorPad;
@@ -417,8 +433,13 @@ void LLChatHistory::appendMessage(const LLChat& chat, const bool use_plain_text_
view->reshape(target_rect.getWidth(), view->getRect().getHeight());
view->setOrigin(target_rect.mLeft, view->getRect().mBottom);
+ std::string header_text = "[" + chat.mTimeStr + "] ";
+ if (utf8str_trim(chat.mFromName).size() != 0 && chat.mFromName != SYSTEM_FROM)
+ header_text += chat.mFromName + ": ";
+
appendWidget(p, header_text, false);
mLastFromName = chat.mFromName;
+ mLastFromID = chat.mFromID;
mLastMessageTime = new_message_time;
}
//Handle IRC styled /me messages.
diff --git a/indra/newview/llchathistory.h b/indra/newview/llchathistory.h
index d2cfa53d8b..8ca7dd1d58 100644
--- a/indra/newview/llchathistory.h
+++ b/indra/newview/llchathistory.h
@@ -114,6 +114,7 @@ class LLChatHistory : public LLTextEditor
private:
std::string mLastFromName;
+ LLUUID mLastFromID;
LLDate mLastMessageTime;
std::string mMessageHeaderFilename;
std::string mMessageSeparatorFilename;
diff --git a/indra/newview/llchatitemscontainerctrl.cpp b/indra/newview/llchatitemscontainerctrl.cpp
index efdaff3f6a..92df281307 100644
--- a/indra/newview/llchatitemscontainerctrl.cpp
+++ b/indra/newview/llchatitemscontainerctrl.cpp
@@ -122,7 +122,6 @@ void LLNearbyChatToastPanel::addMessage(LLSD& notification)
if(notification["chat_style"].asInteger()== CHAT_STYLE_IRC)
{
- messageText = messageText.substr(3);
style_params.font.style = "ITALIC";
}
else if( chat_type == CHAT_TYPE_SHOUT)
@@ -208,7 +207,6 @@ void LLNearbyChatToastPanel::init(LLSD& notification)
if(notification["chat_style"].asInteger()== CHAT_STYLE_IRC)
{
- messageText = messageText.substr(3);
style_params.font.style = "ITALIC";
}
else if( chat_type == CHAT_TYPE_SHOUT)
diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index 5481ca97cd..d3058e67af 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -165,7 +165,7 @@ LLIMModel::LLIMSession::LLIMSession(const LLUUID& session_id, const std::string&
if(mVoiceChannel)
{
- mVoiceChannel->setStateChangedCallback(boost::bind(&LLIMSession::onVoiceChannelStateChanged, this, _1, _2));
+ mVoiceChannelStateChangeConnection = mVoiceChannel->setStateChangedCallback(boost::bind(&LLIMSession::onVoiceChannelStateChanged, this, _1, _2));
}
mSpeakers = new LLIMSpeakerMgr(mVoiceChannel);
@@ -270,9 +270,11 @@ LLIMModel::LLIMSession::~LLIMSession()
}
}
+ mVoiceChannelStateChangeConnection.disconnect();
+
// HAVE to do this here -- if it happens in the LLVoiceChannel destructor it will call the wrong version (since the object's partially deconstructed at that point).
mVoiceChannel->deactivate();
-
+
delete mVoiceChannel;
mVoiceChannel = NULL;
}
@@ -1392,13 +1394,13 @@ void LLIncomingCallDialog::processCallResponse(S32 response)
}
else
{
- LLUUID session_id = gIMMgr->addSession(
+ LLUUID new_session_id = gIMMgr->addSession(
mPayload["session_name"].asString(),
type,
session_id);
- if (session_id != LLUUID::null)
+ if (new_session_id != LLUUID::null)
{
- LLIMFloater::show(session_id);
+ LLIMFloater::show(new_session_id);
}
std::string url = gAgent.getRegion()->getCapability(
@@ -1486,13 +1488,13 @@ bool inviteUserResponse(const LLSD& notification, const LLSD& response)
}
else
{
- LLUUID session_id = gIMMgr->addSession(
+ LLUUID new_session_id = gIMMgr->addSession(
payload["session_name"].asString(),
type,
session_id);
- if (session_id != LLUUID::null)
+ if (new_session_id != LLUUID::null)
{
- LLIMFloater::show(session_id);
+ LLIMFloater::show(new_session_id);
}
std::string url = gAgent.getRegion()->getCapability(
diff --git a/indra/newview/llimview.h b/indra/newview/llimview.h
index 66f92c83a5..8a0f57deb0 100644
--- a/indra/newview/llimview.h
+++ b/indra/newview/llimview.h
@@ -72,6 +72,9 @@ public:
LLUUID mOtherParticipantID;
std::vector<LLUUID> mInitialTargetIDs;
+ // connection to voice channel state change signal
+ boost::signals2::connection mVoiceChannelStateChangeConnection;
+
//does NOT include system messages
S32 mNumUnread;
diff --git a/indra/newview/lllocationinputctrl.cpp b/indra/newview/lllocationinputctrl.cpp
index d97f1d4d18..09c215e660 100644
--- a/indra/newview/lllocationinputctrl.cpp
+++ b/indra/newview/lllocationinputctrl.cpp
@@ -896,7 +896,7 @@ bool LLLocationInputCtrl::onLocationContextMenuItemEnabled(const LLSD& userdata)
}
else if (item == "can_select_all")
{
- return mTextEntry->canSelectAll();
+ return mTextEntry->canSelectAll() && (mTextEntry->getLength() > 0);
}
else if(item == "show_coordinates")
{
diff --git a/indra/newview/llnearbychat.cpp b/indra/newview/llnearbychat.cpp
index ee3be0a5e3..18e5169930 100644
--- a/indra/newview/llnearbychat.cpp
+++ b/indra/newview/llnearbychat.cpp
@@ -54,10 +54,11 @@
#include "llstylemap.h"
#include "lldraghandle.h"
-#include "lltrans.h"
+
#include "llbottomtray.h"
#include "llnearbychatbar.h"
#include "llfloaterreg.h"
+#include "lltrans.h"
static const S32 RESIZE_BAR_THICKNESS = 3;
@@ -146,6 +147,7 @@ std::string appendTime()
return timeStr;
}
+
void LLNearbyChat::addMessage(const LLChat& chat,bool archive)
{
if (chat.mChatType == CHAT_TYPE_DEBUG_MSG)
@@ -167,18 +169,15 @@ void LLNearbyChat::addMessage(const LLChat& chat,bool archive)
}
}
+ LLChat& tmp_chat = const_cast<LLChat&>(chat);
+
+ if(tmp_chat.mTimeStr.empty())
+ tmp_chat.mTimeStr = appendTime();
+
bool use_plain_text_chat_history = gSavedSettings.getBOOL("PlainTextChatHistory");
if (!chat.mMuted)
{
- std::string message = chat.mText;
-
-
- LLChat& tmp_chat = const_cast<LLChat&>(chat);
-
- if(tmp_chat.mTimeStr.empty())
- tmp_chat.mTimeStr = appendTime();
-
if (chat.mChatStyle == CHAT_STYLE_IRC)
{
LLColor4 txt_color = LLUIColorTable::instance().getColor("White");
@@ -191,17 +190,9 @@ void LLNearbyChat::addMessage(const LLChat& chat,bool archive)
append_style_params.readonly_color(txt_color);
append_style_params.font.name(font_name);
append_style_params.font.size(font_size);
- if (chat.mFromName.size() > 0)
- {
- append_style_params.font.style = "ITALIC";
- LLChat add_chat=chat;
- add_chat.mText = chat.mFromName + " ";
- mChatHistory->appendMessage(add_chat, use_plain_text_chat_history, append_style_params);
- }
-
- message = message.substr(3);
append_style_params.font.style = "ITALIC";
- mChatHistory->appendText(message, FALSE, append_style_params);
+
+ mChatHistory->appendMessage(chat, use_plain_text_chat_history, append_style_params);
}
else
{
diff --git a/indra/newview/llnearbychathandler.cpp b/indra/newview/llnearbychathandler.cpp
index b0b6db682c..169560f688 100644
--- a/indra/newview/llnearbychathandler.cpp
+++ b/indra/newview/llnearbychathandler.cpp
@@ -318,6 +318,8 @@ void LLNearbyChatHandler::initChannel()
mChannel->init(channel_right_bound - channel_width, channel_right_bound);
}
+
+
void LLNearbyChatHandler::processChat(const LLChat& chat_msg)
{
if(chat_msg.mMuted == TRUE)
@@ -327,6 +329,22 @@ void LLNearbyChatHandler::processChat(const LLChat& chat_msg)
if(chat_msg.mText.empty())
return;//don't process empty messages
+
+ LLChat& tmp_chat = const_cast<LLChat&>(chat_msg);
+
+ if (tmp_chat.mChatStyle == CHAT_STYLE_IRC)
+ {
+ if(!tmp_chat.mFromName.empty())
+ tmp_chat.mText = tmp_chat.mFromName + " " + tmp_chat.mText.substr(3);
+ else
+ tmp_chat.mText = tmp_chat.mText.substr(3);
+ }
+
+ {
+ //sometimes its usefull to have no name at all...
+ //if(tmp_chat.mFromName.empty() && tmp_chat.mFromID!= LLUUID::null)
+ // tmp_chat.mFromName = tmp_chat.mFromID.asString();
+ }
LLNearbyChat* nearby_chat = LLFloaterReg::getTypedInstance<LLNearbyChat>("nearby_chat", LLSD());
nearby_chat->addMessage(chat_msg);
diff --git a/indra/newview/llpanelgroupnotices.cpp b/indra/newview/llpanelgroupnotices.cpp
index 5834c50fbb..6210973dae 100644
--- a/indra/newview/llpanelgroupnotices.cpp
+++ b/indra/newview/llpanelgroupnotices.cpp
@@ -304,6 +304,9 @@ BOOL LLPanelGroupNotices::postBuild()
void LLPanelGroupNotices::activate()
{
+ if(mNoticesList)
+ mNoticesList->deleteAllItems();
+
BOOL can_send = gAgent.hasPowerInGroup(mGroupID,GP_NOTICES_SEND);
BOOL can_receive = gAgent.hasPowerInGroup(mGroupID,GP_NOTICES_RECEIVE);
diff --git a/indra/newview/llpanelimcontrolpanel.cpp b/indra/newview/llpanelimcontrolpanel.cpp
index 405c95fc22..8c19865550 100644
--- a/indra/newview/llpanelimcontrolpanel.cpp
+++ b/indra/newview/llpanelimcontrolpanel.cpp
@@ -71,6 +71,11 @@ void LLPanelChatControlPanel::onVoiceChannelStateChanged(const LLVoiceChannel::E
childSetVisible("call_btn", ! is_call_started);
}
+LLPanelChatControlPanel::~LLPanelChatControlPanel()
+{
+ mVoiceChannelStateChangeConnection.disconnect();
+}
+
BOOL LLPanelChatControlPanel::postBuild()
{
childSetAction("call_btn", boost::bind(&LLPanelChatControlPanel::onCallButtonClicked, this));
@@ -113,7 +118,9 @@ void LLPanelChatControlPanel::setSessionId(const LLUUID& session_id)
mSessionId = session_id;
LLVoiceChannel* voice_channel = LLIMModel::getInstance()->getVoiceChannel(mSessionId);
if(voice_channel)
- voice_channel->setStateChangedCallback(boost::bind(&LLPanelChatControlPanel::onVoiceChannelStateChanged, this, _1, _2));
+ {
+ mVoiceChannelStateChangeConnection = voice_channel->setStateChangedCallback(boost::bind(&LLPanelChatControlPanel::onVoiceChannelStateChanged, this, _1, _2));
+ }
}
LLPanelIMControlPanel::LLPanelIMControlPanel()
diff --git a/indra/newview/llpanelimcontrolpanel.h b/indra/newview/llpanelimcontrolpanel.h
index a590232a0b..871779b273 100644
--- a/indra/newview/llpanelimcontrolpanel.h
+++ b/indra/newview/llpanelimcontrolpanel.h
@@ -47,7 +47,7 @@ public:
LLPanelChatControlPanel() :
mSessionId(LLUUID()),
mInitialized(false) {};
- ~LLPanelChatControlPanel() {};
+ ~LLPanelChatControlPanel();
virtual BOOL postBuild();
virtual void draw();
@@ -64,6 +64,9 @@ public:
private:
LLUUID mSessionId;
bool mInitialized;
+
+ // connection to voice channel state change signal
+ boost::signals2::connection mVoiceChannelStateChangeConnection;
};
diff --git a/indra/newview/llpanellandmarks.cpp b/indra/newview/llpanellandmarks.cpp
index 4ce6d14faa..d731da0ec7 100644
--- a/indra/newview/llpanellandmarks.cpp
+++ b/indra/newview/llpanellandmarks.cpp
@@ -122,8 +122,7 @@ void LLLandmarksPanel::onSearchEdit(const std::string& string)
for (accordion_tabs_t::const_iterator iter = mAccordionTabs.begin(); iter != mAccordionTabs.end(); ++iter)
{
LLAccordionCtrlTab* tab = *iter;
- if (tab && !tab->getVisible())
- tab->setVisible(TRUE);
+ tab->setVisible(TRUE);
// expand accordion to see matched items in each one. See EXT-2014.
tab->changeOpenClose(false);
@@ -132,7 +131,9 @@ void LLLandmarksPanel::onSearchEdit(const std::string& string)
if (NULL == inventory_list) continue;
if (inventory_list->getFilter())
+ {
filter_list(inventory_list, string);
+ }
}
if (sFilterSubString != string)
@@ -333,8 +334,12 @@ void LLLandmarksPanel::initLandmarksInventoryPanel()
initLandmarksPanel(mLandmarksInventoryPanel);
+ // Check if mLandmarksInventoryPanel is properly initialized and has a Filter created.
+ // In case of a dummy widget getFilter() will return NULL.
if (mLandmarksInventoryPanel->getFilter())
+ {
mLandmarksInventoryPanel->setShowFolderState(LLInventoryFilter::SHOW_ALL_FOLDERS);
+ }
// subscribe to have auto-rename functionality while creating New Folder
mLandmarksInventoryPanel->setSelectCallback(boost::bind(&LLInventoryPanel::onSelectionChange, mLandmarksInventoryPanel, _1, _2));
@@ -362,6 +367,8 @@ void LLLandmarksPanel::initLibraryInventoryPanel()
void LLLandmarksPanel::initLandmarksPanel(LLInventorySubTreePanel* inventory_list)
{
+ // In case of a dummy widget further we have no Folder View widget and no Filter,
+ // so further initialization leads to crash.
if (!inventory_list->getFilter())
return;
@@ -388,8 +395,6 @@ void LLLandmarksPanel::initLandmarksPanel(LLInventorySubTreePanel* inventory_lis
void LLLandmarksPanel::initAccordion(const std::string& accordion_tab_name, LLInventorySubTreePanel* inventory_list)
{
LLAccordionCtrlTab* accordion_tab = getChild<LLAccordionCtrlTab>(accordion_tab_name);
- if (!accordion_tab)
- return;
mAccordionTabs.push_back(accordion_tab);
accordion_tab->setDropDownStateChangedCallback(
@@ -744,8 +749,8 @@ void LLLandmarksPanel::updateFilteredAccordions()
for (accordion_tabs_t::const_iterator iter = mAccordionTabs.begin(); iter != mAccordionTabs.end(); ++iter)
{
accordion_tab = *iter;
- if (accordion_tab && !accordion_tab->getVisible())
- accordion_tab->setVisible(TRUE);
+
+ accordion_tab->setVisible(TRUE);
inventory_list = dynamic_cast<LLInventorySubTreePanel*> (accordion_tab->getAccordionView());
if (NULL == inventory_list) continue;
diff --git a/indra/newview/llpanelpeoplemenus.cpp b/indra/newview/llpanelpeoplemenus.cpp
index 7dea5eaf67..57f3d86d53 100644
--- a/indra/newview/llpanelpeoplemenus.cpp
+++ b/indra/newview/llpanelpeoplemenus.cpp
@@ -97,7 +97,7 @@ LLContextMenu* NearbyMenu::createMenu()
registrar.add("Avatar.Profile", boost::bind(&LLAvatarActions::showProfile, id));
registrar.add("Avatar.AddFriend", boost::bind(&LLAvatarActions::requestFriendshipDialog, id));
registrar.add("Avatar.IM", boost::bind(&LLAvatarActions::startIM, id));
- registrar.add("Avatar.Call", boost::bind(&LLAvatarActions::startIM, id)); // *TODO: unimplemented
+ registrar.add("Avatar.Call", boost::bind(&LLAvatarActions::startCall, id));
registrar.add("Avatar.OfferTeleport", boost::bind(&NearbyMenu::offerTeleport, this));
registrar.add("Avatar.ShowOnMap", boost::bind(&LLAvatarActions::startIM, id)); // *TODO: unimplemented
registrar.add("Avatar.Share", boost::bind(&LLAvatarActions::startIM, id)); // *TODO: unimplemented
@@ -117,7 +117,7 @@ LLContextMenu* NearbyMenu::createMenu()
// registrar.add("Avatar.AddFriend", boost::bind(&LLAvatarActions::requestFriendshipDialog, mUUIDs)); // *TODO: unimplemented
registrar.add("Avatar.IM", boost::bind(&LLAvatarActions::startConference, mUUIDs));
- // registrar.add("Avatar.Call", boost::bind(&LLAvatarActions::startConference, mUUIDs)); // *TODO: unimplemented
+ registrar.add("Avatar.Call", boost::bind(&LLAvatarActions::startAdhocCall, mUUIDs));
// registrar.add("Avatar.Share", boost::bind(&LLAvatarActions::startIM, mUUIDs)); // *TODO: unimplemented
// registrar.add("Avatar.Pay", boost::bind(&LLAvatarActions::pay, mUUIDs)); // *TODO: unimplemented
enable_registrar.add("Avatar.EnableItem", boost::bind(&NearbyMenu::enableContextMenuItem, this, _2));
diff --git a/indra/newview/llpanelplaces.cpp b/indra/newview/llpanelplaces.cpp
index cd4bcb6c0a..f7f3c5830d 100644
--- a/indra/newview/llpanelplaces.cpp
+++ b/indra/newview/llpanelplaces.cpp
@@ -261,6 +261,10 @@ void LLPanelPlaces::onOpen(const LLSD& key)
}
mLandmarkInfo->displayParcelInfo(LLUUID(), mPosGlobal);
+
+ // Disable Save button because there is no item to save yet.
+ // The button will be enabled in onLandmarkLoaded callback.
+ mSaveBtn->setEnabled(FALSE);
}
else if (mPlaceInfoType == LANDMARK_INFO_TYPE)
{
@@ -380,11 +384,16 @@ void LLPanelPlaces::onLandmarkLoaded(LLLandmark* landmark)
landmark->getRegionID(region_id);
landmark->getGlobalPos(mPosGlobal);
mLandmarkInfo->displayParcelInfo(region_id, mPosGlobal);
+
+ mSaveBtn->setEnabled(TRUE);
}
void LLPanelPlaces::onFilterEdit(const std::string& search_string, bool force_filter)
{
- if (force_filter || LLPanelPlacesTab::sFilterSubString != search_string)
+ if (!mActivePanel)
+ return;
+
+ if (force_filter || mActivePanel->getFilterSubString() != search_string)
{
std::string string = search_string;
@@ -392,8 +401,7 @@ void LLPanelPlaces::onFilterEdit(const std::string& search_string, bool force_fi
LLStringUtil::toUpper(string);
LLStringUtil::trimHead(string);
- if (mActivePanel)
- mActivePanel->onSearchEdit(string);
+ mActivePanel->onSearchEdit(string);
}
}
@@ -403,7 +411,7 @@ void LLPanelPlaces::onTabSelected()
if (!mActivePanel)
return;
- onFilterEdit(LLPanelPlacesTab::sFilterSubString, true);
+ onFilterEdit(mActivePanel->getFilterSubString(), true);
mActivePanel->updateVerbs();
}
@@ -814,7 +822,7 @@ void LLPanelPlaces::changedInventory(U32 mask)
// Filter applied to show all items.
if (mActivePanel)
- mActivePanel->onSearchEdit(LLPanelPlacesTab::sFilterSubString);
+ mActivePanel->onSearchEdit(mActivePanel->getFilterSubString());
// we don't need to monitor inventory changes anymore,
// so remove the observer
diff --git a/indra/newview/llpanelplacestab.h b/indra/newview/llpanelplacestab.h
index b4d839452e..ce77a42259 100644
--- a/indra/newview/llpanelplacestab.h
+++ b/indra/newview/llpanelplacestab.h
@@ -56,13 +56,15 @@ public:
const LLUUID& snapshot_id,
bool teleport);
-public:
- // Search string for filtering landmarks and teleport history locations
- static std::string sFilterSubString;
+ const std::string& getFilterSubString() { return sFilterSubString; }
+ void setFilterSubString(const std::string& string) { sFilterSubString = string; }
protected:
LLButton* mTeleportBtn;
LLButton* mShowOnMapBtn;
+
+ // Search string for filtering landmarks and teleport history locations
+ static std::string sFilterSubString;
};
#endif //LL_LLPANELPLACESTAB_H
diff --git a/indra/newview/llpanelprimmediacontrols.cpp b/indra/newview/llpanelprimmediacontrols.cpp
index e86123d565..aa2b7d4554 100644
--- a/indra/newview/llpanelprimmediacontrols.cpp
+++ b/indra/newview/llpanelprimmediacontrols.cpp
@@ -54,6 +54,7 @@
#include "llpanelprimmediacontrols.h"
#include "llpluginclassmedia.h"
#include "llprogressbar.h"
+#include "llsliderctrl.h"
#include "llstring.h"
#include "llviewercontrol.h"
#include "llviewerparcelmgr.h"
@@ -63,6 +64,8 @@
#include "llweb.h"
#include "llwindow.h"
+#include "llfloatertools.h" // to enable hide if build tools are up
+
glh::matrix4f glh_get_current_modelview();
glh::matrix4f glh_get_current_projection();
@@ -88,7 +91,8 @@ LLPanelPrimMediaControls::LLPanelPrimMediaControls() :
mTargetImplID(LLUUID::null),
mTargetObjectNormal(LLVector3::zero),
mZoomObjectID(LLUUID::null),
- mZoomObjectFace(0)
+ mZoomObjectFace(0),
+ mVolumeSliderVisible(false)
{
mCommitCallbackRegistrar.add("MediaCtrl.Close", boost::bind(&LLPanelPrimMediaControls::onClickClose, this));
mCommitCallbackRegistrar.add("MediaCtrl.Back", boost::bind(&LLPanelPrimMediaControls::onClickBack, this));
@@ -105,7 +109,9 @@ LLPanelPrimMediaControls::LLPanelPrimMediaControls() :
mCommitCallbackRegistrar.add("MediaCtrl.JumpProgress", boost::bind(&LLPanelPrimMediaControls::onCommitSlider, this));
mCommitCallbackRegistrar.add("MediaCtrl.CommitVolumeUp", boost::bind(&LLPanelPrimMediaControls::onCommitVolumeUp, this));
mCommitCallbackRegistrar.add("MediaCtrl.CommitVolumeDown", boost::bind(&LLPanelPrimMediaControls::onCommitVolumeDown, this));
+ mCommitCallbackRegistrar.add("MediaCtrl.Volume", boost::bind(&LLPanelPrimMediaControls::onCommitVolumeSlider, this));
mCommitCallbackRegistrar.add("MediaCtrl.ToggleMute", boost::bind(&LLPanelPrimMediaControls::onToggleMute, this));
+ mCommitCallbackRegistrar.add("MediaCtrl.ShowVolumeSlider", boost::bind(&LLPanelPrimMediaControls::showVolumeSlider, this));
mCommitCallbackRegistrar.add("MediaCtrl.SkipBack", boost::bind(&LLPanelPrimMediaControls::onClickSkipBack, this));
mCommitCallbackRegistrar.add("MediaCtrl.SkipForward", boost::bind(&LLPanelPrimMediaControls::onClickSkipForward, this));
@@ -147,12 +153,14 @@ BOOL LLPanelPrimMediaControls::postBuild()
mVolumeBtn = getChild<LLButton>("media_volume_button");
mVolumeUpCtrl = getChild<LLUICtrl>("volume_up");
mVolumeDownCtrl = getChild<LLUICtrl>("volume_down");
+ mVolumeSliderCtrl = getChild<LLSliderCtrl>("volume_slider");
mWhitelistIcon = getChild<LLIconCtrl>("media_whitelist_flag");
mSecureLockIcon = getChild<LLIconCtrl>("media_secure_lock_flag");
mMediaControlsStack = getChild<LLLayoutStack>("media_controls");
mLeftBookend = getChild<LLUICtrl>("left_bookend");
mRightBookend = getChild<LLUICtrl>("right_bookend");
mBackgroundImage = LLUI::getUIImage(getString("control_background_image_name"));
+ mVolumeSliderBackgroundImage = LLUI::getUIImage(getString("control_background_image_name"));
LLStringUtil::convertToF32(getString("skip_step"), mSkipStep);
LLStringUtil::convertToS32(getString("min_width"), mMinWidth);
LLStringUtil::convertToS32(getString("min_height"), mMinHeight);
@@ -267,7 +275,7 @@ void LLPanelPrimMediaControls::updateShape()
LLViewerMediaImpl* media_impl = getTargetMediaImpl();
LLViewerObject* objectp = getTargetObject();
- if(!media_impl)
+ if(!media_impl || gFloaterTools->getVisible())
{
setVisible(FALSE);
return;
@@ -296,11 +304,13 @@ void LLPanelPrimMediaControls::updateShape()
LLMediaEntry *media_data = objectp->getTE(mTargetObjectFace)->getMediaData();
if (media_data && NULL != dynamic_cast<LLVOVolume*>(objectp))
{
- // Don't show the media HUD if we do not have permissions
+ // Don't show the media controls if we do not have permissions
enabled = dynamic_cast<LLVOVolume*>(objectp)->hasMediaPermission(media_data, LLVOVolume::MEDIA_PERM_CONTROL);
mini_controls = (LLMediaEntry::MINI == media_data->getControls());
}
+ const bool is_hud = objectp->isHUDAttachment();
+
//
// Set the state of the buttons
//
@@ -323,8 +333,8 @@ void LLPanelPrimMediaControls::updateShape()
mWhitelistIcon->setVisible(!mini_controls && (media_data)?media_data->getWhiteListEnable():false);
// Disable zoom if HUD
- mZoomCtrl->setEnabled(!objectp->isHUDAttachment());
- mUnzoomCtrl->setEnabled(!objectp->isHUDAttachment());
+ mZoomCtrl->setEnabled(!is_hud);
+ mUnzoomCtrl->setEnabled(!is_hud);
mSecureLockIcon->setVisible(false);
mCurrentURL = media_impl->getCurrentMediaURL();
@@ -355,6 +365,8 @@ void LLPanelPrimMediaControls::updateShape()
mVolumeUpCtrl->setVisible(has_focus);
mVolumeDownCtrl->setVisible(has_focus);
mVolumeCtrl->setEnabled(has_focus);
+ mVolumeSliderCtrl->setEnabled(has_focus && mVolumeSliderVisible);
+ mVolumeSliderCtrl->setVisible(has_focus && mVolumeSliderVisible);
mWhitelistIcon->setVisible(false);
mSecureLockIcon->setVisible(false);
@@ -411,6 +423,7 @@ void LLPanelPrimMediaControls::updateShape()
mVolumeUpCtrl->setEnabled(TRUE);
mVolumeDownCtrl->setEnabled(TRUE);
}
+ mVolumeSliderCtrl->setValue(volume);
switch(result)
{
@@ -456,9 +469,11 @@ void LLPanelPrimMediaControls::updateShape()
mVolumeCtrl->setVisible(FALSE);
mVolumeUpCtrl->setVisible(FALSE);
mVolumeDownCtrl->setVisible(FALSE);
+ mVolumeSliderCtrl->setVisible(FALSE);
mVolumeCtrl->setEnabled(FALSE);
mVolumeUpCtrl->setEnabled(FALSE);
mVolumeDownCtrl->setEnabled(FALSE);
+ mVolumeSliderCtrl->setEnabled(FALSE);
if (mMediaPanelScroll)
{
@@ -548,56 +563,58 @@ void LLPanelPrimMediaControls::updateShape()
//
// Calculate position and shape of the controls
//
+ LLVector3 min, max;
+
glh::matrix4f mat = glh_get_current_projection()*glh_get_current_modelview();
std::vector<LLVector3>::iterator vert_it;
std::vector<LLVector3>::iterator vert_end;
std::vector<LLVector3> vect_face;
-
+
LLVolume* volume = objectp->getVolume();
-
+
if (volume)
{
const LLVolumeFace& vf = volume->getVolumeFace(mTargetObjectFace);
-
+
const LLVector3* ext = vf.mExtents;
-
+
LLVector3 center = (ext[0]+ext[1])*0.5f;
LLVector3 size = (ext[1]-ext[0])*0.5f;
LLVector3 vert[] =
- {
- center + size.scaledVec(LLVector3(1,1,1)),
- center + size.scaledVec(LLVector3(-1,1,1)),
- center + size.scaledVec(LLVector3(1,-1,1)),
- center + size.scaledVec(LLVector3(-1,-1,1)),
- center + size.scaledVec(LLVector3(1,1,-1)),
- center + size.scaledVec(LLVector3(-1,1,-1)),
- center + size.scaledVec(LLVector3(1,-1,-1)),
- center + size.scaledVec(LLVector3(-1,-1,-1)),
- };
-
+ {
+ center + size.scaledVec(LLVector3(1,1,1)),
+ center + size.scaledVec(LLVector3(-1,1,1)),
+ center + size.scaledVec(LLVector3(1,-1,1)),
+ center + size.scaledVec(LLVector3(-1,-1,1)),
+ center + size.scaledVec(LLVector3(1,1,-1)),
+ center + size.scaledVec(LLVector3(-1,1,-1)),
+ center + size.scaledVec(LLVector3(1,-1,-1)),
+ center + size.scaledVec(LLVector3(-1,-1,-1)),
+ };
+
LLVOVolume* vo = (LLVOVolume*) objectp;
-
+
for (U32 i = 0; i < 8; i++)
{
- vect_face.push_back(vo->volumePositionToAgent(vert[i]));
+ vect_face.push_back(vo->volumePositionToAgent(vert[i]));
}
}
vert_it = vect_face.begin();
vert_end = vect_face.end();
-
- LLVector3 min = LLVector3(1,1,1);
- LLVector3 max = LLVector3(-1,-1,-1);
+
+ min = LLVector3(1,1,1);
+ max = LLVector3(-1,-1,-1);
for(; vert_it != vert_end; ++vert_it)
{
// project silhouette vertices into screen space
glh::vec3f screen_vert = glh::vec3f(vert_it->mV);
mat.mult_matrix_vec(screen_vert);
-
+
// add to screenspace bounding box
update_min_max(min, max, LLVector3(screen_vert.v));
}
-
- LLCoordGL screen_min;
+
+ LLCoordGL screen_min;
screen_min.mX = llround((F32)gViewerWindow->getWorldViewWidthScaled() * (min.mV[VX] + 1.f) * 0.5f);
screen_min.mY = llround((F32)gViewerWindow->getWorldViewHeightScaled() * (min.mV[VY] + 1.f) * 0.5f);
@@ -607,17 +624,16 @@ void LLPanelPrimMediaControls::updateShape()
// grow panel so that screenspace bounding box fits inside "media_region" element of HUD
LLRect media_controls_rect;
+ S32 volume_slider_height = mVolumeSliderCtrl->getRect().getHeight() - /*fudge*/ 2;
getParent()->screenRectToLocal(LLRect(screen_min.mX, screen_max.mY, screen_max.mX, screen_min.mY), &media_controls_rect);
media_controls_rect.mLeft -= mMediaRegion->getRect().mLeft;
- media_controls_rect.mBottom -= mMediaRegion->getRect().mBottom;
+ media_controls_rect.mBottom -= mMediaRegion->getRect().mBottom - volume_slider_height;
media_controls_rect.mTop += getRect().getHeight() - mMediaRegion->getRect().mTop;
media_controls_rect.mRight += getRect().getWidth() - mMediaRegion->getRect().mRight;
// keep all parts of HUD on-screen
media_controls_rect.intersectWith(getParent()->getLocalRect());
- if (mCurrentZoom != ZOOM_NONE)
- media_controls_rect.mBottom -= mMediaControlsStack->getRect().getHeight() + mMediaProgressPanel->getRect().getHeight();
-
+
// clamp to minimum size, keeping centered
media_controls_rect.setCenterAndSize(media_controls_rect.getCenterX(), media_controls_rect.getCenterY(),
llmax(mMinWidth, media_controls_rect.getWidth()), llmax(mMinHeight, media_controls_rect.getHeight()));
@@ -681,6 +697,7 @@ void LLPanelPrimMediaControls::draw()
setVisible(FALSE);
mClearFaceOnFade = false;
+ mVolumeSliderVisible = false;
mTargetImplID = LLUUID::null;
mTargetObjectID = LLUUID::null;
mTargetObjectFace = 0;
@@ -692,16 +709,29 @@ void LLPanelPrimMediaControls::draw()
// Assumes layout_stack is a direct child of this panel
mMediaControlsStack->updateLayout();
LLRect icon_area = mMediaControlsStack->getRect();
+
+ // adjust to ignore space from volume slider
+ icon_area.mTop -= mVolumeSliderCtrl->getRect().getHeight();
// adjust to ignore space from left bookend padding
icon_area.mLeft += mLeftBookend->getRect().getWidth();
// ignore space from right bookend padding
icon_area.mRight -= mRightBookend->getRect().getWidth();
-
- // get UI image
+
+ // draw control background UI image
mBackgroundImage->draw( icon_area, UI_VERTEX_COLOR % alpha);
+ // draw volume slider background UI image
+ if (mVolumeSliderCtrl->getVisible())
+ {
+ LLRect volume_slider_rect = mVolumeSliderCtrl->getRect();
+ // For some reason the rect is not in the right place (??)
+ // This translates the bg to under the slider
+ volume_slider_rect.translate(mVolumeSliderCtrl->getParent()->getRect().mLeft, icon_area.getHeight());
+ mVolumeSliderBackgroundImage->draw(volume_slider_rect, UI_VERTEX_COLOR % alpha);
+ }
+
{
LLViewDrawContext context(alpha);
LLPanel::draw();
@@ -1187,6 +1217,16 @@ void LLPanelPrimMediaControls::onCommitVolumeDown()
}
}
+void LLPanelPrimMediaControls::onCommitVolumeSlider()
+{
+ focusOnTarget();
+
+ LLViewerMediaImpl* media_impl = getTargetMediaImpl();
+ if (media_impl)
+ {
+ media_impl->setVolume(mVolumeSliderCtrl->getValueF32());
+ }
+}
void LLPanelPrimMediaControls::onToggleMute()
{
@@ -1208,3 +1248,7 @@ void LLPanelPrimMediaControls::onToggleMute()
}
}
+void LLPanelPrimMediaControls::showVolumeSlider()
+{
+ mVolumeSliderVisible = true;
+}
diff --git a/indra/newview/llpanelprimmediacontrols.h b/indra/newview/llpanelprimmediacontrols.h
index fe8f100abe..06163051a5 100644
--- a/indra/newview/llpanelprimmediacontrols.h
+++ b/indra/newview/llpanelprimmediacontrols.h
@@ -40,6 +40,7 @@ class LLCoordWindow;
class LLIconCtrl;
class LLLayoutStack;
class LLProgressBar;
+class LLSliderCtrl;
class LLViewerMediaImpl;
class LLPanelPrimMediaControls : public LLPanel
@@ -106,7 +107,9 @@ private:
void onCommitVolumeUp();
void onCommitVolumeDown();
+ void onCommitVolumeSlider();
void onToggleMute();
+ void showVolumeSlider();
static void onScrollUp(void* user_data);
static void onScrollUpHeld(void* user_data);
@@ -153,12 +156,14 @@ private:
LLButton *mVolumeBtn;
LLUICtrl *mVolumeUpCtrl;
LLUICtrl *mVolumeDownCtrl;
+ LLSliderCtrl *mVolumeSliderCtrl;
LLIconCtrl *mWhitelistIcon;
LLIconCtrl *mSecureLockIcon;
LLLayoutStack *mMediaControlsStack;
LLUICtrl *mLeftBookend;
LLUICtrl *mRightBookend;
LLUIImage* mBackgroundImage;
+ LLUIImage* mVolumeSliderBackgroundImage;
F32 mSkipStep;
S32 mMinWidth;
S32 mMinHeight;
@@ -198,6 +203,8 @@ private:
LLUUID mZoomObjectID;
S32 mZoomObjectFace;
+
+ bool mVolumeSliderVisible;
};
#endif // LL_PANELPRIMMEDIACONTROLS_H
diff --git a/indra/newview/llscriptfloater.cpp b/indra/newview/llscriptfloater.cpp
index 155172128b..088884178b 100644
--- a/indra/newview/llscriptfloater.cpp
+++ b/indra/newview/llscriptfloater.cpp
@@ -62,15 +62,15 @@ LLUUID notification_id_to_object_id(const LLUUID& notification_id)
//////////////////////////////////////////////////////////////////////////
LLScriptFloater::LLScriptFloater(const LLSD& key)
-: LLTransientDockableFloater(NULL, true, key)
+: LLDockableFloater(NULL, true, key)
, mScriptForm(NULL)
-, mObjectId(key.asUUID())
{
}
bool LLScriptFloater::toggle(const LLUUID& object_id)
{
- LLScriptFloater* floater = LLFloaterReg::findTypedInstance<LLScriptFloater>("script_floater", object_id);
+ LLUUID notification_id = LLScriptFloaterManager::getInstance()->findNotificationId(object_id);
+ LLScriptFloater* floater = LLFloaterReg::findTypedInstance<LLScriptFloater>("script_floater", notification_id);
// show existing floater
if(floater)
@@ -97,7 +97,10 @@ bool LLScriptFloater::toggle(const LLUUID& object_id)
LLScriptFloater* LLScriptFloater::show(const LLUUID& object_id)
{
- LLScriptFloater* floater = LLFloaterReg::showTypedInstance<LLScriptFloater>("script_floater", object_id);
+ LLUUID notification_id = LLScriptFloaterManager::getInstance()->findNotificationId(object_id);
+
+ LLScriptFloater* floater = LLFloaterReg::showTypedInstance<LLScriptFloater>("script_floater", notification_id);
+ floater->setObjectId(object_id);
floater->createForm(object_id);
if (floater->getDockControl() == NULL)
@@ -156,19 +159,22 @@ void LLScriptFloater::createForm(const LLUUID& object_id)
void LLScriptFloater::onClose(bool app_quitting)
{
- LLScriptFloaterManager::getInstance()->removeNotificationByObjectId(getObjectId());
+ if(getObjectId().notNull())
+ {
+ LLScriptFloaterManager::getInstance()->removeNotificationByObjectId(getObjectId());
+ }
}
void LLScriptFloater::setDocked(bool docked, bool pop_on_undock /* = true */)
{
- LLTransientDockableFloater::setDocked(docked, pop_on_undock);
+ LLDockableFloater::setDocked(docked, pop_on_undock);
hideToastsIfNeeded();
}
void LLScriptFloater::setVisible(BOOL visible)
{
- LLTransientDockableFloater::setVisible(visible);
+ LLDockableFloater::setVisible(visible);
hideToastsIfNeeded();
}
@@ -206,7 +212,7 @@ void LLScriptFloaterManager::onAddNotification(const LLUUID& notification_id)
script_notification_map_t::iterator it = mNotifications.find(object_id);
if(it != mNotifications.end())
{
- onRemoveNotification(notification_id);
+ onRemoveNotification(it->second.notification_id);
}
LLNotificationData nd = {notification_id};
@@ -228,7 +234,7 @@ void LLScriptFloaterManager::onAddNotification(const LLUUID& notification_id)
void LLScriptFloaterManager::onRemoveNotification(const LLUUID& notification_id)
{
- LLUUID object_id = notification_id_to_object_id(notification_id);
+ LLUUID object_id = findObjectId(notification_id);
if(object_id.isNull())
{
llwarns << "Invalid notification, no object id" << llendl;
@@ -241,22 +247,24 @@ void LLScriptFloaterManager::onRemoveNotification(const LLUUID& notification_id)
LLUUID channel_id(gSavedSettings.getString("NotificationChannelUUID"));
LLScreenChannel* channel = dynamic_cast<LLScreenChannel*>
(LLChannelManager::getInstance()->findChannelByID(channel_id));
- if(channel)
+ LLUUID n_toast_id = findNotificationToastId(object_id);
+ if(channel && n_toast_id.notNull())
{
- channel->killToastByNotificationID(findNotificationToastId(object_id));
+ channel->killToastByNotificationID(n_toast_id);
}
- mNotifications.erase(object_id);
-
// remove related chiclet
LLBottomTray::getInstance()->getChicletPanel()->removeChiclet(object_id);
// close floater
- LLScriptFloater* floater = LLFloaterReg::findTypedInstance<LLScriptFloater>("script_floater", object_id);
+ LLScriptFloater* floater = LLFloaterReg::findTypedInstance<LLScriptFloater>("script_floater", notification_id);
if(floater)
{
+ floater->setObjectId(LLUUID::null);
floater->closeFloater();
}
+
+ mNotifications.erase(object_id);
}
void LLScriptFloaterManager::removeNotificationByObjectId(const LLUUID& object_id)
@@ -301,6 +309,22 @@ void LLScriptFloaterManager::setNotificationToastId(const LLUUID& object_id, con
}
}
+LLUUID LLScriptFloaterManager::findObjectId(const LLUUID& notification_id)
+{
+ if(notification_id.notNull())
+ {
+ script_notification_map_t::const_iterator it = mNotifications.begin();
+ for(; mNotifications.end() != it; ++it)
+ {
+ if(notification_id == it->second.notification_id)
+ {
+ return it->first;
+ }
+ }
+ }
+ return LLUUID::null;
+}
+
LLUUID LLScriptFloaterManager::findNotificationId(const LLUUID& object_id)
{
script_notification_map_t::const_iterator it = mNotifications.find(object_id);
diff --git a/indra/newview/llscriptfloater.h b/indra/newview/llscriptfloater.h
index 0e1a7f36b7..8b5a266691 100644
--- a/indra/newview/llscriptfloater.h
+++ b/indra/newview/llscriptfloater.h
@@ -43,6 +43,9 @@ class LLToastNotifyPanel;
*/
class LLScriptFloaterManager : public LLSingleton<LLScriptFloaterManager>
{
+ // *TODO
+ // LLScriptFloaterManager and LLScriptFloater will need some refactoring after we
+ // know how script notifications should look like.
public:
/**
@@ -69,6 +72,8 @@ public:
*/
void toggleScriptFloater(const LLUUID& object_id);
+ LLUUID findObjectId(const LLUUID& notification_id);
+
LLUUID findNotificationId(const LLUUID& object_id);
LLUUID findNotificationToastId(const LLUUID& object_id);
@@ -102,7 +107,7 @@ private:
* LLScriptFloater will create script form based on notification data and
* will auto fit the form.
*/
-class LLScriptFloater : public LLTransientDockableFloater
+class LLScriptFloater : public LLDockableFloater
{
public:
@@ -125,6 +130,8 @@ public:
const LLUUID& getObjectId() { return mObjectId; }
+ void setObjectId(const LLUUID& id) { mObjectId = id; }
+
/**
* Close notification if script floater is closed.
*/
@@ -154,8 +161,6 @@ protected:
*/
static void hideToastsIfNeeded();
- void setObjectId(const LLUUID& id) { mObjectId = id; }
-
private:
LLToastNotifyPanel* mScriptForm;
LLUUID mObjectId;
diff --git a/indra/newview/llteleporthistory.cpp b/indra/newview/llteleporthistory.cpp
index cc4689062e..1315887c37 100644
--- a/indra/newview/llteleporthistory.cpp
+++ b/indra/newview/llteleporthistory.cpp
@@ -167,7 +167,10 @@ void LLTeleportHistory::onHistoryChanged()
void LLTeleportHistory::purgeItems()
{
- mItems.erase(mItems.begin(), mItems.end()-1);
+ if (mItems.size() > 0)
+ {
+ mItems.erase(mItems.begin(), mItems.end()-1);
+ }
// reset the count
mRequestedItem = -1;
mCurrentItem = 0;
diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp
index 9bb2a4ad0a..ef49d7f057 100644
--- a/indra/newview/lltexturefetch.cpp
+++ b/indra/newview/lltexturefetch.cpp
@@ -736,7 +736,8 @@ bool LLTextureFetchWorker::doWork(S32 param)
}
else
{
- llwarns << "Region not found for host: " << mHost << llendl;
+ // This will happen if not logged in or if a region deoes not have HTTP Texture enabled
+ //llwarns << "Region not found for host: " << mHost << llendl;
}
}
if (!mUrl.empty())
@@ -943,11 +944,14 @@ bool LLTextureFetchWorker::doWork(S32 param)
{
llerrs << "Decode entered with invalid mFormattedImage. ID = " << mID << llendl;
}
+ if (mLoadedDiscard < 0)
+ {
+ llerrs << "Decode entered with invalid mLoadedDiscard. ID = " << mID << llendl;
+ }
setPriority(LLWorkerThread::PRIORITY_LOW | mWorkPriority); // Set priority first since Responder may change it
mRawImage = NULL;
mAuxImage = NULL;
llassert_always(mFormattedImage.notNull());
- llassert_always(mLoadedDiscard >= 0);
S32 discard = mHaveAllData ? 0 : mLoadedDiscard;
U32 image_priority = LLWorkerThread::PRIORITY_NORMAL | mWorkPriority;
mDecoded = FALSE;
diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp
index b5454e7298..7c9bd582dd 100644
--- a/indra/newview/llviewerfloaterreg.cpp
+++ b/indra/newview/llviewerfloaterreg.cpp
@@ -250,7 +250,6 @@ void LLViewerFloaterReg::registerFloaters()
LLFloaterReg::add("upload_sound", "floater_sound_preview.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSoundPreview>, "upload");
LLFloaterReg::add("volume_pulldown", "floater_volume_pulldown.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterVolumePulldown>);
- LLFloaterReg::add("voice_call", "floater_call.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterCall>);
LLFloaterReg::add("voice_controls", "floater_voice_controls.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLCallFloater>);
LLFloaterReg::add("whitelist_entry", "floater_whitelist_entry.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterWhiteListEntry>);
diff --git a/indra/newview/llviewerkeyboard.cpp b/indra/newview/llviewerkeyboard.cpp
index 8fd646ee93..f757155b94 100644
--- a/indra/newview/llviewerkeyboard.cpp
+++ b/indra/newview/llviewerkeyboard.cpp
@@ -538,8 +538,9 @@ void start_chat( EKeystate s )
void start_gesture( EKeystate s )
{
+ LLUICtrl* focus_ctrlp = dynamic_cast<LLUICtrl*>(gFocusMgr.getKeyboardFocus());
if (KEYSTATE_UP == s &&
- !(gFocusMgr.getKeyboardFocus() && dynamic_cast<LLUICtrl*>(gFocusMgr.getKeyboardFocus())->acceptsTextInput()))
+ ! (focus_ctrlp && focus_ctrlp->acceptsTextInput()))
{
if (LLNearbyChatBar::getInstance()->getCurrentChat().empty())
{
diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp
index d5fd23ac51..f6db661489 100644
--- a/indra/newview/llviewermedia.cpp
+++ b/indra/newview/llviewermedia.cpp
@@ -45,6 +45,9 @@
#include "llviewertexturelist.h"
#include "llvovolume.h"
#include "llpluginclassmedia.h"
+#include "llviewerwindow.h"
+#include "llfocusmgr.h"
+#include "llcallbacklist.h"
#include "llevent.h" // LLSimpleListener
#include "llnotificationsutil.h"
@@ -55,7 +58,7 @@
#include <boost/bind.hpp> // for SkinFolder listener
#include <boost/signals2.hpp>
-/*static*/ const char* LLViewerMedia::AUTO_PLAY_MEDIA_SETTING = "AutoPlayMedia";
+/*static*/ const char* LLViewerMedia::AUTO_PLAY_MEDIA_SETTING = "ParcelMediaAutoPlayEnable";
// Move this to its own file.
@@ -327,6 +330,8 @@ viewer_media_t LLViewerMedia::updateMediaImpl(LLMediaEntry* media_entry, const s
media_impl->mMediaLoop = media_entry->getAutoLoop();
media_impl->mMediaWidth = media_entry->getWidthPixels();
media_impl->mMediaHeight = media_entry->getHeightPixels();
+ media_impl->mMediaAutoPlay = media_entry->getAutoPlay();
+ media_impl->mMediaEntryURL = media_entry->getCurrentURL();
if (media_impl->mMediaSource)
{
media_impl->mMediaSource->setAutoScale(media_impl->mMediaAutoScale);
@@ -334,8 +339,8 @@ viewer_media_t LLViewerMedia::updateMediaImpl(LLMediaEntry* media_entry, const s
media_impl->mMediaSource->setSize(media_entry->getWidthPixels(), media_entry->getHeightPixels());
}
- bool url_changed = (media_entry->getCurrentURL() != previous_url);
- if(media_entry->getCurrentURL().empty())
+ bool url_changed = (media_impl->mMediaEntryURL != previous_url);
+ if(media_impl->mMediaEntryURL.empty())
{
if(url_changed)
{
@@ -350,7 +355,7 @@ viewer_media_t LLViewerMedia::updateMediaImpl(LLMediaEntry* media_entry, const s
// The current media URL is not empty.
// If (the media was already loaded OR the media was set to autoplay) AND this update didn't come from this agent,
// do a navigate.
- bool auto_play = (media_entry->getAutoPlay() && gSavedSettings.getBOOL(AUTO_PLAY_MEDIA_SETTING));
+ bool auto_play = (media_impl->mMediaAutoPlay && gSavedSettings.getBOOL(AUTO_PLAY_MEDIA_SETTING));
if((was_loaded || auto_play) && !update_from_self)
{
@@ -372,8 +377,10 @@ viewer_media_t LLViewerMedia::updateMediaImpl(LLMediaEntry* media_entry, const s
media_entry->getAutoLoop());
media_impl->setHomeURL(media_entry->getHomeURL());
+ media_impl->mMediaAutoPlay = media_entry->getAutoPlay();
+ media_impl->mMediaEntryURL = media_entry->getCurrentURL();
- if(media_entry->getAutoPlay() && gSavedSettings.getBOOL(AUTO_PLAY_MEDIA_SETTING))
+ if(media_impl->mMediaAutoPlay && gSavedSettings.getBOOL(AUTO_PLAY_MEDIA_SETTING))
{
needs_navigate = true;
}
@@ -381,21 +388,20 @@ viewer_media_t LLViewerMedia::updateMediaImpl(LLMediaEntry* media_entry, const s
if(media_impl)
{
- std::string url = media_entry->getCurrentURL();
if(needs_navigate)
{
- media_impl->navigateTo(url, "", true, true);
- lldebugs << "navigating to URL " << url << llendl;
+ media_impl->navigateTo(media_impl->mMediaEntryURL, "", true, true);
+ lldebugs << "navigating to URL " << media_impl->mMediaEntryURL << llendl;
}
- else if(!media_impl->mMediaURL.empty() && (media_impl->mMediaURL != url))
+ else if(!media_impl->mMediaURL.empty() && (media_impl->mMediaURL != media_impl->mMediaEntryURL))
{
// If we already have a non-empty media URL set and we aren't doing a navigate, update the media URL to match the media entry.
- media_impl->mMediaURL = url;
+ media_impl->mMediaURL = media_impl->mMediaEntryURL;
// If this causes a navigate at some point (such as after a reload), it should be considered server-driven so it isn't broadcast.
media_impl->mNavigateServerRequest = true;
- lldebugs << "updating URL in the media impl to " << url << llendl;
+ lldebugs << "updating URL in the media impl to " << media_impl->mMediaEntryURL << llendl;
}
}
@@ -625,7 +631,7 @@ static bool proximity_comparitor(const LLViewerMediaImpl* i1, const LLViewerMedi
//////////////////////////////////////////////////////////////////////////////////////////
// static
-void LLViewerMedia::updateMedia()
+void LLViewerMedia::updateMedia(void *dummy_arg)
{
impl_list::iterator iter = sViewerMediaImplList.begin();
impl_list::iterator end = sViewerMediaImplList.end();
@@ -668,7 +674,7 @@ void LLViewerMedia::updateMedia()
LLPluginClassMedia::EPriority new_priority = LLPluginClassMedia::PRIORITY_NORMAL;
- if(pimpl->isForcedUnloaded() || (impl_count_total > (int)max_instances))
+ if(pimpl->isForcedUnloaded() || (impl_count_total >= (int)max_instances))
{
// Never load muted or failed impls.
// Hard limit on the number of instances that will be loaded at one time
@@ -747,6 +753,19 @@ void LLViewerMedia::updateMedia()
impl_count_total++;
}
+ // Overrides if the window is minimized or we lost focus (taking care
+ // not to accidentally "raise" the priority either)
+ if (!gViewerWindow->getActive() /* viewer window minimized? */
+ && new_priority > LLPluginClassMedia::PRIORITY_HIDDEN)
+ {
+ new_priority = LLPluginClassMedia::PRIORITY_HIDDEN;
+ }
+ else if (!gFocusMgr.getAppHasFocus() /* viewer window lost focus? */
+ && new_priority > LLPluginClassMedia::PRIORITY_LOW)
+ {
+ new_priority = LLPluginClassMedia::PRIORITY_LOW;
+ }
+
pimpl->setPriority(new_priority);
if(pimpl->getUsedInUI())
@@ -785,9 +804,16 @@ void LLViewerMedia::updateMedia()
//////////////////////////////////////////////////////////////////////////////////////////
// static
+void LLViewerMedia::initClass()
+{
+ gIdleCallbacks.addFunction(LLViewerMedia::updateMedia, NULL);
+}
+
+//////////////////////////////////////////////////////////////////////////////////////////
+// static
void LLViewerMedia::cleanupClass()
{
- // This is no longer necessary, since sViewerMediaImplList is no longer smart pointers.
+ gIdleCallbacks.deleteFunction(LLViewerMedia::updateMedia, NULL);
}
//////////////////////////////////////////////////////////////////////////////////////////
@@ -830,6 +856,7 @@ LLViewerMediaImpl::LLViewerMediaImpl( const LLUUID& texture_id,
mProximity(-1),
mProximityDistance(0.0f),
mMimeTypeProbe(NULL),
+ mMediaAutoPlay(false),
mIsUpdated(false)
{
@@ -1911,6 +1938,33 @@ void LLViewerMediaImpl::resetPreviousMediaState()
mPreviousMediaTime = 0.0f;
}
+
+//////////////////////////////////////////////////////////////////////////////////////////
+//
+void LLViewerMediaImpl::setDisabled(bool disabled)
+{
+ if(mIsDisabled != disabled)
+ {
+ // Only do this on actual state transitions.
+ mIsDisabled = disabled;
+
+ if(mIsDisabled)
+ {
+ // We just disabled this media. Clear all state.
+ unload();
+ }
+ else
+ {
+ // We just (re)enabled this media. Do a navigate if auto-play is in order.
+ if(mMediaAutoPlay && gSavedSettings.getBOOL(LLViewerMedia::AUTO_PLAY_MEDIA_SETTING))
+ {
+ navigateTo(mMediaEntryURL, "", true, true);
+ }
+ }
+
+ }
+};
+
//////////////////////////////////////////////////////////////////////////////////////////
//
bool LLViewerMediaImpl::isForcedUnloaded() const
diff --git a/indra/newview/llviewermedia.h b/indra/newview/llviewermedia.h
index e2d159304f..713eb2710b 100644
--- a/indra/newview/llviewermedia.h
+++ b/indra/newview/llviewermedia.h
@@ -96,9 +96,10 @@ class LLViewerMedia
static bool textureHasMedia(const LLUUID& texture_id);
static void setVolume(F32 volume);
- static void updateMedia();
+ static void updateMedia(void* dummy_arg = NULL);
static bool isMusicPlaying();
+ static void initClass();
static void cleanupClass();
static void toggleMusicPlay(void*);
@@ -201,7 +202,7 @@ public:
bool isMediaFailed() const { return mMediaSourceFailed; };
void resetPreviousMediaState();
- void setDisabled(bool disabled) { mIsDisabled = disabled; };
+ void setDisabled(bool disabled);
bool isMediaDisabled() const { return mIsDisabled; };
// returns true if this instance should not be loaded (disabled, muted object, crashed, etc.)
@@ -345,6 +346,8 @@ public:
S32 mProximity;
F64 mProximityDistance;
LLMimeDiscoveryResponder *mMimeTypeProbe;
+ bool mMediaAutoPlay;
+ std::string mMediaEntryURL;
private:
BOOL mIsUpdated ;
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 65ad2f6fa6..507e34348b 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -5506,17 +5506,6 @@ void process_script_dialog(LLMessageSystem* msg, void**)
notification = LLNotifications::instance().add(
LLNotification::Params("ScriptDialogGroup").substitutions(args).payload(payload).form_elements(form.asLLSD()));
}
-
- // "ScriptDialog" and "ScriptDialogGroup" are handles by LLScriptFloaterManager.
- // We want to inform user that there is a script floater, lets add "ScriptToast"
- LLNotification::Params p("ScriptToast");
- p.substitutions(args).payload(payload).functor.function(boost::bind(
- LLScriptFloaterManager::onToastButtonClick, _1, _2));
-
- notification = LLNotifications::instance().add(p);
-
- LLScriptFloaterManager::getInstance()->setNotificationToastId(
- object_id, notification->getID());
}
//---------------------------------------------------------------------------
diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp
index dbcf563010..5be7f2945f 100644
--- a/indra/newview/llviewertexturelist.cpp
+++ b/indra/newview/llviewertexturelist.cpp
@@ -614,10 +614,6 @@ void LLViewerTextureList::updateImages(F32 max_time)
didone = image->doLoadedCallbacks();
}
}
- if (!gNoRender && !gGLManager.mIsDisabled)
- {
- LLViewerMedia::updateMedia();
- }
updateImagesUpdateStats();
}
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index 9ba056a17c..8529a93527 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -1011,6 +1011,7 @@ BOOL LLViewerWindow::handleActivate(LLWindow *window, BOOL activated)
else
{
mActive = FALSE;
+
if (gSavedSettings.getBOOL("AllowIdleAFK"))
{
gAgent.setAFK();
@@ -3244,8 +3245,7 @@ LLPickInfo LLViewerWindow::pickImmediate(S32 x, S32 y_from_bot, BOOL pick_trans
}
else
{
- llwarns << "List of last picks is empty" << llendl;
- llwarns << "Using stub pick" << llendl;
+ lldebugs << "List of last picks is empty: Using stub pick" << llendl;
mLastPick = LLPickInfo();
}
diff --git a/indra/newview/llvoicechannel.cpp b/indra/newview/llvoicechannel.cpp
index a0396bc790..608060174a 100644
--- a/indra/newview/llvoicechannel.cpp
+++ b/indra/newview/llvoicechannel.cpp
@@ -408,28 +408,6 @@ void LLVoiceChannel::doSetState(const EState& new_state)
mStateChangedCallback(old_state, mState);
}
-void LLVoiceChannel::toggleCallWindowIfNeeded(EState state)
-{
- LLFloaterCall* floater = dynamic_cast<LLFloaterCall*>(LLFloaterReg::getInstance("voice_call", mSessionID));
- if (!floater)
- return;
-
- if (state == STATE_CONNECTED)
- {
- floater->init(mSessionID);
- floater->openFloater(mSessionID);
- }
- // By checking that current state is CONNECTED we make sure that the call window
- // has been shown, hence there's something to hide. This helps when user presses
- // the "End call" button right after initiating the call.
- // *TODO: move this check to LLFloaterCall?
- else if (state == STATE_HUNG_UP && mState == STATE_CONNECTED)
- {
- floater->reset();
- floater->closeFloater();
- }
-}
-
//static
void LLVoiceChannel::initClass()
{
@@ -630,9 +608,6 @@ void LLVoiceChannelGroup::handleError(EStatusType status)
void LLVoiceChannelGroup::setState(EState state)
{
- // HACK: Open/close the call window if needed.
- toggleCallWindowIfNeeded(state);
-
switch(state)
{
case STATE_RINGING:
@@ -886,9 +861,6 @@ void LLVoiceChannelP2P::setSessionHandle(const std::string& handle, const std::s
void LLVoiceChannelP2P::setState(EState state)
{
- // *HACK: Open/close the call window if needed.
- toggleCallWindowIfNeeded(state);
-
llinfos << "P2P CALL STATE CHANGE: incoming=" << int(mReceivedCall) << " oldstate=" << mState << " newstate=" << state << llendl;
if (mReceivedCall) // incoming call
diff --git a/indra/newview/llvoicechannel.h b/indra/newview/llvoicechannel.h
index fe0114d687..1bed329ba2 100644
--- a/indra/newview/llvoicechannel.h
+++ b/indra/newview/llvoicechannel.h
@@ -101,7 +101,6 @@ protected:
* Use this method if you want mStateChangedCallback to be executed while state is changed
*/
void doSetState(const EState& state);
- void toggleCallWindowIfNeeded(EState state);
void setURI(std::string uri);
std::string mURI;
diff --git a/indra/newview/skins/default/xui/en/floater_aaa.xml b/indra/newview/skins/default/xui/en/floater_aaa.xml
index 6ecdd76573..f89ad2f997 100644
--- a/indra/newview/skins/default/xui/en/floater_aaa.xml
+++ b/indra/newview/skins/default/xui/en/floater_aaa.xml
@@ -17,6 +17,7 @@
save_visibility="true"
single_instance="true"
width="320">
+ <string name="nudge_parabuild">Nudge 1</string>
<chat_history
allow_html="true"
bg_readonly_color="ChatHistoryBgColor"
diff --git a/indra/newview/skins/default/xui/en/menu_people_nearby.xml b/indra/newview/skins/default/xui/en/menu_people_nearby.xml
index 643336cf6c..c3a2540b2e 100644
--- a/indra/newview/skins/default/xui/en/menu_people_nearby.xml
+++ b/indra/newview/skins/default/xui/en/menu_people_nearby.xml
@@ -27,7 +27,6 @@
function="Avatar.IM" />
</menu_item_call>
<menu_item_call
- enabled="false"
label="Call"
layout="topleft"
name="Call">
diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
index ae8a1599a9..37136af680 100644
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -3268,6 +3268,17 @@
</menu>
<menu_item_separator
layout="topleft" />
+ <menu_item_check
+ label="HTTP Textures"
+ layout="topleft"
+ name="HTTP Textures">
+ <menu_item_check.on_check
+ function="CheckControl"
+ parameter="ImagePipelineUseHTTP" />
+ <menu_item_check.on_click
+ function="ToggleControl"
+ parameter="ImagePipelineUseHTTP" />
+ </menu_item_check>
<menu_item_call
label="Compress Images"
layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/panel_my_profile.xml b/indra/newview/skins/default/xui/en/panel_my_profile.xml
index fe3e010cf9..3c87331199 100644
--- a/indra/newview/skins/default/xui/en/panel_my_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_my_profile.xml
@@ -416,6 +416,7 @@
left="10"
label="Edit Profile"
name="edit_profile_btn"
+ tool_tip="Edit your personal information"
width="130" />
<button
follows="bottom|right"
@@ -423,6 +424,7 @@
label="Edit Appearance"
left_pad="10"
name="edit_appearance_btn"
+ tool_tip="Create/edit your appearance: physical data, clothes and etc."
right="-10"
width="130" />
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_picks.xml b/indra/newview/skins/default/xui/en/panel_picks.xml
index 4c2bd67337..52bc72fe86 100644
--- a/indra/newview/skins/default/xui/en/panel_picks.xml
+++ b/indra/newview/skins/default/xui/en/panel_picks.xml
@@ -106,7 +106,7 @@
layout="topleft"
left_pad="15"
name="new_btn"
- tool_tip="Create new pick at current location"
+ tool_tip="Create new pick or classified at current location"
top="5"
width="18" />
<button
@@ -138,6 +138,7 @@
left="5"
name="info_btn"
tab_stop="false"
+ tool_tip="Show pic information"
top="0"
width="55" />
<button
@@ -149,6 +150,7 @@
left_pad="5"
name="teleport_btn"
tab_stop="false"
+ tool_tip="Teleport to the corresponding area"
top="0"
width="77" />
<button
@@ -160,6 +162,7 @@
left_pad="5"
name="show_on_map_btn"
tab_stop="false"
+ tool_tip="Show corresponding area on the world map"
top="0"
width="50" />
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml
index 23832ba120..29e9b476eb 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml
@@ -78,7 +78,7 @@
top_pad="10"
width="350" />
<check_box
- control_name="AutoPlayMedia"
+ control_name="ParcelMediaAutoPlayEnable"
height="16"
label="Allow Media Autoplay"
layout="topleft"
@@ -86,15 +86,6 @@
name="autoplay_enabled"
top_pad="10"
width="350" />
- <check_box
- control_name="ParcelMediaAutoPlayEnable"
- height="16"
- label="Automatically Play Parcel Media"
- layout="topleft"
- left="30"
- name="parcel_autoplay_enabled"
- top_pad="10"
- width="350" />
<text
type="string"
length="1"
diff --git a/indra/newview/skins/default/xui/en/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/en/panel_prim_media_controls.xml
index 8b86067b03..e21de31498 100644
--- a/indra/newview/skins/default/xui/en/panel_prim_media_controls.xml
+++ b/indra/newview/skins/default/xui/en/panel_prim_media_controls.xml
@@ -3,7 +3,7 @@
follows="left|right|top|bottom"
name="MediaControls"
background_visible="false"
- height="192"
+ height="200"
layout="topleft"
mouse_opaque="false"
width="800">
@@ -16,20 +16,20 @@
<string name="zoom_far_padding">1.5</string>
<panel
name="media_region"
- bottom="125"
+ height="100"
follows="left|right|top|bottom"
layout="topleft"
mouse_opaque="false"
- top="20" />
+ top="0" />
<layout_stack
name="media_controls"
follows="left|right"
animate="false"
- height="26"
+ height="75"
layout="topleft"
left="0"
orientation="horizontal"
- top="128">
+ top="100">
<!-- outer layout_panels center the inner one -->
<layout_panel
name="left_bookend"
@@ -239,19 +239,6 @@
layout="topleft"
width="190"
min_width="90">
- <!--
- RE-ENABLE THIS WHEN WE HAVE A HISTORY DROP-DOWN AGAIN
- <combo_box
- name="media_address_url"
- allow_text_entry="true"
- height="22"
- layout="topleft"
- max_chars="1024"
- tool_tip = "Media URL">
- <combo_box.commit_callback
- function="MediaCtrl.CommitURL" />
- </combo_box>
- -->
<line_editor
name="media_address_url"
follows="left|right"
@@ -314,8 +301,9 @@
<slider_bar
name="media_play_slider"
follows="left|right|top"
- height="16"
- increment="0.05"
+ height="20"
+ bottom="88"
+ increment="0.01"
initial_value="0.5"
layout="topleft"
tool_tip="Movie play progress"
@@ -379,7 +367,8 @@
auto_resize="false"
user_resize="false"
layout="topleft"
- height="22"
+ top="-50"
+ height="72"
min_width="22"
width="22">
<!-- Note: this is not quite right either...the mute button is not the -->
@@ -397,138 +386,30 @@
layout="topleft"
scale_image="false"
tool_tip="Mute This Media"
- top_delta="18"
+ top="118"
min_width="22"
width="22" >
<button.commit_callback
function="MediaCtrl.ToggleMute" />
+ <button.mouseenter_callback
+ function="MediaCtrl.ShowVolumeSlider" />
</button>
- </layout_panel>
- <!-- We do not have a design yet for "volume", so this is a temporary -->
- <!-- solution. See DEV-42827. -->
- <layout_panel
- name="volume_up"
- auto_resize="false"
- user_resize="false"
- layout="topleft"
- min_width="14"
- height="14"
- width="14">
- <button
- image_overlay="media_btn_scrollup.png"
- image_disabled="PushButton_Disabled"
- image_disabled_selected="PushButton_Disabled"
- image_selected="PushButton_Selected"
- image_unselected="PushButton_Off"
- hover_glow_amount="0.15"
- top="-5"
- height="14"
- layout="topleft"
- tool_tip="Volume up"
- scale_image="true"
- min_width="14"
- width="14" >
- <button.commit_callback
- function="MediaCtrl.CommitVolumeUp" />
- </button>
- </layout_panel>
- <layout_panel
- name="volume_down"
- auto_resize="false"
- user_resize="false"
- layout="topleft"
- min_width="14"
- height="14"
- width="14">
- <button
- image_overlay="media_btn_scrolldown.png"
- image_disabled="PushButton_Disabled"
- image_disabled_selected="PushButton_Disabled"
- image_selected="PushButton_Selected"
- image_unselected="PushButton_Off"
- hover_glow_amount="0.15"
- layout="topleft"
- tool_tip="Volume down"
- scale_image="true"
- top="-5"
- height="14"
- min_width="14"
- width="14">
- <button.commit_callback
- function="MediaCtrl.CommitVolumeDown" />
- </button>
- </layout_panel>
- <!-- Scroll pad -->
- <!-- This was removed from the design, but is still here because it is -->
- <!-- complex, and recreating it would be hard. In case the design -->
- <!-- changes, here it lies: -->
- <!--
- <layout_panel
- name="media_panel_scroll"
- auto_resize="false"
- user_resize="false"
- height="32"
- follows="left|right|top|bottom"
- layout="topleft"
- min_width="32"
- width="32">
- <icon
- height="32"
- image_name="media_panel_scrollbg.png"
- layout="topleft"
- top="0"
- min_width="32"
- width="32" />
- <button
- name="scrollup"
- height="8"
- image_selected="media_btn_scrollup.png"
- image_unselected="media_btn_scrollup.png"
- layout="topleft"
- tool_tip="Scroll up"
- scale_image="false"
- left="12"
- top_delta="4"
- min_width="8"
- width="8" />
- <button
- name="scrollleft"
- height="8"
- image_selected="media_btn_scrollleft.png"
- image_unselected="media_btn_scrollleft.png"
- layout="topleft"
- left="3"
- tool_tip="Scroll left"
- scale_image="false"
- top="12"
- min_width="8"
- width="8" />
- <button
- name="scrollright"
- height="8"
- image_selected="media_btn_scrollright.png"
- image_unselected="media_btn_scrollright.png"
- layout="topleft"
- left_pad="9"
- tool_tip="Scroll right"
- scale_image="false"
- top_delta="0"
- min_width="8"
- width="8" />
- <button
- name="scrolldown"
- height="8"
- image_selected="media_btn_scrolldown.png"
- image_unselected="media_btn_scrolldown.png"
+ <slider
+ orientation="vertical"
+ left="0"
+ top="-2"
+ height="50"
layout="topleft"
- left="12"
- tool_tip="Scroll down"
- scale_image="false"
- top="20"
- min_width="8"
- width="8" />
+ increment="0.01"
+ initial_value="0.5"
+ name="volume_slider"
+ tool_tip="Media Volume"
+ show_text="false"
+ volume="true">
+ <slider.commit_callback
+ function="MediaCtrl.Volume"/>
+ </slider>
</layout_panel>
- -->
<panel
height="28"
layout="topleft"
@@ -628,7 +509,7 @@
animate="false"
left="0"
orientation="horizontal"
- top="150">
+ top="170">
<!-- outer layout_panels center the inner one -->
<layout_panel
width="0"
diff --git a/indra/newview/skins/default/xui/en/panel_profile.xml b/indra/newview/skins/default/xui/en/panel_profile.xml
index 947bb67152..6be203ef9c 100644
--- a/indra/newview/skins/default/xui/en/panel_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_profile.xml
@@ -287,7 +287,7 @@
mouse_opaque="false"
name="add_friend"
top="5"
- width="76" />
+ width="77" />
<button
follows="bottom|left"
height="19"
@@ -296,7 +296,7 @@
name="im"
top="5"
left_pad="5"
- width="31" />
+ width="33" />
<button
follows="bottom|left"
height="19"
@@ -315,7 +315,7 @@
name="show_on_map_btn"
top="5"
left_pad="5"
- width="42" />
+ width="44" />
<button
follows="bottom|left"
height="19"
@@ -324,7 +324,7 @@
name="teleport"
left_pad="5"
top="5"
- width="64" />
+ width="67" />
<button
follows="bottom|right"
height="19"