summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--indra/newview/app_settings/settings.xml2
-rw-r--r--indra/newview/llbottomtray.cpp1
-rw-r--r--indra/newview/llchathistory.cpp68
-rw-r--r--indra/newview/llgrouplist.cpp22
-rw-r--r--indra/newview/llgrouplist.h11
-rw-r--r--indra/newview/llgroupmgr.cpp12
-rw-r--r--indra/newview/llimfloater.cpp8
-rw-r--r--indra/newview/llimview.cpp46
-rw-r--r--indra/newview/llimview.h10
-rw-r--r--indra/newview/llinventorymodel.cpp134
-rw-r--r--indra/newview/llpanelimcontrolpanel.cpp2
-rw-r--r--indra/newview/llpanelme.cpp4
-rw-r--r--indra/newview/llpanelpeople.cpp6
-rw-r--r--indra/newview/llpanelteleporthistory.cpp3
-rw-r--r--indra/newview/llteleporthistory.cpp2
-rw-r--r--indra/newview/llviewerfloaterreg.cpp1
-rw-r--r--indra/newview/llviewermessage.cpp6
-rw-r--r--indra/newview/llvoicechannel.cpp18
-rw-r--r--indra/newview/llvoiceclient.cpp2
-rw-r--r--indra/newview/llvoiceclient.h1
-rw-r--r--indra/newview/skins/default/xui/en/floater_im_session.xml10
-rw-r--r--indra/newview/skins/default/xui/en/panel_chat_header.xml7
-rw-r--r--indra/newview/skins/default/xui/en/panel_group_roles.xml4
-rw-r--r--indra/newview/skins/default/xui/en/panel_im_control_panel.xml17
-rw-r--r--indra/newview/skins/default/xui/en/panel_people.xml16
25 files changed, 196 insertions, 217 deletions
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 62197406b6..793d7b6207 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -7802,7 +7802,7 @@
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
- <integer>1</integer>
+ <integer>0</integer>
</map>
<key>ShowCrosshairs</key>
<map>
diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp
index a2d594cfa2..0102e9488e 100644
--- a/indra/newview/llbottomtray.cpp
+++ b/indra/newview/llbottomtray.cpp
@@ -474,6 +474,7 @@ void LLBottomTray::onContextMenuItemClicked(const LLSD& userdata)
else if (item == "paste")
{
edit_box->paste();
+ edit_box->setFocus(TRUE);
}
else if (item == "delete")
{
diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp
index 7c22ac9e36..1dc0e8c0a7 100644
--- a/indra/newview/llchathistory.cpp
+++ b/indra/newview/llchathistory.cpp
@@ -53,8 +53,11 @@
#include "llagent.h"
#include "llnotificationsutil.h"
#include "lltoastnotifypanel.h"
+#include "lltooltip.h"
#include "llviewerregion.h"
+#include "llviewertexteditor.h"
#include "llworld.h"
+#include "lluiconstants.h"
#include "llsidetray.h"//for blocked objects panel
@@ -110,6 +113,34 @@ public:
return LLPanel::handleMouseUp(x,y,mask);
}
+ //*TODO remake it using mouse enter/leave and static LLHandle<LLIconCtrl> to add/remove as a child
+ BOOL handleToolTip(S32 x, S32 y, MASK mask)
+ {
+ LLViewerTextEditor* name = getChild<LLViewerTextEditor>("user_name");
+ if (name && name->parentPointInView(x, y) && mAvatarID.notNull() && SYSTEM_FROM != mFrom)
+ {
+
+ // Spawn at right side of the name textbox.
+ LLRect sticky_rect = name->calcScreenRect();
+ S32 icon_x = llmin(sticky_rect.mLeft + name->getTextBoundingRect().getWidth() + 7, sticky_rect.mRight - 3);
+
+ LLToolTip::Params params;
+ params.background_visible(false);
+ params.click_callback(boost::bind(&LLChatHistoryHeader::onHeaderPanelClick, this, 0, 0, 0));
+ params.delay_time(0.0f); // spawn instantly on hover
+ params.image(LLUI::getUIImage("Info_Small"));
+ params.message("");
+ params.padding(0);
+ params.pos(LLCoordGL(icon_x, sticky_rect.mTop - 2));
+ params.sticky_rect(sticky_rect);
+
+ LLToolTipMgr::getInstance()->show(params);
+ return TRUE;
+ }
+
+ return LLPanel::handleToolTip(x, y, mask);
+ }
+
void onObjectIconContextMenuItemClicked(const LLSD& userdata)
{
std::string level = userdata.asString();
@@ -671,8 +702,36 @@ void LLChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL
{
LLToastNotifyPanel* notify_box = new LLToastNotifyPanel(
notification);
+ //we can't set follows in xml since it broke toasts behavior
notify_box->setFollowsLeft();
notify_box->setFollowsRight();
+ notify_box->setFollowsTop();
+
+ LLButton* accept_button = notify_box->getChild<LLButton> ("Accept",
+ TRUE);
+ if (accept_button != NULL)
+ {
+ accept_button->setFollowsNone();
+ accept_button->setOrigin(2*HPAD, accept_button->getRect().mBottom);
+ }
+
+ LLButton* decline_button = notify_box->getChild<LLButton> (
+ "Decline", TRUE);
+ if (accept_button != NULL && decline_button != NULL)
+ {
+ decline_button->setFollowsNone();
+ decline_button->setOrigin(4*HPAD
+ + accept_button->getRect().getWidth(),
+ decline_button->getRect().mBottom);
+ }
+
+ LLTextEditor* text_editor = notify_box->getChild<LLTextEditor>("text_editor_box", TRUE);
+ S32 text_heigth = 0;
+ if(text_editor != NULL)
+ {
+ text_heigth = text_editor->getTextBoundingRect().getHeight();
+ }
+
//Prepare the rect for the view
LLRect target_rect = mEditor->getDocumentView()->getRect();
// squeeze down the widget by subtracting padding off left and right
@@ -682,6 +741,15 @@ void LLChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL
notify_box->getRect().getHeight());
notify_box->setOrigin(target_rect.mLeft, notify_box->getRect().mBottom);
+ if (text_editor != NULL)
+ {
+ S32 text_heigth_delta =
+ text_editor->getTextBoundingRect().getHeight()
+ - text_heigth;
+ notify_box->reshape(target_rect.getWidth(),
+ notify_box->getRect().getHeight() + text_heigth_delta);
+ }
+
LLInlineViewSegment::Params params;
params.view = notify_box;
params.left_pad = mLeftWidgetPad;
diff --git a/indra/newview/llgrouplist.cpp b/indra/newview/llgrouplist.cpp
index e01709aa3a..1ed1113f4d 100644
--- a/indra/newview/llgrouplist.cpp
+++ b/indra/newview/llgrouplist.cpp
@@ -72,6 +72,8 @@ public:
static const LLGroupComparator GROUP_COMPARATOR;
LLGroupList::Params::Params()
+: no_groups_msg("no_groups_msg")
+, no_filtered_groups_msg("no_filtered_groups_msg")
{
}
@@ -79,15 +81,14 @@ LLGroupList::Params::Params()
LLGroupList::LLGroupList(const Params& p)
: LLFlatListView(p)
, mDirty(true) // to force initial update
+ , mNoFilteredGroupsMsg(p.no_filtered_groups_msg)
+ , mNoGroupsMsg(p.no_groups_msg)
{
// Listen for agent group changes.
gAgent.addListener(this, "new group");
mShowIcons = gSavedSettings.getBOOL("GroupListShowIcons");
setCommitOnSelectionChange(true);
- // TODO: implement context menu
- // display a context menu appropriate for a list of group names
-// setContextMenu(LLScrollListCtrl::MENU_GROUP);
// Set default sort order.
setComparator(&GROUP_COMPARATOR);
@@ -158,6 +159,18 @@ void LLGroupList::refresh()
LLUUID id;
bool have_filter = !mNameFilter.empty();
+ // set no items message depend on filter state & total count of groups
+ if (have_filter)
+ {
+ // groups were filtered
+ setNoItemsCommentText(mNoFilteredGroupsMsg);
+ }
+ else if (0 == count)
+ {
+ // user is not a member of any group
+ setNoItemsCommentText(mNoGroupsMsg);
+ }
+
clear();
for(S32 i = 0; i < count; ++i)
@@ -173,7 +186,8 @@ void LLGroupList::refresh()
sort();
// Add "none" to list at top if filter not set (what's the point of filtering "none"?).
- if (!have_filter)
+ // but only if some real groups exists. EXT-4838
+ if (!have_filter && count > 0)
{
std::string loc_none = LLTrans::getString("GroupsNone");
addNewItem(LLUUID::null, loc_none, LLUUID::null, ADD_TOP);
diff --git a/indra/newview/llgrouplist.h b/indra/newview/llgrouplist.h
index f7afe0c0b2..f3ac676edd 100644
--- a/indra/newview/llgrouplist.h
+++ b/indra/newview/llgrouplist.h
@@ -53,6 +53,15 @@ class LLGroupList: public LLFlatListView, public LLOldEvents::LLSimpleListener
public:
struct Params : public LLInitParam::Block<Params, LLFlatListView::Params>
{
+ /**
+ * Contains a message for empty list when user is not a member of any group
+ */
+ Optional<std::string> no_groups_msg;
+
+ /**
+ * Contains a message for empty list when all groups don't match passed filter
+ */
+ Optional<std::string> no_filtered_groups_msg;
Params();
};
@@ -80,6 +89,8 @@ private:
bool mShowIcons;
bool mDirty;
std::string mNameFilter;
+ std::string mNoFilteredGroupsMsg;
+ std::string mNoGroupsMsg;
};
class LLButton;
diff --git a/indra/newview/llgroupmgr.cpp b/indra/newview/llgroupmgr.cpp
index 8bd0e520c3..72a52ba13b 100644
--- a/indra/newview/llgroupmgr.cpp
+++ b/indra/newview/llgroupmgr.cpp
@@ -1714,6 +1714,8 @@ void LLGroupMgr::sendGroupMemberEjects(const LLUUID& group_id,
for (std::vector<LLUUID>::iterator it = member_ids.begin();
it != member_ids.end(); ++it)
{
+ LLUUID& ejected_member_id = (*it);
+
// Can't use 'eject' to leave a group.
if ((*it) == gAgent.getID()) continue;
@@ -1734,7 +1736,7 @@ void LLGroupMgr::sendGroupMemberEjects(const LLUUID& group_id,
}
msg->nextBlock("EjectData");
- msg->addUUID("EjecteeID",(*it));
+ msg->addUUID("EjecteeID",ejected_member_id);
if (msg->isSendFull())
{
@@ -1746,13 +1748,15 @@ void LLGroupMgr::sendGroupMemberEjects(const LLUUID& group_id,
for (LLGroupMemberData::role_list_t::iterator rit = (*mit).second->roleBegin();
rit != (*mit).second->roleEnd(); ++rit)
{
- if ((*rit).first.notNull())
+ if ((*rit).first.notNull() && (*rit).second!=0)
{
- (*rit).second->removeMember(*it);
+ (*rit).second->removeMember(ejected_member_id);
}
}
- delete (*mit).second;
+
group_datap->mMembers.erase(*it);
+
+ delete (*mit).second;
}
}
diff --git a/indra/newview/llimfloater.cpp b/indra/newview/llimfloater.cpp
index 4a18c8640f..1eac90371d 100644
--- a/indra/newview/llimfloater.cpp
+++ b/indra/newview/llimfloater.cpp
@@ -515,7 +515,7 @@ BOOL LLIMFloater::getVisible()
if(isChatMultiTab())
{
LLIMFloaterContainer* im_container = LLIMFloaterContainer::getInstance();
- // Tabbed IM window is "visible" when we minimize it.
+ // getVisible() returns TRUE when Tabbed IM window is minimized.
return !im_container->isMinimized() && im_container->getVisible();
}
else
@@ -572,6 +572,12 @@ void LLIMFloater::sessionInitReplyReceived(const LLUUID& im_session_id)
setKey(im_session_id);
mControlPanel->setSessionId(im_session_id);
}
+
+ // updating "Call" button from group control panel here to enable it without placing into draw() (EXT-4796)
+ if(gAgent.isInGroup(im_session_id))
+ {
+ mControlPanel->updateCallButton();
+ }
//*TODO here we should remove "starting session..." warning message if we added it in postBuild() (IB)
diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index db6b2041f8..0c64c2b032 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -1709,6 +1709,8 @@ BOOL LLOutgoingCallDialog::postBuild()
childSetAction("Cancel", onCancel, this);
+ setCanDrag(FALSE);
+
return success;
}
@@ -1808,6 +1810,8 @@ BOOL LLIncomingCallDialog::postBuild()
mLifetimeTimer.stop();
}
+ setCanDrag(FALSE);
+
return TRUE;
}
@@ -2985,48 +2989,6 @@ public:
}
};
-LLCallInfoDialog::LLCallInfoDialog(const LLSD& payload) : LLCallDialog(payload)
-{
-}
-
-BOOL LLCallInfoDialog::postBuild()
-{
- // init notification's lifetime
- std::istringstream ss( getString("lifetime") );
- if (!(ss >> mLifetime))
- {
- mLifetime = DEFAULT_LIFETIME;
- }
- return LLCallDialog::postBuild();
-}
-
-void LLCallInfoDialog::onOpen(const LLSD& key)
-{
- if(key.has("msg"))
- {
- std::string msg = key["msg"];
- getChild<LLTextBox>("msg")->setValue(msg);
- }
-
- mLifetimeTimer.start();
-}
-
-void LLCallInfoDialog::show(const std::string& status_name, const LLSD& args)
-{
- LLUIString message = LLTrans::getString(status_name);
- message.setArgs(args);
-
- LLSD payload;
- payload["msg"] = message;
- LLFloater* inst = LLFloaterReg::findInstance("call_info");
-
- // avoid recreate instance with the same message
- if (inst == NULL || message.getString() != inst->getChild<LLTextBox>("msg")->getValue())
- {
- LLFloaterReg::showInstance("call_info", payload);
- }
-}
-
LLHTTPRegistration<LLViewerChatterBoxSessionStartReply>
gHTTPRegistrationMessageChatterboxsessionstartreply(
"/message/ChatterBoxSessionStartReply");
diff --git a/indra/newview/llimview.h b/indra/newview/llimview.h
index b573490fa3..1c7aaa3f1b 100644
--- a/indra/newview/llimview.h
+++ b/indra/newview/llimview.h
@@ -530,16 +530,6 @@ private:
void hideAllText();
};
-class LLCallInfoDialog : public LLCallDialog
-{
-public:
- LLCallInfoDialog(const LLSD& payload);
- /*virtual*/ BOOL postBuild();
- /*virtual*/ void onOpen(const LLSD& key);
-
- static void show(const std::string& status_name, const LLSD& args);
-};
-
// Globals
extern LLIMMgr *gIMMgr;
diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp
index 05e366523a..7ec976604a 100644
--- a/indra/newview/llinventorymodel.cpp
+++ b/indra/newview/llinventorymodel.cpp
@@ -142,105 +142,6 @@ bool LLCanCache::operator()(LLInventoryCategory* cat, LLInventoryItem* item)
return rv;
}
-/*
-This namespace contains a functionality to remove LM prefixes were used to store sort order of
-Favorite Landmarks in landmarks' names.
-Once being in Favorites folder LM inventory Item has such prefix.
-Due to another solution is implemented in EXT-3985 these prefixes should be removed.
-
-*NOTE: It will be unnecessary after the first successful session in viewer 2.0.
-Can be removed before public release.
-
-Implementation details:
-At the first run with this patch it patches all cached landmarks: removes LM sort prefixes and
-updates them on the viewer and server sides.
-Also it calls fetching agent's inventory to process not yet loaded landmarks too.
-If fetching is successfully done it will store special per-agent empty file-marker
-in the user temporary folder (where cached inventory is loaded) while caching agent's inventory.
-After that in will not affect the viewer until cached marker is removed.
-*/
-namespace LMSortPrefix
-{
- bool cleanup_done = false;
- const std::string getMarkerPath()
- {
- std::string path(gDirUtilp->getExpandedFilename(LL_PATH_CACHE, gAgentID.asString()));
- std::string marker_filename = llformat("%s-lm_prefix_marker", path.c_str());
-
- return marker_filename;
- }
- bool wasClean()
- {
- static bool was_clean = false;
- static bool already_init = false;
- if (already_init) return was_clean;
-
- already_init = true;
- std::string path_to_marker = getMarkerPath();
- was_clean = LLFile::isfile(path_to_marker);
-
- return was_clean;
- }
-
- void setLandmarksWereCleaned()
- {
- if (cleanup_done)
- {
- std::string path_to_marker = getMarkerPath();
- LLFILE* file = LLFile::fopen(path_to_marker, "w");
- if(!file)
- {
- llwarns << "unable to save marker that LM prefixes were removed: " << path_to_marker << llendl;
- return;
- }
-
- fclose(file);
- }
- }
-
- void removePrefix(LLPointer<LLViewerInventoryItem> inv_item)
- {
- if (wasClean())
- {
- LL_INFOS_ONCE("") << "Inventory was cleaned for this avatar. Patch can be removed." << LL_ENDL;
- return;
- }
-
- if (LLInventoryType::IT_LANDMARK != inv_item->getInventoryType()) return;
-
- std::string old_name = inv_item->getName();
-
- S32 sort_field = -1;
- std::string display_name;
- BOOL exists = LLViewerInventoryItem::extractSortFieldAndDisplayName(old_name, &sort_field, &display_name);
- if (exists && sort_field != -1)
- {
- llinfos << "Removing Landmark sort field and separator for: " << old_name << " | " << inv_item->getUUID() << llendl;
- LLUUID parent_uuid = inv_item->getParentUUID();
- if (gInventory.getCategory(parent_uuid))
- {
- llinfos << "parent folder is: " << gInventory.getCategory(parent_uuid)->getName() << llendl;
- }
-
-
- // mark item completed to avoid error while copying and updating server
- inv_item->setComplete(TRUE);
- LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(inv_item.get());
- new_item->rename(display_name);
- gInventory.updateItem(new_item);
- new_item->updateServer(FALSE);
-
- gInventory.notifyObservers();
- }
- }
-
- void completeCleanup()
- {
- // background fetch is completed. can save marker
- cleanup_done = true;
- }
-}
-
///----------------------------------------------------------------------------
/// Class LLInventoryModel
///----------------------------------------------------------------------------
@@ -1839,8 +1740,6 @@ void LLInventoryModel::stopBackgroundFetch()
gIdleCallbacks.deleteFunction(&LLInventoryModel::backgroundFetch, NULL);
sBulkFetchCount=0;
sMinTimeBetweenFetches=0.0f;
-
- LMSortPrefix::completeCleanup();
}
}
@@ -1987,13 +1886,6 @@ void LLInventoryModel::cache(
const LLUUID& parent_folder_id,
const LLUUID& agent_id)
{
- if (getRootFolderID() == parent_folder_id)
- {
- // *TODO: mantipov: can be removed before public release, EXT-3985
- //save marker to avoid fetching inventory on future sessions
- LMSortPrefix::setLandmarksWereCleaned();
- }
-
lldebugs << "Caching " << parent_folder_id << " for " << agent_id
<< llendl;
LLViewerInventoryCategory* root_cat = getCategory(parent_folder_id);
@@ -2804,28 +2696,6 @@ void LLInventoryModel::buildParentChildMap()
// The inv tree is built.
mIsAgentInvUsable = true;
- {// *TODO: mantipov: can be removed before public release, EXT-3985
- /*
- *HACK: mantipov: to cleanup landmarks were marked with sort index prefix in name.
- Is necessary to be called once per account after EXT-3985 is implemented.
- So, let fetch agent's inventory, processing will be done in processInventoryDescendents()
- Should be removed before public release.
- */
- if (!LMSortPrefix::wasClean())
- {
- cat_array_t cats;
- item_array_t items;
- collectDescendents(agent_inv_root_id, cats, items, INCLUDE_TRASH);
-
- for (item_array_t::const_iterator it= items.begin(); it != items.end(); ++it)
- {
- LMSortPrefix::removePrefix(*it);
- }
-
- gInventory.startBackgroundFetch(agent_inv_root_id);
- }
- }
-
llinfos << "Inventory initialized, notifying observers" << llendl;
addChangedMask(LLInventoryObserver::ALL, LLUUID::null);
notifyObservers();
@@ -3591,10 +3461,6 @@ void LLInventoryModel::processInventoryDescendents(LLMessageSystem* msg,void**)
continue;
}
gInventory.updateItem(titem);
-
- {// *TODO: mantipov: can be removed before public release, EXT-3985
- LMSortPrefix::removePrefix(titem);
- }
}
// set version and descendentcount according to message.
diff --git a/indra/newview/llpanelimcontrolpanel.cpp b/indra/newview/llpanelimcontrolpanel.cpp
index ff1e43b526..d491583b56 100644
--- a/indra/newview/llpanelimcontrolpanel.cpp
+++ b/indra/newview/llpanelimcontrolpanel.cpp
@@ -280,8 +280,6 @@ void LLPanelGroupControlPanel::draw()
// Need to resort the participant list if it's in sort by recent speaker order.
if (mParticipantList)
mParticipantList->updateRecentSpeakersOrder();
- //* TODO: find better way to properly enable call button for group and remove this call from draw()
- updateCallButton();
LLPanelChatControlPanel::draw();
}
diff --git a/indra/newview/llpanelme.cpp b/indra/newview/llpanelme.cpp
index 0f0fb4b94e..ea66ef7d2c 100644
--- a/indra/newview/llpanelme.cpp
+++ b/indra/newview/llpanelme.cpp
@@ -198,6 +198,10 @@ void LLPanelMyProfileEdit::processProfileProperties(const LLAvatarData* avatar_d
{
fillCommonData(avatar_data);
+ // 'Home page' was hidden in LLPanelAvatarProfile::fillCommonData() to fix EXT-4734
+ // Show 'Home page' in Edit My Profile (EXT-4873)
+ childSetVisible("homepage_edit", true);
+
fillPartnerData(avatar_data);
fillAccountStatus(avatar_data);
diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp
index b01cdcc832..423ee61e25 100644
--- a/indra/newview/llpanelpeople.cpp
+++ b/indra/newview/llpanelpeople.cpp
@@ -516,7 +516,6 @@ BOOL LLPanelPeople::postBuild()
mRecentList->setShowIcons("RecentListShowIcons");
mGroupList = getChild<LLGroupList>("group_list");
- mGroupList->setNoItemsCommentText(getString("no_groups"));
mNearbyList->setContextMenu(&LLPanelPeopleMenus::gNearbyMenu);
mRecentList->setContextMenu(&LLPanelPeopleMenus::gNearbyMenu);
@@ -668,6 +667,11 @@ void LLPanelPeople::updateFriendList()
lldebugs << "Friends Cards were not found" << llendl;
}
+ // show special help text for just created account to help found friends. EXT-4836
+ static LLTextBox* no_friends_text = getChild<LLTextBox>("no_friends_msg");
+ no_friends_text->setVisible(all_friendsp.size() == 0);
+
+
LLAvatarTracker::buddy_map_t::const_iterator buddy_it = all_buddies.begin();
for (; buddy_it != all_buddies.end(); ++buddy_it)
{
diff --git a/indra/newview/llpanelteleporthistory.cpp b/indra/newview/llpanelteleporthistory.cpp
index 43e0f9a88c..90c8f2551f 100644
--- a/indra/newview/llpanelteleporthistory.cpp
+++ b/indra/newview/llpanelteleporthistory.cpp
@@ -940,6 +940,9 @@ bool LLTeleportHistoryPanel::onClearTeleportHistoryDialog(const LLSD& notificati
if (0 == option)
{
+ // order does matter, call this first or teleport history will contain one record(current location)
+ LLTeleportHistory::getInstance()->purgeItems();
+
LLTeleportHistoryStorage *th = LLTeleportHistoryStorage::getInstance();
th->purgeItems();
th->save();
diff --git a/indra/newview/llteleporthistory.cpp b/indra/newview/llteleporthistory.cpp
index ce00dec802..dcc85392f7 100644
--- a/indra/newview/llteleporthistory.cpp
+++ b/indra/newview/llteleporthistory.cpp
@@ -173,6 +173,8 @@ void LLTeleportHistory::purgeItems()
// reset the count
mRequestedItem = -1;
mCurrentItem = 0;
+
+ onHistoryChanged();
}
// static
diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp
index 658d1c9ddd..29114c33c5 100644
--- a/indra/newview/llviewerfloaterreg.cpp
+++ b/indra/newview/llviewerfloaterreg.cpp
@@ -200,7 +200,6 @@ void LLViewerFloaterReg::registerFloaters()
LLFloaterReg::add("openobject", "floater_openobject.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterOpenObject>);
LLFloaterReg::add("outgoing_call", "floater_outgoing_call.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLOutgoingCallDialog>);
- LLFloaterReg::add("call_info", "floater_call_info.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLCallInfoDialog>);
LLFloaterReg::add("parcel_info", "floater_preview_url.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterParcelInfo>);
LLFloaterPayUtil::registerFloater();
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index adbe28e9a7..e525561b7d 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -2181,6 +2181,12 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
chat.mFromID = from_id ^ gAgent.getSessionID();
}
+ if(SYSTEM_FROM == name)
+ {
+ // System's UUID is NULL (fixes EXT-4766)
+ chat.mFromID = from_id = LLUUID::null;
+ }
+
LLSD query_string;
query_string["owner"] = from_id;
query_string["slurl"] = location;
diff --git a/indra/newview/llvoicechannel.cpp b/indra/newview/llvoicechannel.cpp
index 9d49fb69d6..bb09a18cc3 100644
--- a/indra/newview/llvoicechannel.cpp
+++ b/indra/newview/llvoicechannel.cpp
@@ -389,13 +389,16 @@ void LLVoiceChannel::setState(EState state)
switch(state)
{
case STATE_RINGING:
- LLCallInfoDialog::show("ringing", mNotifyArgs);
+ //TODO: remove or redirect this call status notification
+// LLCallInfoDialog::show("ringing", mNotifyArgs);
break;
case STATE_CONNECTED:
- LLCallInfoDialog::show("connected", mNotifyArgs);
+ //TODO: remove or redirect this call status notification
+// LLCallInfoDialog::show("connected", mNotifyArgs);
break;
case STATE_HUNG_UP:
- LLCallInfoDialog::show("hang_up", mNotifyArgs);
+ //TODO: remove or redirect this call status notification
+// LLCallInfoDialog::show("hang_up", mNotifyArgs);
break;
default:
break;
@@ -635,7 +638,8 @@ void LLVoiceChannelGroup::setState(EState state)
case STATE_RINGING:
if ( !mIsRetrying )
{
- LLCallInfoDialog::show("ringing", mNotifyArgs);
+ //TODO: remove or redirect this call status notification
+// LLCallInfoDialog::show("ringing", mNotifyArgs);
}
doSetState(state);
@@ -701,7 +705,8 @@ void LLVoiceChannelProximal::handleStatusChange(EStatusType status)
//skip showing "Voice not available at your current location" when agent voice is disabled (EXT-4749)
if(LLVoiceClient::voiceEnabled() && gVoiceClient->voiceWorking())
{
- LLCallInfoDialog::show("unavailable", mNotifyArgs);
+ //TODO: remove or redirect this call status notification
+// LLCallInfoDialog::show("unavailable", mNotifyArgs);
}
return;
default:
@@ -901,7 +906,8 @@ void LLVoiceChannelP2P::setState(EState state)
// so provide a special purpose message here
if (mReceivedCall && state == STATE_RINGING)
{
- LLCallInfoDialog::show("answering", mNotifyArgs);
+ //TODO: remove or redirect this call status notification
+// LLCallInfoDialog::show("answering", mNotifyArgs);
doSetState(state);
return;
}
diff --git a/indra/newview/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp
index 73e1b312fa..b6e7e73b9d 100644
--- a/indra/newview/llvoiceclient.cpp
+++ b/indra/newview/llvoiceclient.cpp
@@ -5980,8 +5980,10 @@ bool LLVoiceClient::voiceEnabled()
return gSavedSettings.getBOOL("EnableVoiceChat") && !gSavedSettings.getBOOL("CmdLineDisableVoice");
}
+//AD *TODO: investigate possible merge of voiceWorking() and voiceEnabled() into one non-static method
bool LLVoiceClient::voiceWorking()
{
+ //Added stateSessionTerminated state to avoid problems with call in parcels with disabled voice (EXT-4758)
return (stateLoggedIn <= mState) && (mState <= stateSessionTerminated);
}
diff --git a/indra/newview/llvoiceclient.h b/indra/newview/llvoiceclient.h
index 8f668dff19..a96cf18e27 100644
--- a/indra/newview/llvoiceclient.h
+++ b/indra/newview/llvoiceclient.h
@@ -192,6 +192,7 @@ static void updatePosition(void);
void setVoiceEnabled(bool enabled);
static bool voiceEnabled();
// Checks is voice working judging from mState
+ // Returns true if vivox has successfully logged in and is not in error state
bool voiceWorking();
void setUsePTT(bool usePTT);
void setPTTIsToggle(bool PTTIsToggle);
diff --git a/indra/newview/skins/default/xui/en/floater_im_session.xml b/indra/newview/skins/default/xui/en/floater_im_session.xml
index 9aaa660574..d2e5473157 100644
--- a/indra/newview/skins/default/xui/en/floater_im_session.xml
+++ b/indra/newview/skins/default/xui/en/floater_im_session.xml
@@ -12,7 +12,7 @@
can_minimize="true"
can_close="true"
visible="false"
- width="440"
+ width="360"
can_resize="true"
min_width="250"
min_height="190">
@@ -20,7 +20,7 @@
animate="false"
follows="all"
height="320"
- width="440"
+ width="360"
layout="topleft"
orientation="horizontal"
name="im_panels"
@@ -38,7 +38,7 @@
left="0"
top="0"
height="200"
- width="325"
+ width="245"
user_resize="true">
<button
height="20"
@@ -65,7 +65,7 @@
parse_highlights="true"
allow_html="true"
left="1"
- width="320">
+ width="240">
</chat_history>
<line_editor
bottom="0"
@@ -75,7 +75,7 @@
label="To"
layout="bottomleft"
name="chat_editor"
- width="320">
+ width="240">
</line_editor>
</layout_panel>
</layout_stack>
diff --git a/indra/newview/skins/default/xui/en/panel_chat_header.xml b/indra/newview/skins/default/xui/en/panel_chat_header.xml
index 39c4923f12..89d632c4c6 100644
--- a/indra/newview/skins/default/xui/en/panel_chat_header.xml
+++ b/indra/newview/skins/default/xui/en/panel_chat_header.xml
@@ -21,19 +21,20 @@
width="18" />
<text_editor
allow_scroll="false"
- v_pad = "0"
+ v_pad = "7"
read_only = "true"
follows="left|right"
font.style="BOLD"
- height="12"
+ height="24"
layout="topleft"
left_pad="5"
right="-120"
name="user_name"
text_color="white"
bg_readonly_color="black"
- top="8"
+ top="0"
use_ellipses="true"
+ valign="bottom"
value="Ericag Vader" />
<text
font="SansSerifSmall"
diff --git a/indra/newview/skins/default/xui/en/panel_group_roles.xml b/indra/newview/skins/default/xui/en/panel_group_roles.xml
index f19057cae3..25a0213bde 100644
--- a/indra/newview/skins/default/xui/en/panel_group_roles.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_roles.xml
@@ -495,6 +495,10 @@ things in this group. There&apos;s a broad variety of Abilities.
width="300">
<scroll_list.columns
label=""
+ name="icon"
+ width="2" />
+ <scroll_list.columns
+ label=""
name="checkbox"
width="20" />
<scroll_list.columns
diff --git a/indra/newview/skins/default/xui/en/panel_im_control_panel.xml b/indra/newview/skins/default/xui/en/panel_im_control_panel.xml
index c971914a2d..c7e5b25e06 100644
--- a/indra/newview/skins/default/xui/en/panel_im_control_panel.xml
+++ b/indra/newview/skins/default/xui/en/panel_im_control_panel.xml
@@ -120,6 +120,23 @@
layout="topleft"
min_height="25"
width="100"
+ name="share_btn_panel"
+ user_resize="false">
+ <button
+ auto_resize="true"
+ follows="left|top|right"
+ height="23"
+ label="Pay"
+ name="pay_btn"
+ width="100" />
+ </layout_panel>
+ <layout_panel
+ auto_resize="false"
+ follows="top|left|right"
+ height="25"
+ layout="topleft"
+ min_height="25"
+ width="100"
name="call_btn_panel"
user_resize="false">
<button
diff --git a/indra/newview/skins/default/xui/en/panel_people.xml b/indra/newview/skins/default/xui/en/panel_people.xml
index ac98bb9bd9..3b5add33a8 100644
--- a/indra/newview/skins/default/xui/en/panel_people.xml
+++ b/indra/newview/skins/default/xui/en/panel_people.xml
@@ -24,9 +24,6 @@ background_visible="true"
name="no_friends"
value="No friends" />
<string
- name="no_groups"
- value="No groups" />
- <string
name="people_filter_label"
value="Filter People" />
<string
@@ -163,6 +160,17 @@ background_visible="true"
width="313" />
</accordion_tab>
</accordion>
+ <text
+ follows="all"
+ height="450"
+ left="10"
+ name="no_friends_msg"
+ top="10"
+ width="293"
+ wrap="true">
+ To add friends try [secondlife:///app/search/people global search] or click on a user to add them as a friend.
+If you're looking for people to hang out with, [secondlife:///app/worldmap try the Map].
+ </text>
<panel
follows="left|right|bottom"
height="30"
@@ -226,6 +234,8 @@ background_visible="true"
layout="topleft"
left="0"
name="group_list"
+ no_filtered_groups_msg="No groups"
+ no_groups_msg="[secondlife:///app/search/groups Trying searching for some groups to join.]"
top="0"
width="313" />
<panel