Fix for normal bug EXT-2564 - collapsed All friends list reopens if online friends list changes.
--HG-- branch : product-enginemaster
parent
25085a67f4
commit
a671c4963a
|
|
@ -71,6 +71,8 @@ static const std::string FRIENDS_TAB_NAME = "friends_panel";
|
|||
static const std::string GROUP_TAB_NAME = "groups_panel";
|
||||
static const std::string RECENT_TAB_NAME = "recent_panel";
|
||||
|
||||
static const std::string COLLAPSED_BY_USER = "collapsed_by_user";
|
||||
|
||||
/** Comparator for comparing avatar items by last interaction date */
|
||||
class LLAvatarItemRecentComparator : public LLAvatarItemComparator
|
||||
{
|
||||
|
|
@ -465,7 +467,7 @@ LLPanelPeople::~LLPanelPeople()
|
|||
|
||||
}
|
||||
|
||||
void LLPanelPeople::onFriendsAccordionExpandedCollapsed(const LLSD& param, LLAvatarList* avatar_list)
|
||||
void LLPanelPeople::onFriendsAccordionExpandedCollapsed(LLUICtrl* ctrl, const LLSD& param, LLAvatarList* avatar_list)
|
||||
{
|
||||
if(!avatar_list)
|
||||
{
|
||||
|
|
@ -478,6 +480,12 @@ void LLPanelPeople::onFriendsAccordionExpandedCollapsed(const LLSD& param, LLAva
|
|||
if(!expanded)
|
||||
{
|
||||
avatar_list->resetSelection();
|
||||
|
||||
setAccordionCollapsedByUser(ctrl, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
setAccordionCollapsedByUser(ctrl, false);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -548,11 +556,11 @@ BOOL LLPanelPeople::postBuild()
|
|||
|
||||
LLAccordionCtrlTab* accordion_tab = getChild<LLAccordionCtrlTab>("tab_all");
|
||||
accordion_tab->setDropDownStateChangedCallback(
|
||||
boost::bind(&LLPanelPeople::onFriendsAccordionExpandedCollapsed, this, _2, mAllFriendList));
|
||||
boost::bind(&LLPanelPeople::onFriendsAccordionExpandedCollapsed, this, _1, _2, mAllFriendList));
|
||||
|
||||
accordion_tab = getChild<LLAccordionCtrlTab>("tab_online");
|
||||
accordion_tab->setDropDownStateChangedCallback(
|
||||
boost::bind(&LLPanelPeople::onFriendsAccordionExpandedCollapsed, this, _2, mOnlineFriendList));
|
||||
boost::bind(&LLPanelPeople::onFriendsAccordionExpandedCollapsed, this, _1, _2, mOnlineFriendList));
|
||||
|
||||
buttonSetAction("view_profile_btn", boost::bind(&LLPanelPeople::onViewProfileButtonClicked, this));
|
||||
buttonSetAction("group_info_btn", boost::bind(&LLPanelPeople::onGroupInfoButtonClicked, this));
|
||||
|
|
@ -929,6 +937,9 @@ void LLPanelPeople::onFilterEdit(const std::string& search_string)
|
|||
mRecentList->setNameFilter(mFilterSubString);
|
||||
mGroupList->setNameFilter(mFilterSubString);
|
||||
|
||||
setAccordionCollapsedByUser("tab_online", false);
|
||||
setAccordionCollapsedByUser("tab_all", false);
|
||||
|
||||
showFriendsAccordionsIfNeeded();
|
||||
}
|
||||
|
||||
|
|
@ -1282,8 +1293,12 @@ void LLPanelPeople::showAccordion(const std::string name, bool show)
|
|||
tab->setVisible(show);
|
||||
if(show)
|
||||
{
|
||||
// expand accordion
|
||||
tab->changeOpenClose(false);
|
||||
// don't expand accordion if it was collapsed by user
|
||||
if(!isAccordionCollapsedByUser(tab))
|
||||
{
|
||||
// expand accordion
|
||||
tab->changeOpenClose(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1315,3 +1330,40 @@ void LLPanelPeople::onFriendListRefreshComplete(LLUICtrl*ctrl, const LLSD& param
|
|||
LLAccordionCtrl* accordion = getChild<LLAccordionCtrl>("friends_accordion");
|
||||
accordion->arrange();
|
||||
}
|
||||
|
||||
void LLPanelPeople::setAccordionCollapsedByUser(LLUICtrl* acc_tab, bool collapsed)
|
||||
{
|
||||
if(!acc_tab)
|
||||
{
|
||||
llwarns << "Invalid parameter" << llendl;
|
||||
return;
|
||||
}
|
||||
|
||||
LLSD param = acc_tab->getValue();
|
||||
param[COLLAPSED_BY_USER] = collapsed;
|
||||
acc_tab->setValue(param);
|
||||
}
|
||||
|
||||
void LLPanelPeople::setAccordionCollapsedByUser(const std::string& name, bool collapsed)
|
||||
{
|
||||
setAccordionCollapsedByUser(getChild<LLUICtrl>(name), collapsed);
|
||||
}
|
||||
|
||||
bool LLPanelPeople::isAccordionCollapsedByUser(LLUICtrl* acc_tab)
|
||||
{
|
||||
if(!acc_tab)
|
||||
{
|
||||
llwarns << "Invalid parameter" << llendl;
|
||||
return false;
|
||||
}
|
||||
|
||||
LLSD param = acc_tab->getValue();
|
||||
return param[COLLAPSED_BY_USER].asBoolean();
|
||||
}
|
||||
|
||||
bool LLPanelPeople::isAccordionCollapsedByUser(const std::string& name)
|
||||
{
|
||||
return isAccordionCollapsedByUser(getChild<LLUICtrl>(name));
|
||||
}
|
||||
|
||||
// EOF
|
||||
|
|
|
|||
|
|
@ -127,7 +127,7 @@ private:
|
|||
const std::vector<LLUUID>& ids,
|
||||
void*);
|
||||
|
||||
void onFriendsAccordionExpandedCollapsed(const LLSD& param, LLAvatarList* avatar_list);
|
||||
void onFriendsAccordionExpandedCollapsed(LLUICtrl* ctrl, const LLSD& param, LLAvatarList* avatar_list);
|
||||
|
||||
void showAccordion(const std::string name, bool show);
|
||||
|
||||
|
|
@ -135,6 +135,11 @@ private:
|
|||
|
||||
void onFriendListRefreshComplete(LLUICtrl*ctrl, const LLSD& param);
|
||||
|
||||
void setAccordionCollapsedByUser(LLUICtrl* acc_tab, bool collapsed);
|
||||
void setAccordionCollapsedByUser(const std::string& name, bool collapsed);
|
||||
bool isAccordionCollapsedByUser(LLUICtrl* acc_tab);
|
||||
bool isAccordionCollapsedByUser(const std::string& name);
|
||||
|
||||
LLFilterEditor* mFilterEditor;
|
||||
LLTabContainer* mTabContainer;
|
||||
LLAvatarList* mOnlineFriendList;
|
||||
|
|
|
|||
Loading…
Reference in New Issue