Merge LL 3.7.3 (Viewer-Bear fixes)

Tank_Master 2014-03-17 14:14:15 -07:00
commit 3d1ac7c0ec
142 changed files with 1345 additions and 1395 deletions

View File

@ -34,6 +34,7 @@ d1723a46b2470fc718a51b6e0c5df6a7f2c02d14 Firestorm_4.3.1_Release
13c2058a91bb72610b0241f5d0e8224cb5ad91ee Firestorm_4.4.0_Release
e76135ef78cb1f63c10eecec5d043e24d4358bf6 Firestorm_4.4.1_Release
ad5581d9b1142e48cd41727cb2262580988aafb2 Firestorm_4.4.2_Release
b8be9b6b364f29529492eee64af233465e15d12b Firestorm_4.5.1_Beta
bb38ff1a763738609e1b3cada6d15fa61e5e84b9 2.1.1-release
003dd9461bfa479049afcc34545ab3431b147c7c v2start
52d96ad3d39be29147c5b2181b3bb46af6164f0e alpha-3
@ -512,4 +513,4 @@ d40c66e410741de7e90b1ed6dac28dd8a2d7e1f6 3.6.8-release
5d746de933a98ca17887cde2fece80e9c7ab0b98 3.7.0-release
dcb4981ce255841b6083d8f65444b65d5a733a17 3.7.1-release
b842534cb4d76c9ef87676a62b1d2d19e79c015f 3.7.2-release
b8be9b6b364f29529492eee64af233465e15d12b Firestorm_4.5.1_Beta
962d3f98955bfc7310a7867c8cbc3df075e54aa9 3.7.3-release

View File

@ -49,17 +49,11 @@ viewer_channel = "Second Life Test"
# Setup default packaging parameters.
sourceid = ""
additional_packages = "Amazon Desura A B C"
additional_packages = "Amazon Desura"
Amazon_sourceid = "1207v_Amazon"
Amazon_viewer_channel_suffix = "Amazon"
Desura_sourceid = "1208_desura"
Desura_viewer_channel_suffix = "Desura"
A_sourceid = "1300_A"
A_viewer_channel_suffix = "A"
B_sourceid = "1301_B"
B_viewer_channel_suffix = "B"
C_sourceid = "1302_C"
C_viewer_channel_suffix = "C"
# Report changes since...
viewer-development.show_changes_since = last_sprint

View File

@ -313,10 +313,6 @@ LLAvatarAppearance::~LLAvatarAppearance()
clearSkeleton();
deleteAndClearArray(mCollisionVolumes);
deleteAndClear(mTexSkinColor);
deleteAndClear(mTexHairColor);
deleteAndClear(mTexEyeColor);
std::for_each(mPolyMeshes.begin(), mPolyMeshes.end(), DeletePairedPointer());
mPolyMeshes.clear();

View File

@ -94,6 +94,11 @@ void LLListener_FMODEX::orient(LLVector3 up, LLVector3 at)
//-----------------------------------------------------------------------
void LLListener_FMODEX::commitDeferredChanges()
{
if(!mSystem)
{
return;
}
mSystem->update();
}

View File

@ -50,7 +50,7 @@
#endif // LL_WINDOWS
// [/SL:KB]
LLPumpIO* gServicePump;
LLPumpIO* gServicePump = NULL;
BOOL gBreak = false;
BOOL gSent = false;
@ -102,7 +102,8 @@ LLCrashLogger::LLCrashLogger() :
LLCrashLogger::~LLCrashLogger()
{
delete gServicePump;
gServicePump = NULL;
}
// TRIM_SIZE must remain larger than LINE_SEARCH_SIZE.

View File

@ -38,7 +38,7 @@ namespace
{
typedef std::map<LLHost, LLHTTPSender*> SenderMap;
static SenderMap senderMap;
static LLHTTPSender* defaultSender = new LLHTTPSender();
static LLPointer<LLHTTPSender> defaultSender(new LLHTTPSender());
}
//virtual
@ -90,6 +90,5 @@ void LLHTTPSender::clearSender(const LLHost& host)
//static
void LLHTTPSender::setDefaultSender(LLHTTPSender* sender)
{
delete defaultSender;
defaultSender = sender;
}

View File

@ -32,7 +32,7 @@
class LLHost;
class LLSD;
class LLHTTPSender
class LLHTTPSender : public LLThreadSafeRefCount
{
public:

View File

@ -93,15 +93,17 @@ void LLTemplateMessageReader::getData(const char *blockname, const char *varname
}
LLMsgBlkData *msg_block_data = iter->second;
LLMsgVarData& vardata = msg_block_data->mMemberVarData[vnamep];
LLMsgBlkData::msg_var_data_map_t &var_data_map = msg_block_data->mMemberVarData;
if (!vardata.getName())
if (var_data_map.find(vnamep) == var_data_map.end())
{
llerrs << "Variable "<< vnamep << " not in message "
<< mCurrentRMessageData->mName<< " block " << bnamep << llendl;
return;
}
LLMsgVarData& vardata = msg_block_data->mMemberVarData[vnamep];
if (size && size != vardata.getSize())
{
llerrs << "Msg " << mCurrentRMessageData->mName

View File

@ -3042,12 +3042,23 @@ void LLMessageSystem::setExceptionFunc(EMessageException e,
BOOL LLMessageSystem::callExceptionFunc(EMessageException exception)
{
callbacks_t::iterator it = mExceptionCallbacks.find(exception);
if(it != mExceptionCallbacks.end())
if(it == mExceptionCallbacks.end())
{
((*it).second.first)(this, (*it).second.second,exception);
return TRUE;
return FALSE;
}
return FALSE;
exception_t& ex = it->second;
msg_exception_callback ex_cb = ex.first;
if (!ex_cb)
{
LL_WARNS("Messaging") << "LLMessageSystem::callExceptionFunc: bad message exception callback." << llendl;
return FALSE;
}
(ex_cb)(this, ex.second, exception);
return TRUE;
}
void LLMessageSystem::setTimingFunc(msg_timing_callback func, void* data)

View File

@ -324,14 +324,15 @@ BOOL LLDragHandle::handleHover(S32 x, S32 y, MASK mask)
S32 delta_y = screen_y - mDragLastScreenY;
// if dragging a docked floater we want to undock
if (((LLFloater*)getParent())->isDocked())
LLFloater * parent = dynamic_cast<LLFloater *>(getParent());
if (parent && parent->isDocked())
{
const S32 SLOP = 12;
if (delta_y <= -SLOP ||
delta_y >= SLOP)
{
((LLFloater*)getParent())->setDocked(false, false);
parent->setDocked(false, false);
return TRUE;
}
else

View File

@ -521,8 +521,8 @@ LLFloater::~LLFloater()
if( gFocusMgr.childHasKeyboardFocus(this))
{
// Just in case we might still have focus here, release it.
releaseFocus();
// Just in case we might still have focus here, release it.
releaseFocus();
}
// This is important so that floaters with persistent rects (i.e., those
@ -540,7 +540,6 @@ LLFloater::~LLFloater()
setVisible(false); // We're not visible if we're destroyed
storeVisibilityControl();
storeDockStateControl();
delete mMinimizeSignal;
}
@ -1203,7 +1202,11 @@ void LLFloater::handleReshape(const LLRect& new_rect, bool by_user)
if (by_user && !getHost())
{
static_cast<LLFloaterView*>(getParent())->adjustToFitScreen(this, !isMinimized());
LLFloaterView * floaterVp = dynamic_cast<LLFloaterView*>(getParent());
if (floaterVp)
{
floaterVp->adjustToFitScreen(this, !isMinimized());
}
}
// if not minimized, adjust all snapped dependents to new shape
@ -1414,11 +1417,8 @@ void LLFloater::setFocus( BOOL b )
if (b)
{
// only push focused floaters to front of stack if not in midst of ctrl-tab cycle
// <FS:ND/> Don't use C-cast to cast between objects.
// if (!getHost() && !((LLFloaterView*)getParent())->getCycleMode())
LLFloaterView *pParent = dynamic_cast<LLFloaterView*>(getParent());
if (!getHost() && pParent && !pParent->getCycleMode() )
LLFloaterView * parent = dynamic_cast<LLFloaterView *>(getParent());
if (!getHost() && parent && !parent->getCycleMode())
{
if (!isFrontmost())
{
@ -1688,10 +1688,7 @@ void LLFloater::bringToFront( S32 x, S32 y )
}
else
{
// <FS:ND/> Don't use C-cast to cast between objects.
// LLFloaterView* parent = (LLFloaterView*) getParent();
LLFloaterView* parent = dynamic_cast<LLFloaterView*>( getParent() );
if (parent)
{
parent->bringToFront( this );
@ -1726,16 +1723,15 @@ void LLFloater::setFrontmost(BOOL take_focus)
// the appropriate panel
hostp->showFloater(this);
}
else if( getParent() )
else
{
// there are more than one floater view
// so we need to query our parent directly
// <FS:ND/> Don't use C-cast to cast between objects.
// ((LLFloaterView*)getParent())->bringToFront(this, take_focus);
LLFloaterView* pView = dynamic_cast<LLFloaterView*>(getParent());
if( pView )
pView->bringToFront(this, take_focus);
LLFloaterView * parent = dynamic_cast<LLFloaterView*>( getParent() );
if (parent)
{
parent->bringToFront(this, take_focus);
}
// Make sure to set the appropriate transparency type (STORM-732).
updateTransparency(hasFocus() || getIsChrome() ? TT_ACTIVE : TT_INACTIVE);
@ -2484,6 +2480,9 @@ LLRect LLFloaterView::findNeighboringPosition( LLFloater* reference_floater, LLF
void LLFloaterView::bringToFront(LLFloater* child, BOOL give_focus)
{
if (!child)
return;
if (mFrontChild == child)
{
if (give_focus && !gFocusMgr.childHasKeyboardFocus(child))
@ -2961,9 +2960,9 @@ void LLFloaterView::adjustToFitScreen(LLFloater* floater, BOOL allow_partial_out
}
}
const LLRect& left_toolbar_rect = mToolbarRects[LLToolBarEnums::TOOLBAR_LEFT];
const LLRect& bottom_toolbar_rect = mToolbarRects[LLToolBarEnums::TOOLBAR_BOTTOM];
const LLRect& right_toolbar_rect = mToolbarRects[LLToolBarEnums::TOOLBAR_RIGHT];
const LLRect& left_toolbar_rect = mToolbarLeftRect;
const LLRect& bottom_toolbar_rect = mToolbarBottomRect;
const LLRect& right_toolbar_rect = mToolbarRightRect;
const LLRect& floater_rect = floater->getRect();
S32 delta_left = left_toolbar_rect.notEmpty() ? left_toolbar_rect.mRight - floater_rect.mRight : 0;
@ -3070,10 +3069,13 @@ LLFloater *LLFloaterView::getFocusedFloater() const
{
for ( child_list_const_iter_t child_it = getChildList()->begin(); child_it != getChildList()->end(); ++child_it)
{
LLUICtrl* ctrlp = (*child_it)->isCtrl() ? static_cast<LLUICtrl*>(*child_it) : NULL;
if ( ctrlp && ctrlp->hasFocus() )
if ((*child_it)->isCtrl())
{
return static_cast<LLFloater *>(ctrlp);
LLFloater* ctrlp = dynamic_cast<LLFloater*>(*child_it);
if ( ctrlp && ctrlp->hasFocus() )
{
return ctrlp;
}
}
}
return NULL;
@ -3226,9 +3228,20 @@ void LLFloaterView::popVisibleAll(const skip_list_t& skip_list)
void LLFloaterView::setToolbarRect(LLToolBarEnums::EToolBarLocation tb, const LLRect& toolbar_rect)
{
if (tb < LLToolBarEnums::TOOLBAR_COUNT)
switch (tb)
{
mToolbarRects[tb] = toolbar_rect;
case LLToolBarEnums::TOOLBAR_LEFT:
mToolbarLeftRect = toolbar_rect;
break;
case LLToolBarEnums::TOOLBAR_BOTTOM:
mToolbarBottomRect = toolbar_rect;
break;
case LLToolBarEnums::TOOLBAR_RIGHT:
mToolbarRightRect = toolbar_rect;
break;
default:
llwarns << "setToolbarRect() passed odd toolbar number " << (S32) tb << llendl;
break;
}
}

View File

@ -595,7 +595,9 @@ private:
void hiddenFloaterClosed(LLFloater* floater);
LLRect mLastSnapRect;
LLRect mToolbarRects[LLToolBarEnums::TOOLBAR_COUNT];
LLRect mToolbarLeftRect;
LLRect mToolbarBottomRect;
LLRect mToolbarRightRect;
LLHandle<LLView> mSnapView;
BOOL mFocusCycleMode;
S32 mSnapOffsetBottom;

View File

@ -693,8 +693,11 @@ void LLMenuItemTearOffGL::onCommit()
{
if (getMenu()->getTornOff())
{
LLTearOffMenu* torn_off_menu = (LLTearOffMenu*)(getMenu()->getParent());
torn_off_menu->closeFloater();
LLTearOffMenu * torn_off_menu = dynamic_cast<LLTearOffMenu*>(getMenu()->getParent());
if (torn_off_menu)
{
torn_off_menu->closeFloater();
}
}
else
{
@ -1097,7 +1100,8 @@ void LLMenuItemBranchGL::setHighlight( BOOL highlight )
BOOL auto_open = getEnabled() && (!branch->getVisible() || branch->getTornOff());
// torn off menus don't open sub menus on hover unless they have focus
if (getMenu()->getTornOff() && !((LLFloater*)getMenu()->getParent())->hasFocus())
LLFloater * menu_parent = dynamic_cast<LLFloater *>(getMenu()->getParent());
if (getMenu()->getTornOff() && menu_parent && !menu_parent->hasFocus())
{
auto_open = FALSE;
}
@ -1118,7 +1122,11 @@ void LLMenuItemBranchGL::setHighlight( BOOL highlight )
{
if (branch->getTornOff())
{
((LLFloater*)branch->getParent())->setFocus(FALSE);
LLFloater * branch_parent = dynamic_cast<LLFloater *>(branch->getParent());
if (branch_parent)
{
branch_parent->setFocus(FALSE);
}
branch->clearHoverItem();
}
else
@ -1175,11 +1183,19 @@ BOOL LLMenuItemBranchGL::handleKeyHere( KEY key, MASK mask )
BOOL handled = branch->clearHoverItem();
if (branch->getTornOff())
{
((LLFloater*)branch->getParent())->setFocus(FALSE);
LLFloater * branch_parent = dynamic_cast<LLFloater *>(branch->getParent());
if (branch_parent)
{
branch_parent->setFocus(FALSE);
}
}
if (handled && getMenu()->getTornOff())
{
((LLFloater*)getMenu()->getParent())->setFocus(TRUE);
LLFloater * menu_parent = dynamic_cast<LLFloater *>(getMenu()->getParent());
if (menu_parent)
{
menu_parent->setFocus(TRUE);
}
}
return handled;
}
@ -1219,9 +1235,13 @@ void LLMenuItemBranchGL::openMenu()
if (branch->getTornOff())
{
gFloaterView->bringToFront((LLFloater*)branch->getParent());
// this might not be necessary, as torn off branches don't get focus and hence no highligth
branch->highlightNextItem(NULL);
LLFloater * branch_parent = dynamic_cast<LLFloater *>(branch->getParent());
if (branch_parent)
{
gFloaterView->bringToFront(branch_parent);
// this might not be necessary, as torn off branches don't get focus and hence no highligth
branch->highlightNextItem(NULL);
}
}
else if( !branch->getVisible() )
{
@ -1348,7 +1368,11 @@ void LLMenuItemBranchDownGL::openMenu( void )
{
if (branch->getTornOff())
{
gFloaterView->bringToFront((LLFloater*)branch->getParent());
LLFloater * branch_parent = dynamic_cast<LLFloater *>(branch->getParent());
if (branch_parent)
{
gFloaterView->bringToFront(branch_parent);
}
}
else
{
@ -1403,7 +1427,11 @@ void LLMenuItemBranchDownGL::setHighlight( BOOL highlight )
{
if (branch->getTornOff())
{
((LLFloater*)branch->getParent())->setFocus(FALSE);
LLFloater * branch_parent = dynamic_cast<LLFloater *>(branch->getParent());
if (branch_parent)
{
branch_parent->setFocus(FALSE);
}
branch->clearHoverItem();
}
else
@ -1826,20 +1854,28 @@ BOOL LLMenuGL::jumpKeysActive()
{
LLMenuItemGL* highlighted_item = getHighlightedItem();
BOOL active = getVisible() && getEnabled();
if (getTornOff())
{
// activation of jump keys on torn off menus controlled by keyboard focus
active = active && ((LLFloater*)getParent())->hasFocus();
}
else
if (active)
{
// Are we the terminal active menu?
// Yes, if parent menu item deems us to be active (just being visible is sufficient for top-level menus)
// and we don't have a highlighted menu item pointing to an active sub-menu
active = active && (!getParentMenuItem() || getParentMenuItem()->isActive()) // I have a parent that is active...
&& (!highlighted_item || !highlighted_item->isActive()); //... but no child that is active
if (getTornOff())
{
// activation of jump keys on torn off menus controlled by keyboard focus
LLFloater * parent = dynamic_cast<LLFloater *>(getParent());
if (parent)
{
active = parent->hasFocus();
}
}
else
{
// Are we the terminal active menu?
// Yes, if parent menu item deems us to be active (just being visible is sufficient for top-level menus)
// and we don't have a highlighted menu item pointing to an active sub-menu
active = (!getParentMenuItem() || getParentMenuItem()->isActive()) // I have a parent that is active...
&& (!highlighted_item || !highlighted_item->isActive()); //... but no child that is active
}
}
return active;
}
@ -1855,7 +1891,12 @@ BOOL LLMenuGL::isOpen()
return TRUE;
}
// otherwise we are only active if we have keyboard focus
return ((LLFloater*)getParent())->hasFocus();
LLFloater * parent = dynamic_cast<LLFloater *>(getParent());
if (parent)
{
return parent->hasFocus();
}
return FALSE;
}
else
{
@ -2717,7 +2758,11 @@ LLMenuItemGL* LLMenuGL::highlightNextItem(LLMenuItemGL* cur_item, BOOL skip_disa
// same as giving focus to it
if (!cur_item && getTornOff())
{
((LLFloater*)getParent())->setFocus(TRUE);
LLFloater * parent = dynamic_cast<LLFloater *>(getParent());
if (parent)
{
parent->setFocus(TRUE);
}
}
// Current item position in the items list
@ -2819,7 +2864,11 @@ LLMenuItemGL* LLMenuGL::highlightPrevItem(LLMenuItemGL* cur_item, BOOL skip_disa
// same as giving focus to it
if (!cur_item && getTornOff())
{
((LLFloater*)getParent())->setFocus(TRUE);
LLFloater * parent = dynamic_cast<LLFloater *>(getParent());
if (parent)
{
parent->setFocus(TRUE);
}
}
// Current item reverse position from the end of the list

View File

@ -330,27 +330,26 @@ private:
// local static instance for registering a particular panel class
template<typename T>
class LLRegisterPanelClassWrapper
: public LLRegisterPanelClass
class LLPanelInjector
{
public:
// reigister with either the provided builder, or the generic templated builder
LLRegisterPanelClassWrapper(const std::string& tag);
// register with either the provided builder, or the generic templated builder
LLPanelInjector(const std::string& tag);
// [SL:KB] - Patch: UI-Base | Checked: 2010-12-01 (Catznip-3.0.0a) | Added: Catznip-2.4.0g
LLRegisterPanelClassWrapper(const std::string& tag, LLPanelClassCreatorFunc func);
LLPanelInjector(const std::string& tag, LLPanelClassCreatorFunc func);
// [/SL:KB]
};
template<typename T>
LLRegisterPanelClassWrapper<T>::LLRegisterPanelClassWrapper(const std::string& tag)
LLPanelInjector<T>::LLPanelInjector(const std::string& tag)
{
LLRegisterPanelClass::instance().addPanelClass(tag,&LLRegisterPanelClass::defaultPanelClassBuilder<T>);
}
// [SL:KB] - Patch: UI-Base | Checked: 2010-12-01 (Catznip-3.0.0a) | Added: Catznip-2.4.0g
template<typename T>
LLRegisterPanelClassWrapper<T>::LLRegisterPanelClassWrapper(const std::string& tag, LLPanelClassCreatorFunc func)
LLPanelInjector<T>::LLPanelInjector(const std::string& tag, LLPanelClassCreatorFunc func)
{
LLRegisterPanelClass::instance().addPanelClass(tag, func);
}

View File

@ -1986,7 +1986,7 @@ void LLScrollListCtrl::showNameDetails(std::string id, bool is_group)
// open the resident's details or the group details
std::string sltype = is_group ? "group" : "agent";
std::string slurl = "secondlife:///app/" + sltype + "/" + id + "/about";
LLUrlAction::clickAction(slurl);
LLUrlAction::clickAction(slurl, true);
}
void LLScrollListCtrl::copyNameToClipboard(std::string id, bool is_group)

View File

@ -180,6 +180,7 @@ LLTextBase::Params::Params()
max_text_length("max_length", 255),
font_shadow("font_shadow"),
wrap("wrap"),
trusted_content("trusted_content", true),
use_ellipses("use_ellipses", false),
// <FS:Ansariel> Optional icon position
icon_positioning("icon_positioning", LLTextBaseEnums::RIGHT),
@ -227,6 +228,7 @@ LLTextBase::LLTextBase(const LLTextBase::Params &p)
mLineSpacingPixels(p.line_spacing.pixels),
mClip(p.clip),
mClipPartial(p.clip_partial && !p.allow_scroll),
mTrustedContent(p.trusted_content),
mTrackEnd( p.track_end ),
mScrollIndex(-1),
mSelectionStart( 0 ),
@ -3317,7 +3319,7 @@ BOOL LLNormalTextSegment::handleMouseUp(S32 x, S32 y, MASK mask)
// Only process the click if it's actually in this segment, not to the right of the end-of-line.
if(mEditor.getSegmentAtLocalPos(x, y, false) == this)
{
LLUrlAction::clickAction(getStyle()->getLinkHREF());
LLUrlAction::clickAction(getStyle()->getLinkHREF(), mEditor.isContentTrusted());
return TRUE;
}
}

View File

@ -312,7 +312,8 @@ public:
parse_urls,
parse_highlights,
clip,
clip_partial;
clip_partial,
trusted_content;
Optional<S32> v_pad,
h_pad;
@ -389,6 +390,7 @@ public:
bool getWordWrap() { return mWordWrap; }
bool getUseEllipses() { return mUseEllipses; }
bool truncate(); // returns true of truncation occurred
bool isContentTrusted() {return mTrustedContent;}
// TODO: move into LLTextSegment?
void createUrlContextMenu(S32 x, S32 y, const std::string &url); // create a popup context menu for the given Url
@ -669,6 +671,7 @@ protected:
bool mBGVisible; // render background?
bool mClip; // clip text to widget rect
bool mClipPartial; // false if we show lines that are partially inside bounding rect
bool mTrustedContent; // if false, does not allow to execute SURL links from this editor
bool mPlainText; // didn't use Image or Icon segments
bool mAutoIndent;
S32 mMaxTextByteLength; // Maximum length mText is allowed to be in bytes

View File

@ -1676,12 +1676,10 @@ BOOL LLTextEditor::handleControlKey(const KEY key, const MASK mask)
}
}
// <FS:AW> Linux primary "clipboard" tainted by auto-selection
//if (handled)
//{
// updatePrimary();
//}
// </FS:AW> Linux primary "clipboard" tainted by auto-selection
if (handled && !gFocusMgr.getMouseCapture())
{
updatePrimary();
}
return handled;
}

View File

@ -87,14 +87,14 @@ void LLUrlAction::executeSLURL(std::string url)
{
if (sExecuteSLURLCallback)
{
sExecuteSLURLCallback(url);
sExecuteSLURLCallback(url ,true);
}
}
void LLUrlAction::clickAction(std::string url)
void LLUrlAction::clickAction(std::string url, bool trusted_content)
{
// Try to handle as SLURL first, then http Url
if ( (sExecuteSLURLCallback) && !sExecuteSLURLCallback(url) )
if ( (sExecuteSLURLCallback) && !sExecuteSLURLCallback(url, trusted_content) )
{
if (sOpenURLCallback)
{

View File

@ -66,7 +66,7 @@ public:
static void showLocationOnMap(std::string url);
/// perform the appropriate action for left-clicking on a Url
static void clickAction(std::string url);
static void clickAction(std::string url, bool trusted_content);
/// copy the label for a Url to the clipboard
static void copyLabelToClipboard(std::string url);
@ -89,7 +89,7 @@ public:
/// specify the callbacks to enable this class's functionality
typedef boost::function<void (const std::string&)> url_callback_t;
typedef boost::function<bool(const std::string& url)> execute_url_callback_t;
typedef boost::function<bool(const std::string& url, bool trusted_content)> execute_url_callback_t;
static void setOpenURLCallback(url_callback_t cb);
static void setOpenURLInternalCallback(url_callback_t cb);

View File

@ -1099,7 +1099,8 @@ LLUrlEntrySLLabel::LLUrlEntrySLLabel()
std::string LLUrlEntrySLLabel::getLabel(const std::string &url, const LLUrlLabelCallback &cb)
{
return getLabelFromWikiLink(url);
std::string label = getLabelFromWikiLink(url);
return (!LLUrlRegistry::instance().hasUrl(label)) ? label : getUrl(url);
}
std::string LLUrlEntrySLLabel::getUrl(const std::string &string) const

View File

@ -700,17 +700,18 @@ void LLView::setVisible(BOOL visible)
void LLView::handleVisibilityChange ( BOOL new_visibility )
{
BOOL old_visibility;
BOOL log_visibility_change = LLViewerEventRecorder::instance().getLoggingStatus();
BOOST_FOREACH(LLView* viewp, mChildList)
{
// only views that are themselves visible will have their overall visibility affected by their ancestors
old_visibility=viewp->getVisible();
// <FS:ND> Make this less awfull slow, at least when not logging (default).
// if (old_visibility!=new_visibility)
if (old_visibility!=new_visibility && LLViewerEventRecorder::instance().getLoggingStatus() )
// <FS:ND/>
if(log_visibility_change)
{
LLViewerEventRecorder::instance().logVisibilityChange( viewp->getPathname(), viewp->getName(), new_visibility,"widget");
if (old_visibility!=new_visibility)
{
LLViewerEventRecorder::instance().logVisibilityChange( viewp->getPathname(), viewp->getName(), new_visibility,"widget");
}
}
if (old_visibility)
@ -718,11 +719,13 @@ void LLView::handleVisibilityChange ( BOOL new_visibility )
viewp->handleVisibilityChange ( new_visibility );
}
// Consider changing returns to confirm success and know which widget grabbed it
// For now assume success and log at highest xui possible
// NOTE we log actual state - which may differ if it somehow failed to set visibility
lldebugs << "LLView::handleVisibilityChange - now: " << getVisible() << " xui: " << viewp->getPathname() << " name: " << viewp->getName() << llendl;
if(log_visibility_change)
{
// Consider changing returns to confirm success and know which widget grabbed it
// For now assume success and log at highest xui possible
// NOTE we log actual state - which may differ if it somehow failed to set visibility
lldebugs << "LLView::handleVisibilityChange - now: " << getVisible() << " xui: " << viewp->getPathname() << " name: " << viewp->getName() << llendl;
}
}
}

View File

@ -31,7 +31,7 @@
LLViewerEventRecorder::LLViewerEventRecorder() {
clear(UNDEFINED);
logEvents = false;
// Remove any previous event log file
std::string old_log_ui_events_to_llsd_file = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, "SecondLife_Events_log.old");
LLFile::remove(old_log_ui_events_to_llsd_file);

View File

@ -65,11 +65,7 @@ class LLViewerEventRecorder : public LLSingleton<LLViewerEventRecorder>
std::string get_xui();
void update_xui(std::string xui);
// <FS:ND> Implement this
// bool getLoggingStatus();
bool getLoggingStatus() const
{ return logEvents; }
bool getLoggingStatus(){return logEvents;};
void setEventLoggingOn();
void setEventLoggingOff();

View File

@ -119,16 +119,25 @@ bool LLDirIterator::Impl::next(std::string &fname)
fs::directory_iterator end_itr; // default construction yields past-the-end
bool found = false;
while (mIter != end_itr && !found)
{
boost::smatch match;
std::string name = mIter->path().filename().string();
if ((found = boost::regex_match(name, match, mFilterExp)))
{
fname = name;
}
++mIter;
// Check if path is a directory.
try
{
while (mIter != end_itr && !found)
{
boost::smatch match;
std::string name = mIter->path().filename().string();
if (found = boost::regex_match(name, match, mFilterExp))
{
fname = name;
}
++mIter;
}
}
catch (const fs::filesystem_error& e)
{
llwarns << e.what() << llendl;
}
return found;

View File

@ -5457,13 +5457,13 @@
<key>FPSLogFrequency</key>
<map>
<key>Comment</key>
<string>Seconds between display of FPS in log (0 for never)</string>
<string>Seconds between display of FPS in log (0 for never)</string>
<key>Persist</key>
<integer>1</integer>
<integer>1</integer>
<key>Type</key>
<string>F32</string>
<string>F32</string>
<key>Value</key>
<real>10.0</real>
<real>10.0</real>
<key>Backup</key>
<integer>0</integer>
</map>
@ -12522,7 +12522,18 @@ Change of this parameter will affect the layout of buttons in notification toast
<key>Value</key>
<integer>0</integer>
</map>
<key>RevokePermsOnStopAnimation</key>
<key>ReportBugURL</key>
<map>
<key>Comment</key>
<string>URL used for filing bugs from viewer</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>String</string>
<key>Value</key>
<string>https://jira.secondlife.com/secure/CreateIssueDetails!init.jspa?pid=10610&amp;issuetype=1&amp;environment=[ENVIRONMENT]&amp;customfield_10253=[LOCATION]</string>
</map>
<key>RevokePermsOnStopAnimation</key>
<map>
<key>Comment</key>
<string>Clear animation permssions when choosing "Stop Animating Me"</string>

View File

@ -0,0 +1,39 @@
/**
* @file benchmarkF.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
* Second Life Viewer Source Code
* Copyright (C) 2011, Linden Research, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License only.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
#ifdef DEFINE_GL_FRAGCOLOR
out vec4 frag_color;
#else
#define frag_color gl_FragColor
#endif
uniform sampler2D diffuseMap;
VARYING vec2 tc0;
void main()
{
frag_color = texture2D(diffuseMap, tc0);
}

View File

@ -0,0 +1,38 @@
/**
* @file benchmarkV.glsl
*
* $LicenseInfo:firstyear=2007&license=viewerlgpl$
* Second Life Viewer Source Code
* Copyright (C) 2011, Linden Research, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License only.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
uniform mat4 modelview_projection_matrix;
ATTRIBUTE vec3 position;
VARYING vec2 tc0;
void main()
{
gl_Position = vec4(position, 1.0);
tc0 = (position.xy*0.5+0.5);
}

View File

@ -71,7 +71,7 @@ private:
void uploadCallback(bool success, const LLSD& response);
};
static LLRegisterPanelClassWrapper<exoPanelSnapshotFlickr> panel_class("exopanelsnapshotflickr");
static LLPanelInjector<exoPanelSnapshotFlickr> panel_class("exopanelsnapshotflickr");
void exoPanelSnapshotFlickr::onOpen(const LLSD& key)
{

View File

@ -1,4 +1,4 @@
version 35
version 36
// The version number above should be implemented IF AND ONLY IF some
// change has been made that is sufficiently important to justify
// resetting the graphics preferences of all users to the recommended
@ -637,3 +637,6 @@ Disregard128DefaultDrawDistance 1 0
list NVIDIA_GeForce_Go_7400
Disregard128DefaultDrawDistance 1 0
list OSX_10_6_8
RenderDeferred 0 0

View File

@ -908,7 +908,7 @@ void FSData::callbackReqInfo(const LLSD &notification, const LLSD &response)
//static
LLSD FSData::getSystemInfo()
{
LLSD info=LLFloaterAbout::getInfo();
LLSD info=LLAppViewer::instance()->getViewerInfo();
std::string sysinfo1("\n");
sysinfo1 += llformat("%s %s (%d) %s %s (%s) %s\n\n", LLAppViewer::instance()->getSecondLifeTitle().c_str(), LLVersionInfo::getShortVersion().c_str(), LLVersionInfo::getBuild(), info["BUILD_DATE"].asString().c_str(), info["BUILD_TIME"].asString().c_str(), LLVersionInfo::getChannel().c_str(),

View File

@ -711,7 +711,7 @@ void FSFloaterSearch::onBtnEventReminder()
// People Search Panel //
////////////////////////////////////////
static LLRegisterPanelClassWrapper<FSPanelSearchPeople> t_panel_fs_search_people("panel_ls_people");
static LLPanelInjector<FSPanelSearchPeople> t_panel_fs_search_people("panel_ls_people");
FSPanelSearchPeople::FSPanelSearchPeople() : LLPanel()
, mQueryID(NULL)
@ -974,7 +974,7 @@ void FSPanelSearchPeople::processSearchReply(LLMessageSystem* msg, void**)
// Groups Search Panel //
////////////////////////////////////////
static LLRegisterPanelClassWrapper<FSPanelSearchGroups> t_panel_fs_search_groups("panel_ls_groups");
static LLPanelInjector<FSPanelSearchGroups> t_panel_fs_search_groups("panel_ls_groups");
FSPanelSearchGroups::FSPanelSearchGroups() : LLPanel()
, mQueryID(NULL)
@ -1259,7 +1259,7 @@ void FSPanelSearchGroups::processSearchReply(LLMessageSystem* msg, void**)
// Places Search Panel //
////////////////////////////////////////
static LLRegisterPanelClassWrapper<FSPanelSearchPlaces> t_panel_fs_search_places("panel_ls_places");
static LLPanelInjector<FSPanelSearchPlaces> t_panel_fs_search_places("panel_ls_places");
FSPanelSearchPlaces::FSPanelSearchPlaces() : LLPanel()
, mQueryID(NULL)
@ -1591,7 +1591,7 @@ void FSPanelSearchPlaces::processSearchReply(LLMessageSystem* msg, void**)
// Land Search Panel //
////////////////////////////////////////
static LLRegisterPanelClassWrapper<FSPanelSearchLand> t_panel_fs_search_land("panel_ls_land");
static LLPanelInjector<FSPanelSearchLand> t_panel_fs_search_land("panel_ls_land");
FSPanelSearchLand::FSPanelSearchLand() : LLPanel()
, mQueryID(NULL)
@ -1942,7 +1942,7 @@ void FSPanelSearchLand::processSearchReply(LLMessageSystem* msg, void**)
// Classifieds Search Panel //
////////////////////////////////////////
static LLRegisterPanelClassWrapper<FSPanelSearchClassifieds> t_panel_fs_search_classifieds("panel_ls_classifieds");
static LLPanelInjector<FSPanelSearchClassifieds> t_panel_fs_search_classifieds("panel_ls_classifieds");
FSPanelSearchClassifieds::FSPanelSearchClassifieds() : LLPanel()
, mQueryID(NULL)
@ -2244,7 +2244,7 @@ void FSPanelSearchClassifieds::processSearchReply(LLMessageSystem* msg, void**)
// Events Search Panel //
////////////////////////////////////////
static LLRegisterPanelClassWrapper<FSPanelSearchEvents> t_panel_fs_search_events("panel_ls_events");
static LLPanelInjector<FSPanelSearchEvents> t_panel_fs_search_events("panel_ls_events");
FSPanelSearchEvents::FSPanelSearchEvents() : LLPanel()
, mQueryID(NULL)
@ -2656,7 +2656,7 @@ void FSPanelSearchEvents::processSearchReply(LLMessageSystem* msg, void**)
// WebSearch Panel //
////////////////////////////////////////
static LLRegisterPanelClassWrapper<FSPanelSearchWeb> t_panel_fs_search_web("panel_ls_web");
static LLPanelInjector<FSPanelSearchWeb> t_panel_fs_search_web("panel_ls_web");
FSPanelSearchWeb::FSPanelSearchWeb() : LLPanel()
, mWebBrowser(NULL)

View File

@ -45,7 +45,7 @@
#include <boost/foreach.hpp>
const U32 MAX_SELECTIONS = 20;
static LLRegisterPanelClassWrapper<FSPanelContactSets> t_panel_contact_sets("contact_sets_panel");
static LLPanelInjector<FSPanelContactSets> t_panel_contact_sets("contact_sets_panel");
FSPanelContactSets::FSPanelContactSets() : LLPanel()
, mContactSetCombo(NULL)

View File

@ -41,7 +41,7 @@
#include "lltexturectrl.h"
#include "llinventorymodel.h"
static LLRegisterPanelClassWrapper<PanelPreferenceFirestorm> t_pref_fs("panel_preference_firestorm");
static LLPanelInjector<PanelPreferenceFirestorm> t_pref_fs("panel_preference_firestorm");
PanelPreferenceFirestorm::PanelPreferenceFirestorm() : LLPanelPreference()
{

View File

@ -72,13 +72,13 @@
#include "llviewerregion.h"
#include "llworldmap.h"
static LLRegisterPanelClassWrapper<FSPanelProfileSecondLife> t_panel_profile_secondlife("panel_profile_secondlife");
static LLRegisterPanelClassWrapper<FSPanelProfileWeb> t_panel_web("panel_profile_web");
static LLRegisterPanelClassWrapper<FSPanelProfileInterests> t_panel_interests("panel_profile_interests");
static LLRegisterPanelClassWrapper<FSPanelProfilePicks> t_panel_picks("panel_profile_picks");
static LLRegisterPanelClassWrapper<FSPanelProfileFirstLife> t_panel_firstlife("panel_profile_firstlife");
static LLRegisterPanelClassWrapper<FSPanelAvatarNotes> t_panel_notes("panel_profile_notes");
static LLRegisterPanelClassWrapper<FSPanelProfile> t_panel_profile("panel_profile");
static LLPanelInjector<FSPanelProfileSecondLife> t_panel_profile_secondlife("panel_profile_secondlife");
static LLPanelInjector<FSPanelProfileWeb> t_panel_web("panel_profile_web");
static LLPanelInjector<FSPanelProfileInterests> t_panel_interests("panel_profile_interests");
static LLPanelInjector<FSPanelProfilePicks> t_panel_picks("panel_profile_picks");
static LLPanelInjector<FSPanelProfileFirstLife> t_panel_firstlife("panel_profile_firstlife");
static LLPanelInjector<FSPanelAvatarNotes> t_panel_notes("panel_profile_notes");
static LLPanelInjector<FSPanelProfile> t_panel_profile("panel_profile");
static const std::string PANEL_SECONDLIFE = "panel_profile_secondlife";
static const std::string PANEL_WEB = "panel_profile_web";

View File

@ -62,7 +62,7 @@ static const std::string CLASSIFIED_ID("classified_id");
static const std::string CLASSIFIED_NAME("classified_name");
static LLRegisterPanelClassWrapper<FSPanelClassifieds> t_panel_classifieds("panel_profile_classified");
static LLPanelInjector<FSPanelClassifieds> t_panel_classifieds("panel_profile_classified");
//////////////////////////////////////////////////////////////////////////

View File

@ -75,7 +75,7 @@ public:
//=============================================================================
static LLRegisterPanelClassWrapper<FSPanelRadar> t_fs_panel_radar("fs_panel_radar");
static LLPanelInjector<FSPanelRadar> t_fs_panel_radar("fs_panel_radar");
FSPanelRadar::FSPanelRadar()
: LLPanel(),

View File

@ -40,6 +40,11 @@
[super dealloc];
}
- (void) applicationWillFinishLaunching:(NSNotification *)notification
{
[[NSAppleEventManager sharedAppleEventManager] setEventHandler:self andSelector:@selector(handleGetURLEvent:withReplyEvent:) forEventClass:kInternetEventClass andEventID:kAEGetURL];
}
- (void) applicationDidFinishLaunching:(NSNotification *)notification
{
frameTimer = nil;
@ -55,7 +60,7 @@
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(languageUpdated) name:@"NSTextInputContextKeyboardSelectionDidChangeNotification" object:nil];
[[NSAppleEventManager sharedAppleEventManager] setEventHandler:self andSelector:@selector(handleGetURLEvent:withReplyEvent:) forEventClass:kInternetEventClass andEventID:kAEGetURL];
// [[NSAppleEventManager sharedAppleEventManager] setEventHandler:self andSelector:@selector(handleGetURLEvent:withReplyEvent:) forEventClass:kInternetEventClass andEventID:kAEGetURL];
}
- (void) handleGetURLEvent:(NSAppleEventDescriptor *)event withReplyEvent:(NSAppleEventDescriptor *)replyEvent {

View File

@ -40,6 +40,7 @@
#include "llagent.h"
#include "llagentcamera.h"
#include "llagentlanguage.h"
#include "llagentui.h"
#include "llagentwearables.h"
#include "llfloaterimcontainer.h"
#include "llwindow.h"
@ -60,6 +61,7 @@
#include "llcurl.h"
#include "llcalc.h"
#include "llconversationlog.h"
#include "lldxhardware.h"
#include "lltexturestats.h"
#include "lltexturestats.h"
#include "llviewerwindow.h"
@ -75,10 +77,10 @@
#include "lluicolortable.h"
#include "llurldispatcher.h"
#include "llurlhistory.h"
//#include "llfirstuse.h"
#include "llrender.h"
#include "llteleporthistory.h"
#include "lltoast.h"
#include "llsdutil_math.h"
#include "lllocationhistory.h"
#include "llfasttimerview.h"
#include "llvector4a.h"
@ -94,7 +96,9 @@
// [SL:KB] - Patch: Appearance-Misc | Checked: 2013-02-12 (Catznip-3.4)
#include "llappearancemgr.h"
// [/SL:KB]
// [RLVa:KB] - Checked: 2010-05-03 (RLVa-1.2.0g)
// [RLVa:KB] - Checked: 2010-04-18 (RLVa-1.4.0)
#include "rlvactions.h"
#include "rlvhelper.h"
#include "rlvhandler.h"
// [/RLVa:KB]
@ -140,10 +144,6 @@
#include <boost/algorithm/string.hpp>
#include <boost/regex.hpp>
// [RLVa:KB] - Checked: 2010-05-03 (RLVa-1.2.0g)
#include "rlvhandler.h"
// [/RLVa:KB]
#if LL_WINDOWS
# include <share.h> // For _SH_DENYWR in processMarkerFiles
#else
@ -846,7 +846,7 @@ bool LLAppViewer::init()
initLoggingAndGetLastDuration();
processMarkerFiles();
//
// OK to write stuff to logs now, we've now crash reported if necessary
//
@ -1416,8 +1416,8 @@ void LLAppViewer::checkMemory()
}
mMemCheckTimer.reset() ;
//update the availability of memory
LLMemory::updateMemoryInfo() ;
//update the availability of memory
LLMemory::updateMemoryInfo() ;
bool is_low = LLMemory::isMemoryPoolLow() ;
@ -2078,7 +2078,7 @@ bool LLAppViewer::cleanup()
gAudiop->setStreamingAudioImpl(NULL);
// shut down the audio subsystem
gAudiop->shutdown();
gAudiop->shutdown();
delete gAudiop;
gAudiop = NULL;
@ -3041,9 +3041,9 @@ bool LLAppViewer::initConfiguration()
{
llwarns << "Failed --set " << name << ": setting name unknown." << llendl;
}
}
}
}
}
if (clp.hasOption("logevents")) {
LLViewerEventRecorder::instance().setEventLoggingOn();
@ -3051,7 +3051,7 @@ bool LLAppViewer::initConfiguration()
std::string CmdLineChannel(gSavedSettings.getString("CmdLineChannel"));
if(! CmdLineChannel.empty())
{
{
LLVersionInfo::resetChannel(CmdLineChannel);
}
@ -3063,16 +3063,16 @@ bool LLAppViewer::initConfiguration()
LLFastTimer::sLog = TRUE;
LLFastTimer::sLogName = std::string("performance");
}
std::string test_name(gSavedSettings.getString("LogMetrics"));
if (! test_name.empty())
{
{
LLFastTimer::sMetricLog = TRUE ;
// '--logmetrics' is specified with a named test metric argument so the data gathering is done only on that test
// In the absence of argument, every metric would be gathered (makes for a rather slow run and hard to decipher report...)
llinfos << "'--logmetrics' argument : " << test_name << llendl;
LLFastTimer::sLogName = test_name;
}
}
if (clp.hasOption("graphicslevel"))
{
@ -3081,14 +3081,14 @@ bool LLAppViewer::initConfiguration()
// that value for validity.
U32 graphicslevel = gSavedSettings.getU32("RenderQualityPerformance");
if (LLFeatureManager::instance().isValidGraphicsLevel(graphicslevel))
{
{
// graphicslevel is valid: save it and engage it later. Capture
// the requested value separately from the settings variable
// because, if this is the first run, LLViewerWindow's constructor
// will call LLFeatureManager::applyRecommendedSettings(), which
// overwrites this settings variable!
mForceGraphicsLevel = graphicslevel;
}
}
}
LLFastTimerView::sAnalyzePerformance = gSavedSettings.getBOOL("AnalyzePerformance");
@ -3127,17 +3127,34 @@ bool LLAppViewer::initConfiguration()
// but rather it belongs into the gridmanager)
std::string CmdLineLoginLocation(gSavedSettings.getString("CmdLineLoginLocation"));
if(! CmdLineLoginLocation.empty())
{
{
start_slurl = CmdLineLoginLocation;
// <FS:Ansariel> FIRE-11586: Restore grid manager workaround (grid is still empty here!)
//LLStartUp::setStartSLURL(start_slurl);
//if(start_slurl.getType() == LLSLURL::LOCATION)
//{
// LLGridManager::getInstance()->setGridChoice(start_slurl.getGrid());
// }
//}
LLStartUp::setStartSLURLString(CmdLineLoginLocation);
// </FS:Ansariel>
}
}
//RN: if we received a URL, hand it off to the existing instance.
// don't call anotherInstanceRunning() when doing URL handoff, as
// it relies on checking a marker file which will not work when running
// out of different directories
if (start_slurl.isValid() &&
(gSavedSettings.getBOOL("SLURLPassToOtherInstance")))
{
if (sendURLToOtherInstance(start_slurl.getSLURLString()))
{
// successfully handed off URL to existing instance, exit
return false;
}
}
// <FS:TT> Hacking to save the skin and theme for future use.
mCurrentSkin = gSavedSettings.getString("SkinCurrent");
@ -3470,26 +3487,26 @@ namespace {
{
LL_WARNS("UpdaterService") << "no info url supplied - defaulting to hard coded release notes pattern" << LL_ENDL;
// truncate version at the rightmost '.'
std::string version_short(data["version"]);
size_t short_length = version_short.rfind('.');
if (short_length != std::string::npos)
{
version_short.resize(short_length);
}
// truncate version at the rightmost '.'
std::string version_short(data["version"]);
size_t short_length = version_short.rfind('.');
if (short_length != std::string::npos)
{
version_short.resize(short_length);
}
LLUIString relnotes_url("[RELEASE_NOTES_BASE_URL][CHANNEL_URL]/[VERSION_SHORT]");
relnotes_url.setArg("[VERSION_SHORT]", version_short);
LLUIString relnotes_url("[RELEASE_NOTES_BASE_URL][CHANNEL_URL]/[VERSION_SHORT]");
relnotes_url.setArg("[VERSION_SHORT]", version_short);
// *TODO thread the update service's response through to this point
std::string const & channel = LLVersionInfo::getChannel();
boost::shared_ptr<char> channel_escaped(curl_escape(channel.c_str(), channel.size()), &curl_free);
// *TODO thread the update service's response through to this point
std::string const & channel = LLVersionInfo::getChannel();
boost::shared_ptr<char> channel_escaped(curl_escape(channel.c_str(), channel.size()), &curl_free);
relnotes_url.setArg("[CHANNEL_URL]", channel_escaped.get());
relnotes_url.setArg("[RELEASE_NOTES_BASE_URL]", LLTrans::getString("RELEASE_NOTES_BASE_URL"));
relnotes_url.setArg("[CHANNEL_URL]", channel_escaped.get());
relnotes_url.setArg("[RELEASE_NOTES_BASE_URL]", LLTrans::getString("RELEASE_NOTES_BASE_URL"));
substitutions["INFO_URL"] = relnotes_url.getString();
}
LLNotificationsUtil::add(notification_name, substitutions, LLSD(), apply_callback);
}
@ -3690,7 +3707,7 @@ bool LLAppViewer::initWindow()
LLFeatureManager::getInstance()->setGraphicsLevel(*mForceGraphicsLevel, false);
gSavedSettings.setU32("RenderQualityPerformance", *mForceGraphicsLevel);
}
// Set this flag in case we crash while initializing GL
gSavedSettings.setBOOL("RenderInitError", TRUE);
gSavedSettings.saveToFile( gSavedSettings.getString("ClientSettingsFile"), TRUE );
@ -3749,6 +3766,285 @@ void LLAppViewer::writeDebugInfo()
out_file.close();
}
LLSD LLAppViewer::getViewerInfo() const
{
// The point of having one method build an LLSD info block and the other
// construct the user-visible About string is to ensure that the same info
// is available to a getInfo() caller as to the user opening
// LLFloaterAbout.
LLSD info;
LLSD version;
version.append(LLVersionInfo::getMajor());
version.append(LLVersionInfo::getMinor());
version.append(LLVersionInfo::getPatch());
version.append(LLVersionInfo::getBuild());
info["VIEWER_VERSION"] = version;
info["VIEWER_VERSION_STR"] = LLVersionInfo::getVersion();
info["BUILD_DATE"] = __DATE__;
info["BUILD_TIME"] = __TIME__;
info["CHANNEL"] = LLVersionInfo::getChannel();
// <FS:CR> FIRE-8273: Add Open-sim indicator to About floater
#ifdef OPENSIM
info["BUILD_TYPE"] = LLTrans::getString("FSWithOpensim");
#else
info["BUILD_TYPE"] = LLTrans::getString("FSWithHavok");
#endif // OPENSIM
// </FS:CR>
info["SKIN"] = gSavedSettings.getString("FSInternalSkinCurrent");
info["THEME"] = gSavedSettings.getString("FSInternalSkinCurrentTheme");
//[FIRE 3113 : SJ] Added Font and fontsize to info
info["FONT"] = "Unknown Font";
std::string fsInternalFontSettingsFile = gSavedSettings.getString("FSInternalFontSettingsFile");
if (fsInternalFontSettingsFile == "fonts.xml") info["FONT"] = "Deja Vu";
else if (fsInternalFontSettingsFile == "fonts_ubuntu.xml") info["FONT"] = "Ubuntu Font Family";
else if (fsInternalFontSettingsFile == "fonts_liberation.xml") info["FONT"] = "Liberation";
else if (fsInternalFontSettingsFile == "fonts_droid.xml") info["FONT"] = "Droid Sans";
else if (fsInternalFontSettingsFile == "fonts_mobi.xml") info["FONT"] = "Mobi Sans";
else if (fsInternalFontSettingsFile == "fonts_roboto.xml") info["FONT"] = "Roboto";
else if (fsInternalFontSettingsFile == "fonts_dyslexia.xml") info["FONT"] = "OpenDyslexic";
info["FONT_SIZE"] = gSavedSettings.getF32("FSFontSizeAdjustment");
info["FONT_SCREEN_DPI"] = gSavedSettings.getF32("FontScreenDPI");
//[FIRE-3923 : SJ] Added Drawdistance, bandwidth and LOD to info
info["DRAW_DISTANCE"] = gSavedSettings.getF32("RenderFarClip");
info["BANDWIDTH"] = gSavedSettings.getF32("ThrottleBandwidthKBPS");
info["LOD"] =gSavedSettings.getF32("RenderVolumeLODFactor");
//[FIRE 3113 : SJ] Added Settingsfile to info
info["MODE"] = "Unknown Mode";
std::string sessionSettingsFile = gSavedSettings.getString("SessionSettingsFile");
if (sessionSettingsFile == "settings_firestorm.xml") info["MODE"] = "Firestorm";
else if (sessionSettingsFile == "settings_phoenix.xml") info["MODE"] = "Phoenix";
else if (sessionSettingsFile == "settings_v3.xml") info["MODE"] = "Viewer 3";
else if (sessionSettingsFile == "settings_hybrid.xml") info["MODE"] = "Hybrid";
else if (sessionSettingsFile == "settings_latency.xml") info["MODE"] = "Latency";
// return a URL to the release notes for this viewer, such as:
// http://wiki.secondlife.com/wiki/Release_Notes/Second Life Beta Viewer/2.1.0.123456
std::string url = LLTrans::getString("RELEASE_NOTES_BASE_URL");
if (! LLStringUtil::endsWith(url, "/"))
url += "/";
url += LLURI::escape(LLVersionInfo::getChannel()) + "/";
url += LLURI::escape(LLVersionInfo::getVersion());
info["VIEWER_RELEASE_NOTES_URL"] = url;
#if LL_MSVC
info["COMPILER"] = "MSVC";
info["COMPILER_VERSION"] = _MSC_VER;
#elif LL_CLANG // <FS:CR> Clang identification
info["COMPILER"] = "Clang";
info["COMPILER_VERSION"] = CLANG_VERSION_STRING;
#elif LL_GNUC
info["COMPILER"] = "GCC";
info["COMPILER_VERSION"] = GCC_VERSION;
#endif
// Position
LLViewerRegion* region = gAgent.getRegion();
if (region)
{
LLVector3d pos = gAgent.getPositionGlobal();
info["POSITION"] = ll_sd_from_vector3d(pos);
info["POSITION_LOCAL"] = ll_sd_from_vector3(gAgent.getPosAgentFromGlobal(pos));
info["REGION"] = gAgent.getRegion()->getName();
info["HOSTNAME"] = gAgent.getRegion()->getHost().getHostName();
info["HOSTIP"] = gAgent.getRegion()->getHost().getString();
info["SERVER_VERSION"] = gLastVersionChannel;
LLSLURL slurl;
LLAgentUI::buildSLURL(slurl);
info["SLURL"] = slurl.getSLURLString();
}
// CPU
info["CPU"] = gSysCPU.getCPUString();
info["MEMORY_MB"] = LLSD::Integer(gSysMemory.getPhysicalMemoryKB() / 1024);
// Moved hack adjustment to Windows memory size into llsys.cpp
info["OS_VERSION"] = LLAppViewer::instance()->getOSInfo().getOSString();
info["GRAPHICS_CARD_VENDOR"] = (const char*)(glGetString(GL_VENDOR));
info["GRAPHICS_CARD"] = (const char*)(glGetString(GL_RENDERER));
#if LL_WINDOWS
LLSD driver_info = gDXHardware.getDisplayInfo();
if (driver_info.has("DriverVersion"))
{
info["GRAPHICS_DRIVER_VERSION"] = driver_info["DriverVersion"];
}
#endif
// [RLVa:KB] - Checked: 2010-04-18 (RLVa-1.2.0)
info["RLV_VERSION"] = (RlvActions::isRlvEnabled()) ? RlvStrings::getVersionAbout() : "(disabled)";
// [/RLVa:KB]
info["OPENGL_VERSION"] = (const char*)(glGetString(GL_VERSION));
info["LIBCURL_VERSION"] = LLCurl::getVersionString();
info["J2C_VERSION"] = LLImageJ2C::getEngineInfo();
bool want_fullname = true;
info["AUDIO_DRIVER_VERSION"] = gAudiop ? LLSD(gAudiop->getDriverName(want_fullname)) : LLSD();
if(LLVoiceClient::getInstance()->voiceEnabled())
{
LLVoiceVersionInfo version = LLVoiceClient::getInstance()->getVersion();
std::ostringstream version_string;
version_string << version.serverType << " " << version.serverVersion << std::endl;
info["VOICE_VERSION"] = version_string.str();
}
else
{
info["VOICE_VERSION"] = LLTrans::getString("NotConnected");
}
// TODO: Implement media plugin version query
info["QT_WEBKIT_VERSION"] = "4.7.1 (version number hard-coded)";
if (gPacketsIn > 0)
{
info["PACKETS_LOST"] = LLViewerStats::getInstance()->mPacketsLostStat.getCurrent();
// <FS:Ansariel> FIRE-3925: Formatting fails when reaching 1,000,000;
// Use S32 since it will be used in LLStringUtil::formatNumber anyway.
//info["PACKETS_IN"] = F32(gPacketsIn);
info["PACKETS_IN"] = S32(gPacketsIn);
// </FS:Ansariel>
info["PACKETS_PCT"] = 100.f*info["PACKETS_LOST"].asReal() / info["PACKETS_IN"].asReal();
}
if (mServerReleaseNotesURL.empty())
{
if (gAgent.getRegion())
{
info["SERVER_RELEASE_NOTES_URL"] = LLTrans::getString("RetrievingData");
}
}
else if (LLStringUtil::startsWith(mServerReleaseNotesURL, "http")) // it's an URL
{
info["SERVER_RELEASE_NOTES_URL"] = "[" + LLWeb::escapeURL(mServerReleaseNotesURL) + " " + LLTrans::getString("ReleaseNotes") + "]";
}
else
{
info["SERVER_RELEASE_NOTES_URL"] = mServerReleaseNotesURL;
}
// <FS:PP> FIRE-4785: Current render quality setting in sysinfo / about floater
switch (gSavedSettings.getU32("RenderQualityPerformance"))
{
case 0:
info["RENDERQUALITY"] = LLTrans::getString("render_quality_low");
info["RENDERQUALITY_FSDATA_ENGLISH"] = "Low (1/7)";
break;
case 1:
info["RENDERQUALITY"] = LLTrans::getString("render_quality_mediumlow");
info["RENDERQUALITY_FSDATA_ENGLISH"] = "Medium-Low (2/7)";
break;
case 2:
info["RENDERQUALITY"] = LLTrans::getString("render_quality_medium");
info["RENDERQUALITY_FSDATA_ENGLISH"] = "Medium (3/7)";
break;
case 3:
info["RENDERQUALITY"] = LLTrans::getString("render_quality_mediumhigh");
info["RENDERQUALITY_FSDATA_ENGLISH"] = "Medium-High (4/7)";
break;
case 4:
info["RENDERQUALITY"] = LLTrans::getString("render_quality_high");
info["RENDERQUALITY_FSDATA_ENGLISH"] = "High (5/7)";
break;
case 5:
info["RENDERQUALITY"] = LLTrans::getString("render_quality_highultra");
info["RENDERQUALITY_FSDATA_ENGLISH"] = "High-Ultra (6/7)";
break;
case 6:
info["RENDERQUALITY"] = LLTrans::getString("render_quality_ultra");
info["RENDERQUALITY_FSDATA_ENGLISH"] = "Ultra (7/7)";
break;
default:
info["RENDERQUALITY"] = LLTrans::getString("render_quality_unknown");
info["RENDERQUALITY_FSDATA_ENGLISH"] = "Unknown, user has RenderQualityPerformance debug setting beyond the normal range (0-6)";
break;
}
// </FS:PP>
// <FS:Ansariel> FIRE-11768: Include texture memory settings
info["TEXTUREMEMORY"] = gSavedSettings.getS32("TextureMemory");
info["TEXTUREMEMORYMULTIPLIER"] = gSavedSettings.getF32("RenderTextureMemoryMultiple");
// </FS:Ansariel>
return info;
}
std::string LLAppViewer::getViewerInfoString() const
{
std::ostringstream support;
LLSD info(getViewerInfo());
// Render the LLSD from getInfo() as a format_map_t
LLStringUtil::format_map_t args;
// allow the "Release Notes" URL label to be localized
args["ReleaseNotes"] = LLTrans::getString("ReleaseNotes");
for (LLSD::map_const_iterator ii(info.beginMap()), iend(info.endMap());
ii != iend; ++ii)
{
if (! ii->second.isArray())
{
// Scalar value
if (ii->second.isUndefined())
{
args[ii->first] = LLTrans::getString("none_text");
}
else
{
// don't forget to render value asString()
args[ii->first] = ii->second.asString();
}
}
else
{
// array value: build KEY_0, KEY_1 etc. entries
for (LLSD::Integer n(0), size(ii->second.size()); n < size; ++n)
{
args[STRINGIZE(ii->first << '_' << n)] = ii->second[n].asString();
}
}
}
// Now build the various pieces
support << LLTrans::getString("AboutHeader", args);
if (info.has("REGION"))
{
// [RLVa:KB] - Checked: 2014-02-24 (RLVa-1.4.10)
support << "\n\n";
if (RlvActions::canShowLocation())
support << LLTrans::getString("AboutPosition", args);
else
support << RlvStrings::getString(RLV_STRING_HIDDEN_REGION);
// [/RLVa:KB]
//support << "\n\n" << LLTrans::getString("AboutPosition", args);
}
support << "\n\n" << LLTrans::getString("AboutSystem", args);
support << "\n";
if (info.has("GRAPHICS_DRIVER_VERSION"))
{
support << "\n" << LLTrans::getString("AboutDriver", args);
}
support << "\n" << LLTrans::getString("AboutLibs", args);
if (info.has("BANDWIDTH")) //For added info in help floater
{
support << "\n" << LLTrans::getString("AboutSettings", args);
}
if (info.has("COMPILER"))
{
support << "\n" << LLTrans::getString("AboutCompiler", args);
}
if (info.has("PACKETS_IN"))
{
support << '\n' << LLTrans::getString("AboutTraffic", args);
}
return support.str();
}
void LLAppViewer::cleanupSavedSettings()
{
gSavedSettings.setBOOL("MouseSun", FALSE);
@ -4011,9 +4307,9 @@ void LLAppViewer::handleViewerCrash()
if (gDirUtilp)
{
std::string crash_marker_file_name = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,
gLLErrorActivated
? LLERROR_MARKER_FILE_NAME
: ERROR_MARKER_FILE_NAME);
gLLErrorActivated
? LLERROR_MARKER_FILE_NAME
: ERROR_MARKER_FILE_NAME);
LLAPRFile crash_marker_file ;
crash_marker_file.open(crash_marker_file_name, LL_APR_WB);
if (crash_marker_file.getFileHandle())
@ -4024,7 +4320,7 @@ void LLAppViewer::handleViewerCrash()
else
{
LL_WARNS("MarkerFile") << "Cannot create error marker file " << crash_marker_file_name << LL_ENDL;
}
}
}
else
{
@ -4169,7 +4465,7 @@ void LLAppViewer::processMarkerFiles()
}
if (mSecondInstance)
{
{
LL_INFOS("MarkerFile") << "Exec marker '"<< mMarkerFileName << "' owned by another instance" << LL_ENDL;
}
else if (marker_is_same_version)
@ -4183,7 +4479,7 @@ void LLAppViewer::processMarkerFiles()
{
LL_INFOS("MarkerFile") << "Exec marker '"<< mMarkerFileName << "' found, but versions did not match" << LL_ENDL;
}
}
}
else // marker did not exist... last exec (if any) did not freeze
{
// Create the marker file for this execution & lock it; it will be deleted on a clean exit
@ -4237,12 +4533,12 @@ void LLAppViewer::processMarkerFiles()
{
gLastExecEvent = LAST_EXEC_LOGOUT_CRASH;
LL_INFOS("MarkerFile") << "LLError marker '"<< llerror_marker_file << "' crashed, setting LastExecEvent to LOGOUT_CRASH" << LL_ENDL;
}
else
{
}
else
{
gLastExecEvent = LAST_EXEC_LLERROR_CRASH;
LL_INFOS("MarkerFile") << "LLError marker '"<< llerror_marker_file << "' crashed, setting LastExecEvent to LLERROR_CRASH" << LL_ENDL;
}
}
}
else
{
@ -4255,20 +4551,20 @@ void LLAppViewer::processMarkerFiles()
if(LLAPRFile::isExist(error_marker_file, NULL, LL_APR_RB))
{
if (markerIsSameVersion(error_marker_file))
{
{
if (gLastExecEvent == LAST_EXEC_LOGOUT_FROZE)
{
{
gLastExecEvent = LAST_EXEC_LOGOUT_CRASH;
LL_INFOS("MarkerFile") << "Error marker '"<< error_marker_file << "' crashed, setting LastExecEvent to LOGOUT_CRASH" << LL_ENDL;
}
else
{
gLastExecEvent = LAST_EXEC_OTHER_CRASH;
LL_INFOS("MarkerFile") << "Error marker '"<< error_marker_file << "' crashed, setting LastExecEvent to " << gLastExecEvent << LL_ENDL;
}
}
else
{
gLastExecEvent = LAST_EXEC_OTHER_CRASH;
LL_INFOS("MarkerFile") << "Error marker '"<< error_marker_file << "' crashed, setting LastExecEvent to " << gLastExecEvent << LL_ENDL;
}
}
else
{
LL_INFOS("MarkerFile") << "Error marker '"<< error_marker_file << "' marker found, but versions did not match" << LL_ENDL;
}
LLAPRFile::remove(error_marker_file);
@ -4280,29 +4576,29 @@ void LLAppViewer::removeMarkerFile(bool leave_logout_marker)
if (!mSecondInstance)
{
LL_DEBUGS("MarkerFile") << (leave_logout_marker?"leave":"remove") <<" logout" << LL_ENDL;
if (mMarkerFile.getFileHandle())
{
if (mMarkerFile.getFileHandle())
{
LL_DEBUGS("MarkerFile") << "removing exec marker '"<<mMarkerFileName<<"'"<< LL_ENDL;
mMarkerFile.close() ;
LLAPRFile::remove( mMarkerFileName );
LLAPRFile::remove( mMarkerFileName );
}
else
{
LL_WARNS("MarkerFile") << "marker '"<<mMarkerFileName<<"' not open"<< LL_ENDL;
}
if (!leave_logout_marker)
{
if (mLogoutMarkerFile.getFileHandle())
{
LL_DEBUGS("MarkerFile") << "removing logout marker '"<<mLogoutMarkerFileName<<"'"<< LL_ENDL;
mLogoutMarkerFile.close();
}
else
{
LL_WARNS("MarkerFile") << "marker '"<<mMarkerFileName<<"' not open"<< LL_ENDL;
}
if (!leave_logout_marker)
{
if (mLogoutMarkerFile.getFileHandle())
{
LL_DEBUGS("MarkerFile") << "removing logout marker '"<<mLogoutMarkerFileName<<"'"<< LL_ENDL;
mLogoutMarkerFile.close();
}
else
{
LL_WARNS("MarkerFile") << "logout marker '"<<mLogoutMarkerFileName<<"' not open"<< LL_ENDL;
}
LLAPRFile::remove( mLogoutMarkerFileName );
}
LLAPRFile::remove( mLogoutMarkerFileName );
}
}
else
{
@ -5315,7 +5611,7 @@ void LLAppViewer::idle()
if (!(logoutRequestSent() && hasSavedFinalSnapshot()))
{
gObjectList.update(gAgent, *LLWorld::getInstance());
gObjectList.update(gAgent);
}
}
@ -6106,7 +6402,7 @@ void LLAppViewer::handleLoginComplete()
void LLAppViewer::launchUpdater()
{
LLSD query_map = LLSD::emptyMap();
LLSD query_map = LLSD::emptyMap();
query_map["os"] = gPlatform;
// *TODO change userserver to be grid on both viewer and sim, since
@ -6307,7 +6603,7 @@ void LLAppViewer::metricsSend(bool enable_reporting)
// Make a copy of the main stats to send into another thread.
// Receiving thread takes ownership.
LLViewerAssetStats * main_stats(new LLViewerAssetStats(*gViewerAssetStatsMain));
// Send a report request into 'thread1' to get the rest of the data
// and provide some additional parameters while here.
LLAppViewer::sTextureFetch->commandSendMetrics(caps_url,

View File

@ -87,6 +87,10 @@ public:
const LLOSInfo& getOSInfo() const { return mSysOSInfo; }
void setServerReleaseNotesURL(const std::string& url) { mServerReleaseNotesURL = url; }
LLSD getViewerInfo() const;
std::string getViewerInfoString() const;
// Report true if under the control of a debugger. A null-op default.
virtual bool beingDebugged() { return false; }
@ -268,6 +272,8 @@ private:
LLOSInfo mSysOSInfo;
bool mReportedCrash;
std::string mServerReleaseNotesURL;
// Thread objects.
static LLTextureCache* sTextureCache;
static LLImageDecodeThread* sImageDecodeThread;

View File

@ -203,14 +203,6 @@ int APIENTRY WINMAIN(HINSTANCE hInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
#ifdef INCLUDE_VLD
// only works for debug builds (hard coded into vld.h)
#ifdef _DEBUG
// start with Visual Leak Detector turned off
VLDGlobalDisable();
#endif // _DEBUG
#endif // INCLUDE_VLD
const S32 MAX_HEAPS = 255;
DWORD heap_enable_lfh_error[MAX_HEAPS];
S32 num_heaps = 0;

View File

@ -131,29 +131,33 @@ void LLChannelManager::onLoginCompleted()
}
else
{
// create a channel for the StartUp Toast
LLScreenChannelBase::Params p;
p.id = LLUUID(gSavedSettings.getString("StartUpChannelUUID"));
p.channel_align = CA_RIGHT;
mStartUpChannel = createChannel(p);
// TODO: Seems this code leads to MAINT-3536 new crash in XML_ParserFree.
// Need to investigate this and fix possible problems with notifications in startup time
// Viewer can normally receive and show of postponed notifications about purchasing in marketplace on startup time.
// Other types of postponed notifications did not tested.
//// create a channel for the StartUp Toast
//LLScreenChannelBase::Params p;
//p.id = LLUUID(gSavedSettings.getString("StartUpChannelUUID"));
//p.channel_align = CA_RIGHT;
//mStartUpChannel = createChannel(p);
if(!mStartUpChannel)
{
onStartUpToastClose();
}
else
{
gViewerWindow->getRootView()->addChild(mStartUpChannel);
//if(!mStartUpChannel)
//{
// onStartUpToastClose();
//}
//else
//{
// gViewerWindow->getRootView()->addChild(mStartUpChannel);
// init channel's position and size
S32 channel_right_bound = gViewerWindow->getWorldViewRectScaled().mRight - gSavedSettings.getS32("NotificationChannelRightMargin");
S32 channel_width = gSavedSettings.getS32("NotifyBoxWidth");
mStartUpChannel->init(channel_right_bound - channel_width, channel_right_bound);
mStartUpChannel->setMouseDownCallback(boost::bind(&LLNotificationWellWindow::onStartUpToastClick, LLNotificationWellWindow::getInstance(), _2, _3, _4));
// // init channel's position and size
// S32 channel_right_bound = gViewerWindow->getWorldViewRectScaled().mRight - gSavedSettings.getS32("NotificationChannelRightMargin");
// S32 channel_width = gSavedSettings.getS32("NotifyBoxWidth");
// mStartUpChannel->init(channel_right_bound - channel_width, channel_right_bound);
// mStartUpChannel->setMouseDownCallback(boost::bind(&LLNotificationWellWindow::onStartUpToastClick, LLNotificationWellWindow::getInstance(), _2, _3, _4));
mStartUpChannel->setCommitCallback(boost::bind(&LLChannelManager::onStartUpToastClose, this));
mStartUpChannel->createStartUpToast(away_notifications, gSavedSettings.getS32("StartUpToastLifeTime"));
}
// mStartUpChannel->setCommitCallback(boost::bind(&LLChannelManager::onStartUpToastClose, this));
// mStartUpChannel->createStartUpToast(away_notifications, gSavedSettings.getS32("StartUpToastLifeTime"));
//}
}
LLPersistentNotificationStorage::getInstance()->loadNotifications();

View File

@ -599,6 +599,7 @@ protected:
menu->setItemEnabled("Offer Teleport",false);
menu->setItemEnabled("Request Teleport",false);
menu->setItemEnabled("Voice Call", false);
menu->setItemEnabled("Chat History", false);
menu->setItemEnabled("Invite Group", false);
menu->setItemEnabled("Zoom In", false);
menu->setItemEnabled("Share", false);
@ -622,9 +623,9 @@ protected:
menu->setItemVisible("Zoom In", should_show_zoom && gObjectList.findObject(mAvatarID));
menu->setItemEnabled("Block Unblock", LLAvatarActions::canBlock(mAvatarID));
menu->setItemEnabled("Mute Text", LLAvatarActions::canBlock(mAvatarID));
menu->setItemEnabled("Chat History", LLLogChat::isTranscriptExist(mAvatarID));
}
menu->setItemEnabled("Chat History", LLLogChat::isTranscriptExist(mAvatarID));
menu->setItemEnabled("Map", (LLAvatarTracker::instance().isBuddyOnline(mAvatarID) && is_agent_mappable(mAvatarID)) || gAgent.isGodlike() );
menu->buildDrawLabels();
menu->updateParent(LLMenuGL::sMenuContainer);
@ -783,6 +784,7 @@ LLChatHistory::LLChatHistory(const LLChatHistory::Params& p)
editor_params.follows.flags = FOLLOWS_ALL;
editor_params.enabled = false; // read only
editor_params.show_context_menu = "true";
editor_params.trusted_content = false;
mEditor = LLUICtrlFactory::create<LLTextEditor>(editor_params, this);
mEditor->setIsFriendCallback(LLAvatarActions::isFriend);
}

View File

@ -44,7 +44,7 @@
#include "lltrans.h"
#include "lltabcontainer.h"
static LLRegisterPanelClassWrapper<LLCOFWearables> t_cof_wearables("cof_wearables");
static LLPanelInjector<LLCOFWearables> t_cof_wearables("cof_wearables");
const LLSD REARRANGE = LLSD().with("rearrange", LLSD());

View File

@ -269,7 +269,6 @@ BOOL LLConversationViewSession::handleMouseDown( S32 x, S32 y, MASK mask )
//This node (conversation) was selected and a child (participant) was not
if(result && getRoot())
{
if(getRoot()->getCurSelectedItem() == this)
{
LLConversationItem* item = dynamic_cast<LLConversationItem *>(getViewModelItem());
@ -284,7 +283,6 @@ BOOL LLConversationViewSession::handleMouseDown( S32 x, S32 y, MASK mask )
{
im_container->collapseMessagesPane(false);
}
}
selectConversationItem();
}

View File

@ -37,8 +37,6 @@
#include "llviewershadermgr.h"
#include "llrender.h"
#define GE_FORCE_WORKAROUND LL_DARWIN
static LLGLSLShader* simple_shader = NULL;
static LLGLSLShader* fullbright_shader = NULL;
@ -660,14 +658,6 @@ void LLDrawPoolFullbrightAlphaMask::beginPostDeferredPass(S32 pass)
}
else
{
// Work-around until we can figure out why the right shader causes
// the GeForce driver to go tango uniform on OS X 10.6.8 only
//
#if GE_FORCE_WORKAROUND
gObjectFullbrightAlphaMaskProgram.bind();
gObjectFullbrightAlphaMaskProgram.uniform1f(LLShaderMgr::TEXTURE_GAMMA, 2.2f);
#else
if (LLPipeline::sUnderWaterRender)
{
gDeferredFullbrightAlphaMaskWaterProgram.bind();
@ -678,9 +668,7 @@ void LLDrawPoolFullbrightAlphaMask::beginPostDeferredPass(S32 pass)
gDeferredFullbrightAlphaMaskProgram.bind();
gDeferredFullbrightAlphaMaskProgram.uniform1f(LLShaderMgr::TEXTURE_GAMMA, 2.2f);
}
#endif
}
}
void LLDrawPoolFullbrightAlphaMask::renderPostDeferred(S32 pass)
@ -699,13 +687,6 @@ void LLDrawPoolFullbrightAlphaMask::endPostDeferredPass(S32 pass)
}
else
{
// Work-around until we can figure out why the right shader causes
// the GeForce driver to go tango uniform on OS X 10.6.8 only
//
#if GE_FORCE_WORKAROUND
gObjectFullbrightAlphaMaskProgram.unbind();
#else
if (LLPipeline::sUnderWaterRender)
{
gDeferredFullbrightAlphaMaskWaterProgram.unbind();
@ -714,8 +695,6 @@ void LLDrawPoolFullbrightAlphaMask::endPostDeferredPass(S32 pass)
{
gDeferredFullbrightAlphaMaskProgram.unbind();
}
#endif
}
LLRenderPass::endRenderPass(pass);
}

View File

@ -973,6 +973,14 @@ void LLFeatureManager::applyBaseMasks()
// maskFeatures("VRAMGT512");
//}
#if LL_DARWIN
const LLOSInfo& osInfo = LLAppViewer::instance()->getOSInfo();
if (osInfo.mMajorVer == 10 && osInfo.mMinorVer < 7)
{
maskFeatures("OSX_10_6_8");
}
#endif
// now mask by gpu string
// Replaces ' ' with '_' in mGPUString to deal with inability for parser to handle spaces
std::string gpustr = mGPUString;

View File

@ -45,10 +45,6 @@
#include "llviewerregion.h"
#include "llversioninfo.h"
#include "llweb.h"
// [RLVa:KB] - Checked: 2010-04-18 (RLVa-1.4.0)
#include "rlvactions.h"
#include "rlvhelper.h"
// [/RLVa:KB]
// Linden library includes
#include "llaudioengine.h"
@ -71,16 +67,9 @@
#include "lldxhardware.h"
#endif
// [RLVa:KB] - Checked: 2010-04-18 (RLVa-1.4.0a)
#include "rlvhandler.h"
// [/RLVa:KB]
extern LLMemoryInfo gSysMemory;
extern U32 gPacketsIn;
static std::string get_viewer_release_notes_url();
///----------------------------------------------------------------------------
/// Class LLServerReleaseNotesURLFetcher
///----------------------------------------------------------------------------
@ -99,29 +88,27 @@ public:
};
///----------------------------------------------------------------------------
/// Class LLFloaterAbout moved to llfloaterabout.h for fsdata info
/// Class LLFloaterAbout
///----------------------------------------------------------------------------
//class LLFloaterAbout
// : public LLFloater
//{
// friend class LLFloaterReg;
//private:
// LLFloaterAbout(const LLSD& key);
// virtual ~LLFloaterAbout();
//
//public:
// /*virtual*/ BOOL postBuild();
//
// /// Obtain the data used to fill out the contents string. This is
// /// separated so that we can programmatically access the same info.
// static LLSD getInfo();
// void onClickCopyToClipboard();
//
// void updateServerReleaseNotesURL(const std::string& url);
//
//private:
// void setSupportText(const std::string& server_release_notes_url);
//};
class LLFloaterAbout
: public LLFloater
{
friend class LLFloaterReg;
private:
LLFloaterAbout(const LLSD& key);
virtual ~LLFloaterAbout();
public:
/*virtual*/ BOOL postBuild();
/// Obtain the data used to fill out the contents string. This is
/// separated so that we can programmatically access the same info.
static LLSD getInfo();
void onClickCopyToClipboard();
private:
void setSupportText(const std::string& server_release_notes_url);
};
// Default constructor
@ -228,198 +215,9 @@ BOOL LLFloaterAbout::postBuild()
return TRUE;
}
// static
LLSD LLFloaterAbout::getInfo()
{
// The point of having one method build an LLSD info block and the other
// construct the user-visible About string is to ensure that the same info
// is available to a getInfo() caller as to the user opening
// LLFloaterAbout.
LLSD info;
LLSD version;
version.append(LLVersionInfo::getMajor());
version.append(LLVersionInfo::getMinor());
version.append(LLVersionInfo::getPatch());
version.append(LLVersionInfo::getBuild());
info["VIEWER_VERSION"] = version;
info["VIEWER_VERSION_STR"] = LLVersionInfo::getVersion();
info["BUILD_DATE"] = __DATE__;
info["BUILD_TIME"] = __TIME__;
info["CHANNEL"] = LLVersionInfo::getChannel();
// <FS:CR> FIRE-8273: Add Open-sim indicator to About floater
#ifdef OPENSIM
info["BUILD_TYPE"] = LLTrans::getString("FSWithOpensim");
#else
info["BUILD_TYPE"] = LLTrans::getString("FSWithHavok");
#endif // OPENSIM
// </FS:CR>
info["SKIN"] = gSavedSettings.getString("FSInternalSkinCurrent");
info["THEME"] = gSavedSettings.getString("FSInternalSkinCurrentTheme");
//[FIRE 3113 : SJ] Added Font and fontsize to info
info["FONT"] = "Unknown Font";
std::string fsInternalFontSettingsFile = gSavedSettings.getString("FSInternalFontSettingsFile");
if (fsInternalFontSettingsFile == "fonts.xml") info["FONT"] = "Deja Vu";
else if (fsInternalFontSettingsFile == "fonts_ubuntu.xml") info["FONT"] = "Ubuntu Font Family";
else if (fsInternalFontSettingsFile == "fonts_liberation.xml") info["FONT"] = "Liberation";
else if (fsInternalFontSettingsFile == "fonts_droid.xml") info["FONT"] = "Droid Sans";
else if (fsInternalFontSettingsFile == "fonts_mobi.xml") info["FONT"] = "Mobi Sans";
else if (fsInternalFontSettingsFile == "fonts_roboto.xml") info["FONT"] = "Roboto";
else if (fsInternalFontSettingsFile == "fonts_dyslexia.xml") info["FONT"] = "OpenDyslexic";
info["FONT_SIZE"] = gSavedSettings.getF32("FSFontSizeAdjustment");
info["FONT_SCREEN_DPI"] = gSavedSettings.getF32("FontScreenDPI");
//[FIRE-3923 : SJ] Added Drawdistance, bandwidth and LOD to info
info["DRAW_DISTANCE"] = gSavedSettings.getF32("RenderFarClip");
info["BANDWIDTH"] = gSavedSettings.getF32("ThrottleBandwidthKBPS");
info["LOD"] =gSavedSettings.getF32("RenderVolumeLODFactor");
//[FIRE 3113 : SJ] Added Settingsfile to info
info["MODE"] = "Unknown Mode";
std::string sessionSettingsFile = gSavedSettings.getString("SessionSettingsFile");
if (sessionSettingsFile == "settings_firestorm.xml") info["MODE"] = "Firestorm";
else if (sessionSettingsFile == "settings_phoenix.xml") info["MODE"] = "Phoenix";
else if (sessionSettingsFile == "settings_v3.xml") info["MODE"] = "Viewer 3";
else if (sessionSettingsFile == "settings_hybrid.xml") info["MODE"] = "Hybrid";
else if (sessionSettingsFile == "settings_latency.xml") info["MODE"] = "Latency";
info["VIEWER_RELEASE_NOTES_URL"] = get_viewer_release_notes_url();
#if LL_MSVC
info["COMPILER"] = "MSVC";
info["COMPILER_VERSION"] = _MSC_VER;
#elif LL_CLANG // <FS:CR> Clang identification
info["COMPILER"] = "Clang";
info["COMPILER_VERSION"] = CLANG_VERSION_STRING;
#elif LL_GNUC
info["COMPILER"] = "GCC";
info["COMPILER_VERSION"] = GCC_VERSION;
#endif
// Position
LLViewerRegion* region = gAgent.getRegion();
if (region)
{
LLVector3d pos = gAgent.getPositionGlobal();
info["POSITION"] = ll_sd_from_vector3d(pos);
info["POSITION_LOCAL"] = ll_sd_from_vector3(gAgent.getPosAgentFromGlobal(pos));
info["REGION"] = gAgent.getRegion()->getName();
info["HOSTNAME"] = gAgent.getRegion()->getHost().getHostName();
info["HOSTIP"] = gAgent.getRegion()->getHost().getString();
info["SERVER_VERSION"] = gLastVersionChannel;
LLSLURL slurl;
LLAgentUI::buildSLURL(slurl);
info["SLURL"] = slurl.getSLURLString();
}
// CPU
info["CPU"] = gSysCPU.getCPUString();
info["MEMORY_MB"] = LLSD::Integer(gSysMemory.getPhysicalMemoryKB() / 1024);
// Moved hack adjustment to Windows memory size into llsys.cpp
info["OS_VERSION"] = LLAppViewer::instance()->getOSInfo().getOSString();
info["GRAPHICS_CARD_VENDOR"] = (const char*)(glGetString(GL_VENDOR));
info["GRAPHICS_CARD"] = (const char*)(glGetString(GL_RENDERER));
#if LL_WINDOWS
LLSD driver_info = gDXHardware.getDisplayInfo();
if (driver_info.has("DriverVersion"))
{
info["GRAPHICS_DRIVER_VERSION"] = driver_info["DriverVersion"];
}
#endif
// [RLVa:KB] - Checked: 2010-04-18 (RLVa-1.2.0)
info["RLV_VERSION"] = (RlvActions::isRlvEnabled()) ? RlvStrings::getVersionAbout() : "(disabled)";
// [/RLVa:KB]
info["OPENGL_VERSION"] = (const char*)(glGetString(GL_VERSION));
info["LIBCURL_VERSION"] = LLCurl::getVersionString();
info["J2C_VERSION"] = LLImageJ2C::getEngineInfo();
bool want_fullname = true;
info["AUDIO_DRIVER_VERSION"] = gAudiop ? LLSD(gAudiop->getDriverName(want_fullname)) : LLSD();
if(LLVoiceClient::getInstance()->voiceEnabled())
{
LLVoiceVersionInfo version = LLVoiceClient::getInstance()->getVersion();
std::ostringstream version_string;
version_string << version.serverType << " " << version.serverVersion << std::endl;
info["VOICE_VERSION"] = version_string.str();
}
else
{
info["VOICE_VERSION"] = LLTrans::getString("NotConnected");
}
// TODO: Implement media plugin version query
info["QT_WEBKIT_VERSION"] = "4.7.1 (version number hard-coded)";
if (gPacketsIn > 0)
{
info["PACKETS_LOST"] = LLViewerStats::getInstance()->mPacketsLostStat.getCurrent();
// <FS:Ansariel> FIRE-3925: Formatting fails when reaching 1,000,000;
// Use S32 since it will be used in LLStringUtil::formatNumber anyway.
//info["PACKETS_IN"] = F32(gPacketsIn);
info["PACKETS_IN"] = S32(gPacketsIn);
// </FS:Ansariel>
info["PACKETS_PCT"] = 100.f*info["PACKETS_LOST"].asReal() / info["PACKETS_IN"].asReal();
}
// <FS:PP> FIRE-4785: Current render quality setting in sysinfo / about floater
switch (gSavedSettings.getU32("RenderQualityPerformance"))
{
case 0:
info["RENDERQUALITY"] = LLTrans::getString("render_quality_low");
info["RENDERQUALITY_FSDATA_ENGLISH"] = "Low (1/7)";
break;
case 1:
info["RENDERQUALITY"] = LLTrans::getString("render_quality_mediumlow");
info["RENDERQUALITY_FSDATA_ENGLISH"] = "Medium-Low (2/7)";
break;
case 2:
info["RENDERQUALITY"] = LLTrans::getString("render_quality_medium");
info["RENDERQUALITY_FSDATA_ENGLISH"] = "Medium (3/7)";
break;
case 3:
info["RENDERQUALITY"] = LLTrans::getString("render_quality_mediumhigh");
info["RENDERQUALITY_FSDATA_ENGLISH"] = "Medium-High (4/7)";
break;
case 4:
info["RENDERQUALITY"] = LLTrans::getString("render_quality_high");
info["RENDERQUALITY_FSDATA_ENGLISH"] = "High (5/7)";
break;
case 5:
info["RENDERQUALITY"] = LLTrans::getString("render_quality_highultra");
info["RENDERQUALITY_FSDATA_ENGLISH"] = "High-Ultra (6/7)";
break;
case 6:
info["RENDERQUALITY"] = LLTrans::getString("render_quality_ultra");
info["RENDERQUALITY_FSDATA_ENGLISH"] = "Ultra (7/7)";
break;
default:
info["RENDERQUALITY"] = LLTrans::getString("render_quality_unknown");
info["RENDERQUALITY_FSDATA_ENGLISH"] = "Unknown, user has RenderQualityPerformance debug setting beyond the normal range (0-6)";
break;
}
// </FS:PP>
// <FS:Ansariel> FIRE-11768: Include texture memory settings
info["TEXTUREMEMORY"] = gSavedSettings.getS32("TextureMemory");
info["TEXTUREMEMORYMULTIPLIER"] = gSavedSettings.getF32("RenderTextureMemoryMultiple");
// </FS:Ansariel>
return info;
}
static std::string get_viewer_release_notes_url()
{
// return a URL to the release notes for this viewer, such as:
// http://wiki.secondlife.com/wiki/Release_Notes/Second Life Beta Viewer/2.1.0.123456
//std::string url = LLTrans::getString("RELEASE_NOTES_BASE_URL");
//if (! LLStringUtil::endsWith(url, "/"))
// url += "/";
//url += LLVersionInfo::getChannel() + "/";
//url += LLVersionInfo::getVersion();
std::string url = "http://wiki.phoenixviewer.com/firestorm_change_log";
return LLWeb::escapeURL(url);
return LLAppViewer::instance()->getViewerInfo();
}
class LLFloaterAboutListener: public LLEventAPI
@ -456,105 +254,22 @@ void LLFloaterAbout::onClickCopyToClipboard()
support_widget->deselect();
}
void LLFloaterAbout::updateServerReleaseNotesURL(const std::string& url)
{
setSupportText(url);
}
void LLFloaterAbout::setSupportText(const std::string& server_release_notes_url)
{
#if LL_WINDOWS
getWindow()->incBusyCount();
getWindow()->setCursor(UI_CURSOR_ARROW);
#endif
LLSD info(getInfo());
#if LL_WINDOWS
getWindow()->decBusyCount();
getWindow()->setCursor(UI_CURSOR_ARROW);
#endif
if (LLStringUtil::startsWith(server_release_notes_url, "http")) // it's an URL
{
info["SERVER_RELEASE_NOTES_URL"] = "[" + LLWeb::escapeURL(server_release_notes_url) + " " + LLTrans::getString("ReleaseNotes") + "]";
}
else
{
info["SERVER_RELEASE_NOTES_URL"] = server_release_notes_url;
}
LLViewerTextEditor *support_widget =
getChild<LLViewerTextEditor>("support_editor", true);
std::ostringstream support;
// Render the LLSD from getInfo() as a format_map_t
LLStringUtil::format_map_t args;
// allow the "Release Notes" URL label to be localized
args["ReleaseNotes"] = LLTrans::getString("ReleaseNotes");
for (LLSD::map_const_iterator ii(info.beginMap()), iend(info.endMap());
ii != iend; ++ii)
{
if (! ii->second.isArray())
{
// Scalar value
if (ii->second.isUndefined())
{
args[ii->first] = getString("none");
}
else
{
// don't forget to render value asString()
args[ii->first] = ii->second.asString();
}
}
else
{
// array value: build KEY_0, KEY_1 etc. entries
for (LLSD::Integer n(0), size(ii->second.size()); n < size; ++n)
{
args[STRINGIZE(ii->first << '_' << n)] = ii->second[n].asString();
}
}
}
// Now build the various pieces
support << getString("AboutHeader", args);
if (info.has("REGION"))
{
// [RLVa:KB] - Checked: 2014-02-24 (RLVa-1.4.10)
support << "\n\n";
if (RlvActions::canShowLocation())
support << getString("AboutPosition", args);
else
support << RlvStrings::getString(RLV_STRING_HIDDEN_REGION);
// [/RLVa:KB]
// support << "\n\n" << getString("AboutPosition", args);
}
support << "\n\n" << getString("AboutSystem", args);
support << "\n";
if (info.has("GRAPHICS_DRIVER_VERSION"))
{
support << "\n" << getString("AboutDriver", args);
}
support << "\n" << getString("AboutLibs", args);
if (info.has("BANDWIDTH"))
{
support << "\n" << getString("AboutSettings", args);
}
if (info.has("COMPILER"))
{
support << "\n" << getString("AboutCompiler", args);
}
if (info.has("PACKETS_IN"))
{
support << '\n' << getString("AboutTraffic", args);
}
support_widget->clear();
support_widget->appendText(support.str(),
support_widget->appendText(LLAppViewer::instance()->getViewerInfoString(),
FALSE,
LLStyle::Params()
.color(LLUIColorTable::instance().getColor("TextFgReadOnlyColor")));
@ -601,9 +316,9 @@ void LLServerReleaseNotesURLFetcher::completedHeader(U32 status, const std::stri
std::string location = content["location"].asString();
if (location.empty())
{
location = floater_about->getString("ErrorFetchingServerReleaseNotesURL");
location = LLTrans::getString("ErrorFetchingServerReleaseNotesURL");
}
floater_about->updateServerReleaseNotesURL(location);
LLAppViewer::instance()->setServerReleaseNotesURL(location);
}
}

View File

@ -27,37 +27,9 @@
#ifndef LL_LLFLOATERABOUT_H
#define LL_LLFLOATERABOUT_H
#include "llfloater.h" //leave here -TM
namespace LLFloaterAboutUtil
{
void registerFloater();
}
//Leave this class here for fsdata to work. -TM
///----------------------------------------------------------------------------
/// Class LLFloaterAbout
///----------------------------------------------------------------------------
class LLFloaterAbout
: public LLFloater
{
friend class LLFloaterReg;
private:
LLFloaterAbout(const LLSD& key);
virtual ~LLFloaterAbout();
public:
/*virtual*/ BOOL postBuild();
/// Obtain the data used to fill out the contents string. This is
/// separated so that we can programmatically access the same info.
static LLSD getInfo();
static std::string buildAbout(const LLSD& info);
void onClickCopyToClipboard();
void updateServerReleaseNotesURL(const std::string& url);
private:
void setSupportText(const std::string& server_release_notes_url);
};
#endif // LL_LLFLOATERABOUT_H

View File

@ -151,7 +151,7 @@ void LLPanelCameraItem::setValue(const LLSD& value)
getChildView("selected_picture")->setVisible( value["selected"]);
}
static LLRegisterPanelClassWrapper<LLPanelCameraZoom> t_camera_zoom_panel("camera_zoom_panel");
static LLPanelInjector<LLPanelCameraZoom> t_camera_zoom_panel("camera_zoom_panel");
//-------------------------------------------------------------------------------
// LLPanelCameraZoom

View File

@ -89,12 +89,10 @@ LLFloaterIMContainer::LLFloaterIMContainer(const LLSD& seed, const Params& param
LLFloaterIMContainer::~LLFloaterIMContainer()
{
mConversationsEventStream.stopListening("ConversationsRefresh");
gIdleCallbacks.deleteFunction(idle, this);
mNewMessageConnection.disconnect();
LLTransientFloaterMgr::getInstance()->removeControlView(LLTransientFloaterMgr::IM, this);
if (mMicroChangedSignal.connected())
{
mMicroChangedSignal.disconnect();

View File

@ -827,6 +827,7 @@ void LLFloaterIMSessionTab::updateCallBtnState(bool callIsActive)
void LLFloaterIMSessionTab::onSlide(LLFloaterIMSessionTab* self)
{
LLFloaterIMContainer* host_floater = dynamic_cast<LLFloaterIMContainer*>(self->getHost());
bool should_be_expanded = false;
if (host_floater)
{
// Hide the messages pane if a floater is hosted in the Conversations
@ -837,7 +838,7 @@ void LLFloaterIMSessionTab::onSlide(LLFloaterIMSessionTab* self)
if (!self->mIsP2PChat)
{
// The state must toggle the collapsed state of the panel
bool should_be_expanded = self->mParticipantListPanel->isCollapsed();
should_be_expanded = self->mParticipantListPanel->isCollapsed();
// Update the expand/collapse flag of the participant list panel and save it
gSavedSettings.setBOOL("IMShowControlPanel", should_be_expanded);
@ -849,6 +850,10 @@ void LLFloaterIMSessionTab::onSlide(LLFloaterIMSessionTab* self)
}
self->assignResizeLimits();
if (should_be_expanded)
{
self->forceReshape();
}
}
void LLFloaterIMSessionTab::onCollapseToLine(LLFloaterIMSessionTab* self)

View File

@ -2449,7 +2449,7 @@ void LLFloaterPreference::changed()
//---------------------------------------------------------------------------- */
//</FS:HG> FIRE-6340, FIRE-6567 - Setting Bandwidth issues
static LLRegisterPanelClassWrapper<LLPanelPreference> t_places("panel_preference");
static LLPanelInjector<LLPanelPreference> t_places("panel_preference");
LLPanelPreference::LLPanelPreference()
//<FS:HG> FIRE-6340, FIRE-6567 - Setting Bandwidth issues
//: LLPanel(),
@ -2854,8 +2854,8 @@ private:
// </FS:Ansariel>
};
static LLRegisterPanelClassWrapper<LLPanelPreferenceGraphics> t_pref_graph("panel_preference_graphics");
static LLRegisterPanelClassWrapper<LLPanelPreferencePrivacy> t_pref_privacy("panel_preference_privacy");
static LLPanelInjector<LLPanelPreferenceGraphics> t_pref_graph("panel_preference_graphics");
static LLPanelInjector<LLPanelPreferencePrivacy> t_pref_privacy("panel_preference_privacy");
BOOL LLPanelPreferenceGraphics::postBuild()
{
@ -3134,7 +3134,7 @@ void LLFloaterPreferenceProxy::onChangeSocksSettings()
}
// [SL:KB] - Patch: Viewer-CrashReporting | Checked: 2010-11-16 (Catznip-2.6.0a) | Added: Catznip-2.4.0b
static LLRegisterPanelClassWrapper<LLPanelPreferenceCrashReports> t_pref_crashreports("panel_preference_crashreports");
static LLPanelInjector<LLPanelPreferenceCrashReports> t_pref_crashreports("panel_preference_crashreports");
LLPanelPreferenceCrashReports::LLPanelPreferenceCrashReports()
: LLPanelPreference()
@ -3197,7 +3197,7 @@ void LLPanelPreferenceCrashReports::cancel()
// [/SL:KB]
// [SL:KB] - Patch: Viewer-Skins | Checked: 2010-10-21 (Catznip-2.2)
static LLRegisterPanelClassWrapper<LLPanelPreferenceSkins> t_pref_skins("panel_preference_skins");
static LLPanelInjector<LLPanelPreferenceSkins> t_pref_skins("panel_preference_skins");
LLPanelPreferenceSkins::LLPanelPreferenceSkins()
: LLPanelPreference()
@ -3427,7 +3427,7 @@ S32 copy_prefs_file(const std::string& from, const std::string& to)
return rv;
}
static LLRegisterPanelClassWrapper<FSPanelPreferenceBackup> t_pref_backup("panel_preference_backup");
static LLPanelInjector<FSPanelPreferenceBackup> t_pref_backup("panel_preference_backup");
FSPanelPreferenceBackup::FSPanelPreferenceBackup() : LLPanelPreference()
{
@ -3965,7 +3965,7 @@ void LLFloaterPreference::populateFontSelectionCombo()
// <FS:AW optional opensim support>
#ifdef OPENSIM
static LLRegisterPanelClassWrapper<LLPanelPreferenceOpensim> t_pref_opensim("panel_preference_opensim");
static LLPanelInjector<LLPanelPreferenceOpensim> t_pref_opensim("panel_preference_opensim");
LLPanelPreferenceOpensim::LLPanelPreferenceOpensim() : LLPanelPreference(),
mGridListControl(NULL)

View File

@ -47,10 +47,10 @@
#include "llviewercontrol.h"
#include "llviewermedia.h"
static LLRegisterPanelClassWrapper<LLSocialStatusPanel> t_panel_status("llsocialstatuspanel");
static LLRegisterPanelClassWrapper<LLSocialPhotoPanel> t_panel_photo("llsocialphotopanel");
static LLRegisterPanelClassWrapper<LLSocialCheckinPanel> t_panel_checkin("llsocialcheckinpanel");
static LLRegisterPanelClassWrapper<LLSocialAccountPanel> t_panel_account("llsocialaccountpanel");
static LLPanelInjector<LLSocialStatusPanel> t_panel_status("llsocialstatuspanel");
static LLPanelInjector<LLSocialPhotoPanel> t_panel_photo("llsocialphotopanel");
static LLPanelInjector<LLSocialCheckinPanel> t_panel_checkin("llsocialcheckinpanel");
static LLPanelInjector<LLSocialAccountPanel> t_panel_account("llsocialaccountpanel");
const S32 MAX_POSTCARD_DATASIZE = 1024 * 1024; // one megabyte
const std::string DEFAULT_CHECKIN_LOCATION_URL = "http://maps.secondlife.com/";

View File

@ -62,6 +62,7 @@
#include "llresmgr.h"
#include "pipeline.h"
#include "llspatialpartition.h"
#include "llviewershadermgr.h"
// [RLVa:KB] - Checked: 2010-04-11 (RLVa-1.2.0e)
#include "rlvhandler.h"
// [/RLVa:KB]
@ -831,7 +832,6 @@ void draw_line_cube(F32 width, const LLVector3& center)
gGL.vertex3f(center.mV[VX] + width ,center.mV[VY] - width,center.mV[VZ] - width);
}
void LLViewerObjectList::renderObjectBeacons()
{
if (mDebugBeacons.empty())
@ -942,3 +942,134 @@ void LLViewerObjectList::renderObjectBeacons()
}
void gpu_benchmark()
{
if (!LLGLSLShader::sNoFixedFunction)
{ //don't bother benchmarking the fixed function
return;
}
//measure memory bandwidth by:
// - allocating a batch of textures and render targets
// - rendering those textures to those render targets
// - recording time taken
// - taking the median time for a given number of samples
//resolution of textures/render targets
const U32 res = 1024;
//number of textures
const U32 count = 32;
//number of samples to take
const S32 samples = 64;
LLGLSLShader::initProfile();
LLRenderTarget dest[count];
U32 source[count];
LLImageGL::generateTextures(count, source);
std::vector<F32> results;
//build a random texture
U8 pixels[res*res*4];
for (U32 i = 0; i < res*res*4; ++i)
{
pixels[i] = (U8) ll_rand(255);
}
gGL.setColorMask(true, true);
LLGLDepthTest depth(GL_FALSE);
for (U32 i = 0; i < count; ++i)
{ //allocate render targets and textures
dest[i].allocate(res,res,GL_RGBA,false, false, LLTexUnit::TT_TEXTURE, true);
dest[i].bindTarget();
dest[i].clear();
dest[i].flush();
gGL.getTexUnit(0)->bindManual(LLTexUnit::TT_TEXTURE, source[i]);
LLImageGL::setManualImage(GL_TEXTURE_2D, 0, GL_RGBA, res,res,GL_RGBA, GL_UNSIGNED_BYTE, pixels);
}
//make a dummy triangle to draw with
LLPointer<LLVertexBuffer> buff = new LLVertexBuffer(LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0, GL_STATIC_DRAW_ARB);
buff->allocateBuffer(3, 0, true);
LLStrider<LLVector3> v;
LLStrider<LLVector2> tc;
buff->getVertexStrider(v);
v[0].set(-1,1,0);
v[1].set(-1,-3,0);
v[2].set(3,1,0);
buff->flush();
gBenchmarkProgram.bind();
buff->setBuffer(LLVertexBuffer::MAP_VERTEX);
//wait for any previoius GL commands to finish
glFinish();
for (S32 c = -1; c < samples; ++c)
{
LLTimer timer;
timer.start();
for (U32 i = 0; i < count; ++i)
{
dest[i].bindTarget();
gGL.getTexUnit(0)->bindManual(LLTexUnit::TT_TEXTURE, source[i]);
buff->drawArrays(LLRender::TRIANGLES, 0, 3);
dest[i].flush();
}
//wait for current batch of copies to finish
glFinish();
F32 time = timer.getElapsedTimeF32();
if (c >= 0) // <-- ignore the first sample as it tends to be artificially slow
{
//store result in gigabytes per second
F32 gb = (F32) ((F64) (res*res*8*count))/(1000000000);
F32 gbps = gb/time;
results.push_back(gbps);
}
}
gBenchmarkProgram.unbind();
LLGLSLShader::finishProfile();
LLImageGL::deleteTextures(count, source);
std::sort(results.begin(), results.end());
F32 gbps = results[results.size()/2];
llinfos << "Memory bandwidth is " << llformat("%.3f", gbps) << "GB/sec according to CPU timers" << llendl;
F32 ms = gBenchmarkProgram.mTimeElapsed/1000000.f;
F32 seconds = ms/1000.f;
F64 samples_drawn = res*res*count*samples;
F32 samples_sec = (samples_drawn/1000000000.0)/seconds;
gbps = samples_sec*8;
if (gGLManager.mHasTimerQuery)
{
llinfos << "Memory bandwidth is " << llformat("%.3f", gbps) << "GB/sec according to ARB_timer_query" << llendl;
}
else
{
llinfos << "ARB_timer_query unavailable." << llendl;
}
}

View File

@ -362,7 +362,7 @@ private:
//////////////////////////////////////////////////////////////////////////
static LLRegisterPanelClassWrapper<LLOutfitsList> t_outfits_list("outfits_list");
static LLPanelInjector<LLOutfitsList> t_outfits_list("outfits_list");
LLOutfitsList::LLOutfitsList()
: LLPanelAppearanceTab()

View File

@ -48,7 +48,7 @@
#include "llsidetraypanelcontainer.h"
#include "llviewercontrol.h"
static LLRegisterPanelClassWrapper<LLPanelBlockedList> t_panel_blocked_list("panel_block_list_sidetray");
static LLPanelInjector<LLPanelBlockedList> t_panel_blocked_list("panel_block_list_sidetray");
//
// Constants

View File

@ -65,7 +65,7 @@
#include "llfilepicker.h"
// register panel with appropriate XML
static LLRegisterPanelClassWrapper<LLPanelEditWearable> t_edit_wearable("panel_edit_wearable");
static LLPanelInjector<LLPanelEditWearable> t_edit_wearable("panel_edit_wearable");
// subparts of the UI for focus, camera position, etc.
enum ESubpart {

View File

@ -60,7 +60,7 @@
#include "llviewercontrol.h"
// </FS:Ansariel>
static LLRegisterPanelClassWrapper<LLPanelGroup> t_panel_group("panel_group_info_sidetray");
static LLPanelInjector<LLPanelGroup> t_panel_group("panel_group_info_sidetray");

View File

@ -58,7 +58,7 @@
#include "llclipboard.h"
#include "lleconomy.h" // <FS:AW FIRE-7091 group creation cost inaccurate on opensim>
static LLRegisterPanelClassWrapper<LLPanelGroupGeneral> t_panel_group_general("panel_group_general");
static LLPanelInjector<LLPanelGroupGeneral> t_panel_group_general("panel_group_general");
// consts
const S32 MATURE_CONTENT = 1;
@ -68,14 +68,12 @@ const S32 DECLINE_TO_STATE = 0;
LLPanelGroupGeneral::LLPanelGroupGeneral()
: LLPanelGroupTab(),
mPendingMemberUpdate(FALSE),
mChanged(FALSE),
mFirstUse(TRUE),
mGroupNameEditor(NULL),
mFounderName(NULL),
mInsignia(NULL),
mEditCharter(NULL),
mListVisibleMembers(NULL),
mCtrlShowInGroupList(NULL),
mComboMature(NULL),
mCtrlOpenEnrollment(NULL),
@ -85,8 +83,6 @@ LLPanelGroupGeneral::LLPanelGroupGeneral()
mCtrlListGroup(NULL),
mActiveTitleLabel(NULL),
mComboActiveTitle(NULL),
// <FS:Ansariel> Member list doesn't load properly
//mAvatarNameCacheConnection(),
mCtrlReceiveGroupChat(NULL) // <exodus/>
{
@ -94,20 +90,6 @@ LLPanelGroupGeneral::LLPanelGroupGeneral()
LLPanelGroupGeneral::~LLPanelGroupGeneral()
{
// <FS:Ansariel> Member list doesn't load properly
//if (mAvatarNameCacheConnection.connected())
//{
// mAvatarNameCacheConnection.disconnect();
//}
for (avatar_name_cache_connection_map_t::iterator it = mAvatarNameCacheConnections.begin(); it != mAvatarNameCacheConnections.end(); ++it)
{
if (it->second.connected())
{
it->second.disconnect();
}
}
mAvatarNameCacheConnections.clear();
// </FS:Ansariel>
}
BOOL LLPanelGroupGeneral::postBuild()
@ -126,17 +108,6 @@ BOOL LLPanelGroupGeneral::postBuild()
childSetCommitCallback("copy_name", boost::bind(&LLPanelGroupGeneral::onCopyName, this), NULL);
childSetEnabled("copy_name", FALSE);
// </FS>
mListVisibleMembers = getChild<LLNameListCtrl>("visible_members", recurse);
if (mListVisibleMembers)
{
mListVisibleMembers->setDoubleClickCallback(openProfile, this);
mListVisibleMembers->setContextMenu(LLScrollListCtrl::MENU_AVATAR);
mListVisibleMembers->setSortCallback(boost::bind(&LLPanelGroupGeneral::sortMembersList,this,_1,_2,_3));
}
// Options
mCtrlShowInGroupList = getChild<LLCheckBoxCtrl>("show_in_group_list", recurse);
if (mCtrlShowInGroupList)
@ -330,21 +301,6 @@ void LLPanelGroupGeneral::onClickInfo(void *userdata)
}
// static
void LLPanelGroupGeneral::openProfile(void* data)
{
LLPanelGroupGeneral* self = (LLPanelGroupGeneral*)data;
if (self && self->mListVisibleMembers)
{
LLScrollListItem* selected = self->mListVisibleMembers->getFirstSelected();
if (selected)
{
LLAvatarActions::showProfile(selected->getUUID());
}
}
}
bool LLPanelGroupGeneral::needsApply(std::string& mesg)
{
updateChanged();
@ -376,11 +332,6 @@ void LLPanelGroupGeneral::activate()
void LLPanelGroupGeneral::draw()
{
LLPanelGroupTab::draw();
if (mPendingMemberUpdate)
{
updateMembers();
}
}
bool LLPanelGroupGeneral::apply(std::string& mesg)
@ -582,10 +533,6 @@ bool LLPanelGroupGeneral::createGroupCallback(const LLSD& notification, const LL
return false;
}
static F32 sSDTime = 0.0f;
static F32 sElementTime = 0.0f;
static F32 sAllTime = 0.0f;
// virtual
void LLPanelGroupGeneral::update(LLGroupChange gc)
{
@ -736,174 +683,10 @@ void LLPanelGroupGeneral::update(LLGroupChange gc)
{
mEditCharter->setText(gdatap->mCharter);
}
if (mListVisibleMembers)
{
mListVisibleMembers->deleteAllItems();
if (gdatap->isMemberDataComplete())
{
mMemberProgress = gdatap->mMembers.begin();
mPendingMemberUpdate = TRUE;
mIteratorGroup = mGroupID; // <FS:ND/> FIRE-6074
sSDTime = 0.0f;
sElementTime = 0.0f;
sAllTime = 0.0f;
}
else
{
std::stringstream pending;
pending << "Retrieving member list (" << gdatap->mMembers.size() << "\\" << gdatap->mMemberCount << ")";
LLSD row;
row["columns"][0]["value"] = pending.str();
row["columns"][0]["column"] = "name";
mListVisibleMembers->setEnabled(FALSE);
mListVisibleMembers->addElement(row);
}
}
// <FS:Ansariel> Copy group name button
childSetEnabled("copy_name", !gdatap->mName.empty());
mGroupName = gdatap->mName;
// </FS:Ansariel>
resetDirty();
}
void LLPanelGroupGeneral::updateMembers()
{
mPendingMemberUpdate = FALSE;
LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
if (!mListVisibleMembers
|| !gdatap
|| !gdatap->isMemberDataComplete()
|| gdatap->mMembers.empty())
{
return;
}
LLTimer update_time;
update_time.setTimerExpirySec(UPDATE_MEMBERS_SECONDS_PER_FRAME);
// <FS:ND> FIRE-6074; If the group changes, mMemberPRogresss is invalid, as it belongs to a different LLGroupMgrGroupData. Reset it, start over.
if( mIteratorGroup != mGroupID )
{
mMemberProgress = gdatap->mMembers.begin();
mIteratorGroup = mGroupID;
}
// </FS:ND> FIRE-6074
LLAvatarName av_name;
for( ; mMemberProgress != gdatap->mMembers.end() && !update_time.hasExpired();
++mMemberProgress)
{
LLGroupMemberData* member = mMemberProgress->second;
if (!member)
{
continue;
}
if (LLAvatarNameCache::get(mMemberProgress->first, &av_name))
{
addMember(mMemberProgress->second);
}
else
{
// If name is not cached, onNameCache() should be called when it is cached and add this member to list.
// *TODO : Use a callback per member, not for the panel group.
// <FS:Ansariel> Member list doesn't load properly
//if (mAvatarNameCacheConnection.connected())
//{
// mAvatarNameCacheConnection.disconnect();
//}
//mAvatarNameCacheConnection = LLAvatarNameCache::get(mMemberProgress->first, boost::bind(&LLPanelGroupGeneral::onNameCache, this, gdatap->getMemberVersion(), member, _2));
avatar_name_cache_connection_map_t::iterator it = mAvatarNameCacheConnections.find(mMemberProgress->first);
if (it != mAvatarNameCacheConnections.end())
{
if (it->second.connected())
{
it->second.disconnect();
}
mAvatarNameCacheConnections.erase(it);
}
mAvatarNameCacheConnections[mMemberProgress->first] = LLAvatarNameCache::get(mMemberProgress->first, boost::bind(&LLPanelGroupGeneral::onNameCache, this, gdatap->getMemberVersion(), member, _2, _1));
// </FS:Ansariel>
}
}
if (mMemberProgress == gdatap->mMembers.end())
{
lldebugs << " member list completed." << llendl;
mListVisibleMembers->setEnabled(TRUE);
}
else
{
mPendingMemberUpdate = TRUE;
mListVisibleMembers->setEnabled(FALSE);
}
}
void LLPanelGroupGeneral::addMember(LLGroupMemberData* member)
{
LLNameListCtrl::NameItem item_params;
item_params.value = member->getID();
LLScrollListCell::Params column;
item_params.columns.add().column("name").font.name("SANSSERIF_SMALL");
item_params.columns.add().column("title").value(member->getTitle()).font.name("SANSSERIF_SMALL");
item_params.columns.add().column("status").value(member->getOnlineStatus()).font.name("SANSSERIF_SMALL");
LLScrollListItem* member_row = mListVisibleMembers->addNameItemRow(item_params);
if ( member->isOwner() )
{
LLScrollListText* name_textp = dynamic_cast<LLScrollListText*>(member_row->getColumn(0));
if (name_textp)
name_textp->setFontStyle(LLFontGL::BOLD);
}
}
// <FS:Ansariel> Member list doesn't load properly
//void LLPanelGroupGeneral::onNameCache(const LLUUID& update_id, LLGroupMemberData* member, const LLAvatarName& av_name)
void LLPanelGroupGeneral::onNameCache(const LLUUID& update_id, LLGroupMemberData* member, const LLAvatarName& av_name, const LLUUID& av_id)
// </FS:Ansariel>
{
// <FS:Ansariel> Member list doesn't load properly
//mAvatarNameCacheConnection.disconnect();
avatar_name_cache_connection_map_t::iterator it = mAvatarNameCacheConnections.find(av_id);
if (it != mAvatarNameCacheConnections.end())
{
if (it->second.connected())
{
it->second.disconnect();
}
mAvatarNameCacheConnections.erase(it);
}
// </FS:Ansariel>
LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
if (!gdatap
|| !gdatap->isMemberDataComplete()
|| gdatap->getMemberVersion() != update_id)
{
// Stale data
return;
}
addMember(member);
}
void LLPanelGroupGeneral::updateChanged()
{
// List all the controls we want to check for changes...
@ -986,17 +769,6 @@ void LLPanelGroupGeneral::reset()
mEditCharter->setText(empty_str);
mGroupNameEditor->setText(empty_str);
}
{
LLSD row;
row["columns"][0]["value"] = "no members yet";
row["columns"][0]["column"] = "name";
mListVisibleMembers->deleteAllItems();
mListVisibleMembers->setEnabled(FALSE);
mListVisibleMembers->addElement(row);
}
{
mComboMature->setEnabled(true);
@ -1127,21 +899,6 @@ void LLPanelGroupGeneral::setGroupID(const LLUUID& id)
activate();
}
S32 LLPanelGroupGeneral::sortMembersList(S32 col_idx,const LLScrollListItem* i1,const LLScrollListItem* i2)
{
const LLScrollListCell *cell1 = i1->getColumn(col_idx);
const LLScrollListCell *cell2 = i2->getColumn(col_idx);
if(col_idx == 2)
{
if(LLStringUtil::compareDict(cell1->getValue().asString(),"Online") == 0 )
return 1;
if(LLStringUtil::compareDict(cell2->getValue().asString(),"Online") == 0 )
return -1;
}
return LLStringUtil::compareDict(cell1->getValue().asString(), cell2->getValue().asString());
}
// <FS> Copy button handlers
// Copy URI button callback

View File

@ -29,8 +29,6 @@
#include "llpanelgroup.h"
#include <boost/unordered_map.hpp>
class LLLineEditor;
class LLTextBox;
class LLTextureCtrl;
@ -64,11 +62,6 @@ public:
virtual void setGroupID(const LLUUID& id);
virtual void setupCtrls (LLPanel* parent);
// <FS:Ansariel> Member list doesn't load properly
//void onNameCache(const LLUUID& update_id, LLGroupMemberData* member, const LLAvatarName& av_name);
void onNameCache(const LLUUID& update_id, LLGroupMemberData* member, const LLAvatarName& av_name, const LLUUID& av_id);
// </FS:Ansariel>
// <FS> Copy button callbacks
protected:
@ -87,18 +80,12 @@ private:
static void onCommitEnrollment(LLUICtrl* ctrl, void* data);
static void onClickInfo(void* userdata);
static void onReceiveNotices(LLUICtrl* ctrl, void* data);
static void openProfile(void* data);
S32 sortMembersList(S32,const LLScrollListItem*,const LLScrollListItem*);
void addMember(LLGroupMemberData* member);
static bool joinDlgCB(const LLSD& notification, const LLSD& response);
void updateMembers();
void updateChanged();
bool confirmMatureApply(const LLSD& notification, const LLSD& response);
BOOL mPendingMemberUpdate;
BOOL mChanged;
BOOL mFirstUse;
std::string mIncompleteMemberDataStr;
@ -109,8 +96,6 @@ private:
LLTextureCtrl *mInsignia;
LLTextEditor *mEditCharter;
LLNameListCtrl *mListVisibleMembers;
// Options (include any updates in updateChanged)
LLCheckBoxCtrl *mCtrlShowInGroupList;
LLCheckBoxCtrl *mCtrlOpenEnrollment;
@ -123,13 +108,6 @@ private:
LLComboBox *mComboMature;
LLCheckBoxCtrl *mCtrlReceiveGroupChat; // <exodus/>
LLGroupMgrGroupData::member_list_t::iterator mMemberProgress;
// <FS:Ansariel> Member list doesn't load properly
//boost::signals2::connection mAvatarNameCacheConnection;
typedef boost::unordered_map<LLUUID, boost::signals2::connection, FSUUIDHash> avatar_name_cache_connection_map_t;
avatar_name_cache_connection_map_t mAvatarNameCacheConnections;
// </FS:Ansariel>
LLUUID mIteratorGroup; // <FS:ND/> FIRE-6074; UUID of the group mMemberProgress belongs to.
// <FS:Ansariel> For storing group name for copy name button

View File

@ -56,7 +56,7 @@
#include "llviewermessage.h"
#include "tea.h" // <FS:AW opensim currency support>
static LLRegisterPanelClassWrapper<LLPanelGroupLandMoney> t_panel_group_money("panel_group_land_money");
static LLPanelInjector<LLPanelGroupLandMoney> t_panel_group_money("panel_group_land_money");

View File

@ -59,7 +59,7 @@
#include "llviewercontrol.h" // <FS:CR> FIRE-11247 - gSavedSettings
static LLRegisterPanelClassWrapper<LLPanelGroupNotices> t_panel_group_notices("panel_group_notices");
static LLPanelInjector<LLPanelGroupNotices> t_panel_group_notices("panel_group_notices");
/////////////////////////

View File

@ -58,7 +58,7 @@
// [FS:CR] FIRE-12276
#include "llfilepicker.h"
static LLRegisterPanelClassWrapper<LLPanelGroupRoles> t_panel_group_roles("panel_group_roles");
static LLPanelInjector<LLPanelGroupRoles> t_panel_group_roles("panel_group_roles");
bool agentCanRemoveFromRole(const LLUUID& group_id,
const LLUUID& role_id)
@ -736,7 +736,7 @@ void LLPanelGroupSubTab::setFooterEnabled(BOOL enable)
////////////////////////////
static LLRegisterPanelClassWrapper<LLPanelGroupMembersSubTab> t_panel_group_members_subtab("panel_group_members_subtab");
static LLPanelInjector<LLPanelGroupMembersSubTab> t_panel_group_members_subtab("panel_group_members_subtab");
LLPanelGroupMembersSubTab::LLPanelGroupMembersSubTab()
: LLPanelGroupSubTab(),
@ -756,20 +756,10 @@ LLPanelGroupMembersSubTab::LLPanelGroupMembersSubTab()
LLPanelGroupMembersSubTab::~LLPanelGroupMembersSubTab()
{
// <FS:Ansariel> Member list doesn't load properly
//if (mAvatarNameCacheConnection.connected())
//{
// mAvatarNameCacheConnection.disconnect();
//}
for (avatar_name_cache_connection_map_t::iterator it = mAvatarNameCacheConnections.begin(); it != mAvatarNameCacheConnections.end(); ++it)
if (mAvatarNameCacheConnection.connected())
{
if (it->second.connected())
{
it->second.disconnect();
}
mAvatarNameCacheConnection.disconnect();
}
mAvatarNameCacheConnections.clear();
// </FS:Ansariel>
if (mMembersList)
{
gSavedSettings.setString("GroupMembersSortOrder", mMembersList->getSortColumnName());
@ -1660,28 +1650,17 @@ void LLPanelGroupMembersSubTab::addMemberToList(LLGroupMemberData* data)
item_params.columns.add().column("online").value(data->getOnlineStatus())
.font.name("SANSSERIF_SMALL").style("NORMAL");
item_params.columns.add().column("title").value(data->getTitle()).font.name("SANSSERIF_SMALL").style("NORMAL");;
mMembersList->addNameItemRow(item_params);
mHasMatch = TRUE;
}
// <FS:Ansariel> Member list doesn't load properly
//void LLPanelGroupMembersSubTab::onNameCache(const LLUUID& update_id, LLGroupMemberData* member, const LLAvatarName& av_name)
void LLPanelGroupMembersSubTab::onNameCache(const LLUUID& update_id, LLGroupMemberData* member, const LLAvatarName& av_name, const LLUUID& av_id)
// </FS:Ansariel>
void LLPanelGroupMembersSubTab::onNameCache(const LLUUID& update_id, LLGroupMemberData* member, const LLAvatarName& av_name)
{
// <FS:Ansariel> Member list doesn't load properly
//mAvatarNameCacheConnection.disconnect();
avatar_name_cache_connection_map_t::iterator it = mAvatarNameCacheConnections.find(av_id);
if (it != mAvatarNameCacheConnections.end())
{
if (it->second.connected())
{
it->second.disconnect();
}
mAvatarNameCacheConnections.erase(it);
}
// </FS:Ansariel>
mAvatarNameCacheConnection.disconnect();
LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
if (!gdatap
@ -1692,10 +1671,7 @@ void LLPanelGroupMembersSubTab::onNameCache(const LLUUID& update_id, LLGroupMemb
}
// trying to avoid unnecessary hash lookups
// <FS:CR> FIRE-11350
//if (matchesSearchFilter(av_name.getAccountName()))
if (matchesSearchFilter(av_name.getUserName()))
// </FS:CR>
if (matchesSearchFilter(av_name.getAccountName()))
{
addMemberToList(member);
if(!mMembersList->getEnabled())
@ -1761,24 +1737,11 @@ void LLPanelGroupMembersSubTab::updateMembers()
{
// If name is not cached, onNameCache() should be called when it is cached and add this member to list.
// *TODO : Add one callback per fetched avatar name
// <FS:Ansariel> Member list doesn't load properly
//if (mAvatarNameCacheConnection.connected())
//{
// mAvatarNameCacheConnection.disconnect();
//}
//mAvatarNameCacheConnection = LLAvatarNameCache::get(mMemberProgress->first, boost::bind(&LLPanelGroupMembersSubTab::onNameCache, this, gdatap->getMemberVersion(), mMemberProgress->second, _2));
avatar_name_cache_connection_map_t::iterator it = mAvatarNameCacheConnections.find(mMemberProgress->first);
if (it != mAvatarNameCacheConnections.end())
if (mAvatarNameCacheConnection.connected())
{
if (it->second.connected())
{
it->second.disconnect();
}
mAvatarNameCacheConnections.erase(it);
mAvatarNameCacheConnection.disconnect();
}
mAvatarNameCacheConnections[mMemberProgress->first] = LLAvatarNameCache::get(mMemberProgress->first, boost::bind(&LLPanelGroupMembersSubTab::onNameCache, this, gdatap->getMemberVersion(), mMemberProgress->second, _2, _1));
// </FS:Ansariel>
mAvatarNameCacheConnection = LLAvatarNameCache::get(mMemberProgress->first, boost::bind(&LLPanelGroupMembersSubTab::onNameCache, this, gdatap->getMemberVersion(), mMemberProgress->second, _2));
}
}
@ -1847,7 +1810,7 @@ void LLPanelGroupMembersSubTab::onExportMembersToXML()
// LLPanelGroupRolesSubTab
////////////////////////////
static LLRegisterPanelClassWrapper<LLPanelGroupRolesSubTab> t_panel_group_roles_subtab("panel_group_roles_subtab");
static LLPanelInjector<LLPanelGroupRolesSubTab> t_panel_group_roles_subtab("panel_group_roles_subtab");
LLPanelGroupRolesSubTab::LLPanelGroupRolesSubTab()
: LLPanelGroupSubTab(),
@ -2561,7 +2524,7 @@ void LLPanelGroupRolesSubTab::saveRoleChanges(bool select_saved_role)
// LLPanelGroupActionsSubTab
////////////////////////////
static LLRegisterPanelClassWrapper<LLPanelGroupActionsSubTab> t_panel_group_actions_subtab("panel_group_actions_subtab");
static LLPanelInjector<LLPanelGroupActionsSubTab> t_panel_group_actions_subtab("panel_group_actions_subtab");
LLPanelGroupActionsSubTab::LLPanelGroupActionsSubTab()
@ -2758,7 +2721,7 @@ void LLPanelGroupRoles::setGroupID(const LLUUID& id)
// [/FS:CR]
if(mSubTabContainer)
mSubTabContainer->selectTab(0);
mSubTabContainer->selectTab(1);
activate();
}

View File

@ -189,10 +189,7 @@ public:
virtual void setGroupID(const LLUUID& id);
void addMemberToList(LLGroupMemberData* data);
// <FS:Ansariel> Member list doesn't load properly
//void onNameCache(const LLUUID& update_id, LLGroupMemberData* member, const LLAvatarName& av_name);
void onNameCache(const LLUUID& update_id, LLGroupMemberData* member, const LLAvatarName& av_name, const LLUUID& av_id);
// </FS:Ansariel>
void onNameCache(const LLUUID& update_id, LLGroupMemberData* member, const LLAvatarName& av_name);
protected:
typedef std::map<LLUUID, LLRoleMemberChangeType> role_change_data_map_t;
@ -218,10 +215,7 @@ protected:
U32 mNumOwnerAdditions;
LLGroupMgrGroupData::member_list_t::iterator mMemberProgress;
// <FS:Ansariel> Member list doesn't load properly
//boost::signals2::connection mAvatarNameCacheConnection;
typedef boost::unordered_map<LLUUID, boost::signals2::connection, FSUUIDHash> avatar_name_cache_connection_map_t;
avatar_name_cache_connection_map_t mAvatarNameCacheConnections;
boost::signals2::connection mAvatarNameCacheConnection;
// </FS:Ansariel>
// [FS:CR] FIRE-12276

View File

@ -31,7 +31,7 @@
#include "llmediactrl.h"
#include "llviewerhome.h"
static LLRegisterPanelClassWrapper<LLPanelHome> t_home("panel_sidetray_home");
static LLPanelInjector<LLPanelHome> t_home("panel_sidetray_home");
LLPanelHome::LLPanelHome() :
LLPanel(),

View File

@ -53,7 +53,7 @@ typedef std::pair<LLUUID, std::string> folder_pair_t;
static bool cmp_folders(const folder_pair_t& left, const folder_pair_t& right);
static void collectLandmarkFolders(LLInventoryModel::cat_array_t& cats);
static LLRegisterPanelClassWrapper<LLPanelLandmarkInfo> t_landmark_info("panel_landmark_info");
static LLPanelInjector<LLPanelLandmarkInfo> t_landmark_info("panel_landmark_info");
// Statics for textures filenames
static std::string icon_pg;

View File

@ -61,7 +61,7 @@
// [/RLVa:KB]
// Not yet implemented; need to remove buildPanel() from constructor when we switch
//static LLRegisterPanelClassWrapper<LLLandmarksPanel> t_landmarks("panel_landmarks");
//static LLPanelInjector<LLLandmarksPanel> t_landmarks("panel_landmarks");
static const std::string OPTIONS_BUTTON_NAME = "options_gear_btn";
static const std::string ADD_BUTTON_NAME = "add_btn";

View File

@ -67,7 +67,7 @@ bool LLPanelMainInventory::sSaveFilters = true;
const std::string FILTERS_FILENAME("filters.xml");
static LLRegisterPanelClassWrapper<LLPanelMainInventory> t_inventory("panel_main_inventory");
static LLPanelInjector<LLPanelMainInventory> t_inventory("panel_main_inventory");
void on_file_loaded_for_save(BOOL success,
LLViewerFetchedTexture *src_vi,

View File

@ -38,7 +38,7 @@
#include "llviewercontrol.h"
static LLRegisterPanelClassWrapper<LLPanelMarketplaceInbox> t_panel_marketplace_inbox("panel_marketplace_inbox");
static LLPanelInjector<LLPanelMarketplaceInbox> t_panel_marketplace_inbox("panel_marketplace_inbox");
const LLPanelMarketplaceInbox::Params& LLPanelMarketplaceInbox::getDefaultParams()
{

View File

@ -48,7 +48,7 @@
#include "lltabcontainer.h"
#include "lltexturectrl.h"
static LLRegisterPanelClassWrapper<LLPanelMe> t_panel_me_profile("panel_me");
static LLPanelInjector<LLPanelMe> t_panel_me_profile("panel_me");
LLPanelMe::LLPanelMe(void)
: LLPanelProfile()

View File

@ -77,7 +77,7 @@
#include "rlvhandler.h"
// [/RLVa:KB]
static LLRegisterPanelClassWrapper<LLPanelOutfitEdit> t_outfit_edit("panel_outfit_edit");
static LLPanelInjector<LLPanelOutfitEdit> t_outfit_edit("panel_outfit_edit");
const U64 WEARABLE_MASK = (1LL << LLInventoryType::IT_WEARABLE);
const U64 ATTACHMENT_MASK = (1LL << LLInventoryType::IT_ATTACHMENT) | (1LL << LLInventoryType::IT_OBJECT);

View File

@ -46,7 +46,7 @@
static const std::string OUTFITS_TAB_NAME = "outfitslist_tab";
static const std::string COF_TAB_NAME = "cof_tab";
static LLRegisterPanelClassWrapper<LLPanelOutfitsInventory> t_inventory("panel_outfits_inventory");
static LLPanelInjector<LLPanelOutfitsInventory> t_inventory("panel_outfits_inventory");
LLPanelOutfitsInventory::LLPanelOutfitsInventory() :
mMyOutfitsPanel(NULL),

View File

@ -231,7 +231,7 @@ static const LLAvatarItemStatusComparator STATUS_COMPARATOR;
static LLAvatarItemDistanceComparator DISTANCE_COMPARATOR;
static const LLAvatarItemRecentSpeakerComparator RECENT_SPEAKER_COMPARATOR;
static LLRegisterPanelClassWrapper<LLPanelPeople> t_people("panel_people");
static LLPanelInjector<LLPanelPeople> t_people("panel_people");
//=============================================================================

View File

@ -69,7 +69,7 @@ static const std::string CLASSIFIED_ID("classified_id");
static const std::string CLASSIFIED_NAME("classified_name");
static LLRegisterPanelClassWrapper<LLPanelPicks> t_panel_picks("panel_picks");
static LLPanelInjector<LLPanelPicks> t_panel_picks("panel_picks");
class LLPickHandler : public LLCommandHandler,

View File

@ -56,7 +56,7 @@
#include "rlvhandler.h"
// [/RLVa:KB]
static LLRegisterPanelClassWrapper<LLPanelPlaceProfile> t_place_profile("panel_place_profile");
static LLPanelInjector<LLPanelPlaceProfile> t_place_profile("panel_place_profile");
// Statics for textures filenames
static std::string icon_pg;

View File

@ -244,7 +244,7 @@ private:
};
static LLRegisterPanelClassWrapper<LLPanelPlaces> t_places("panel_places");
static LLPanelInjector<LLPanelPlaces> t_places("panel_places");
LLPanelPlaces::LLPanelPlaces()
: LLPanel(),

View File

@ -68,7 +68,7 @@ private:
void onSend();
};
static LLRegisterPanelClassWrapper<LLPanelSnapshotInventory> panel_class("llpanelsnapshotinventory");
static LLPanelInjector<LLPanelSnapshotInventory> panel_class("llpanelsnapshotinventory");
LLPanelSnapshotInventory::LLPanelSnapshotInventory()
{

View File

@ -67,7 +67,7 @@ private:
void onSaveFlyoutCommit(LLUICtrl* ctrl);
};
static LLRegisterPanelClassWrapper<LLPanelSnapshotLocal> panel_class("llpanelsnapshotlocal");
static LLPanelInjector<LLPanelSnapshotLocal> panel_class("llpanelsnapshotlocal");
LLPanelSnapshotLocal::LLPanelSnapshotLocal()
{

View File

@ -61,7 +61,7 @@ private:
// </exodus>
};
static LLRegisterPanelClassWrapper<LLPanelSnapshotOptions> panel_class("llpanelsnapshotoptions");
static LLPanelInjector<LLPanelSnapshotOptions> panel_class("llpanelsnapshotoptions");
LLPanelSnapshotOptions::LLPanelSnapshotOptions()
{

View File

@ -81,7 +81,7 @@ private:
std::string mAgentEmail;
};
static LLRegisterPanelClassWrapper<LLPanelSnapshotPostcard> panel_class("llpanelsnapshotpostcard");
static LLPanelInjector<LLPanelSnapshotPostcard> panel_class("llpanelsnapshotpostcard");
LLPanelSnapshotPostcard::LLPanelSnapshotPostcard()
: mHasFirstMsgFocus(false)

View File

@ -66,7 +66,7 @@ private:
void onSend();
};
static LLRegisterPanelClassWrapper<LLPanelSnapshotProfile> panel_class("llpanelsnapshotprofile");
static LLPanelInjector<LLPanelSnapshotProfile> panel_class("llpanelsnapshotprofile");
LLPanelSnapshotProfile::LLPanelSnapshotProfile()
{

View File

@ -459,7 +459,7 @@ void LLTeleportHistoryPanel::ContextMenu::onCopyToClipboard()
}
// Not yet implemented; need to remove buildPanel() from constructor when we switch
//static LLRegisterPanelClassWrapper<LLTeleportHistoryPanel> t_teleport_history("panel_teleport_history");
//static LLPanelInjector<LLTeleportHistoryPanel> t_teleport_history("panel_teleport_history");
LLTeleportHistoryPanel::LLTeleportHistoryPanel()
: LLPanelPlacesTab(),

View File

@ -40,7 +40,7 @@
#include "lluictrlfactory.h"
static LLRegisterPanelClassWrapper<LLPanelVoiceDeviceSettings> t_panel_group_general("panel_voice_device_settings");
static LLPanelInjector<LLPanelVoiceDeviceSettings> t_panel_group_general("panel_voice_device_settings");
static const std::string DEFAULT_DEVICE("Default");

View File

@ -36,7 +36,7 @@
#include "lltransientfloatermgr.h"
#include "llvoiceclient.h"
static LLRegisterPanelClassWrapper<LLPanelVoiceEffect> t_panel_voice_effect("panel_voice_effect");
static LLPanelInjector<LLPanelVoiceEffect> t_panel_voice_effect("panel_voice_effect");
LLPanelVoiceEffect::LLPanelVoiceEffect()
: mVoiceEffectCombo(NULL)

View File

@ -208,7 +208,7 @@ protected:
std::string LLPanelAppearanceTab::sFilterSubString = LLStringUtil::null;
static LLRegisterPanelClassWrapper<LLPanelWearing> t_panel_wearing("panel_wearing");
static LLPanelInjector<LLPanelWearing> t_panel_wearing("panel_wearing");
LLPanelWearing::LLPanelWearing()
: LLPanelAppearanceTab()

View File

@ -27,7 +27,7 @@
#include "llpopupview.h"
static LLRegisterPanelClassWrapper<LLPopupView> r("popup_holder");
static LLPanelInjector<LLPopupView> r("popup_holder");
bool view_visible_and_enabled(LLView* viewp)
{

View File

@ -60,8 +60,8 @@ S32 gStartImageWidth = 1;
S32 gStartImageHeight = 1;
const F32 FADE_TO_WORLD_TIME = 1.0f;
static LLRegisterPanelClassWrapper<LLProgressView> r("progress_view");
static LLRegisterPanelClassWrapper<LLProgressViewMini> r_mini("progress_view_mini");
static LLPanelInjector<LLProgressView> r("progress_view");
static LLPanelInjector<LLProgressViewMini> r_mini("progress_view_mini");
LLProgressViewMini::LLProgressViewMini()
{

View File

@ -49,7 +49,7 @@
#include "llvoavatarself.h"
#include "llviewerwearable.h"
static LLRegisterPanelClassWrapper<LLSidepanelAppearance> t_appearance("sidepanel_appearance");
static LLPanelInjector<LLSidepanelAppearance> t_appearance("sidepanel_appearance");
class LLCurrentlyWornFetchObserver : public LLInventoryFetchItemsObserver
{

View File

@ -65,7 +65,7 @@
#include "llviewernetwork.h"
#endif // OPENSIM
static LLRegisterPanelClassWrapper<LLSidepanelInventory> t_inventory("sidepanel_inventory");
static LLPanelInjector<LLSidepanelInventory> t_inventory("sidepanel_inventory");
//
// Constants

View File

@ -129,7 +129,7 @@ void LLObjectInventoryObserver::inventoryChanged(LLViewerObject* object,
/// Class LLSidepanelItemInfo
///----------------------------------------------------------------------------
static LLRegisterPanelClassWrapper<LLSidepanelItemInfo> t_item_info("sidepanel_item_info");
static LLPanelInjector<LLSidepanelItemInfo> t_item_info("sidepanel_item_info");
// Default constructor
LLSidepanelItemInfo::LLSidepanelItemInfo(const LLPanel::Params& p)

View File

@ -75,7 +75,7 @@
LLSidepanelTaskInfo* LLSidepanelTaskInfo::sActivePanel = NULL;
static LLRegisterPanelClassWrapper<LLSidepanelTaskInfo> t_task_info("sidepanel_task_info");
static LLPanelInjector<LLSidepanelTaskInfo> t_task_info("sidepanel_task_info");
// Default constructor
LLSidepanelTaskInfo::LLSidepanelTaskInfo()

View File

@ -976,15 +976,19 @@ bool idle_startup()
display_startup();
LLPanelLogin::giveFocus();
if (gSavedSettings.getBOOL("FirstLoginThisInstall"))
// MAINT-3231 Show first run dialog only for Desura viewer
if (gSavedSettings.getString("sourceid") == "1208_desura")
{
LL_INFOS("AppInit") << "FirstLoginThisInstall, calling show_first_run_dialog()" << LL_ENDL;
if (gSavedSettings.getBOOL("FirstLoginThisInstall"))
{
LL_INFOS("AppInit") << "FirstLoginThisInstall, calling show_first_run_dialog()" << LL_ENDL;
// <FS:CR> Don't show first run dialog, ever, at all.
// show_first_run_dialog();
}
else
{
LL_DEBUGS("AppInit") << "FirstLoginThisInstall off" << LL_ENDL;
// show_first_run_dialog();
}
else
{
LL_DEBUGS("AppInit") << "FirstLoginThisInstall off" << LL_ENDL;
}
}
LLStartUp::setStartupState( STATE_LOGIN_WAIT ); // Wait for user input

View File

@ -40,6 +40,7 @@
#include "lltrans.h"
#include "llnotificationsutil.h"
#include "llviewermessage.h"
#include "llavataractions.h"
// <FS:Ansariel> [FS communication UI]
//#include "llfloaterimsession.h"
#include "fsfloaterim.h"
@ -319,6 +320,7 @@ void LLToastNotifyPanel::init( LLRect rect, bool show_images )
mTextBox->setVisible(TRUE);
mTextBox->setPlainText(!show_images);
mTextBox->setValue(mNotification->getMessage());
mTextBox->setIsFriendCallback(LLAvatarActions::isFriend);
// <FS:Ansariel> Script dialog colors
if (mIsScriptDialog)

View File

@ -39,7 +39,7 @@ class LLView;
class LLPanel;
class LLTool
: public LLMouseHandler
: public LLMouseHandler, public LLThreadSafeRefCount
{
public:
LLTool( const std::string& name, LLToolComposite* composite = NULL );

View File

@ -65,7 +65,7 @@ extern LLControlGroup gSavedSettings;
// we use this in various places instead of NULL
static LLTool* sNullTool = new LLTool(std::string("null"), NULL);
static LLPointer<LLTool> sNullTool(new LLTool(std::string("null"), NULL));
//-----------------------------------------------------------------------
// LLToolComposite

View File

@ -403,7 +403,7 @@ bool LLURLDispatcher::dispatchRightClick(const std::string& slurl)
}
// static
bool LLURLDispatcher::dispatchFromTextEditor(const std::string& slurl)
bool LLURLDispatcher::dispatchFromTextEditor(const std::string& slurl, bool trusted_content)
{
// *NOTE: Text editors are considered sources of trusted URLs
// in order to make avatar profile links in chat history work.
@ -411,9 +411,9 @@ bool LLURLDispatcher::dispatchFromTextEditor(const std::string& slurl)
// receiving resident will see it and must affirmatively
// click on it.
// *TODO: Make this trust model more refined. JC
const bool trusted_browser = true;
LLMediaCtrl* web = NULL;
return LLURLDispatcherImpl::dispatch(LLSLURL(slurl), "clicked", web, trusted_browser);
return LLURLDispatcherImpl::dispatch(LLSLURL(slurl), "clicked", web, trusted_content);
}

View File

@ -53,7 +53,7 @@ public:
static bool dispatchRightClick(const std::string& slurl);
static bool dispatchFromTextEditor(const std::string& slurl);
static bool dispatchFromTextEditor(const std::string& slurl, bool trusted_content);
};
#endif

View File

@ -71,5 +71,5 @@ void LLURLDispatcherListener::dispatchRightClick(const LLSD& params) const
void LLURLDispatcherListener::dispatchFromTextEditor(const LLSD& params) const
{
LLURLDispatcher::dispatchFromTextEditor(params["url"]);
LLURLDispatcher::dispatchFromTextEditor(params["url"], false);
}

View File

@ -8701,6 +8701,17 @@ class LLAdvancedClickRenderProfile: public view_listener_t
}
};
void gpu_benchmark();
class LLAdvancedClickRenderBenchmark: public view_listener_t
{
bool handleEvent(const LLSD& userdata)
{
gpu_benchmark();
return true;
}
};
//[FIX FIRE-1927 - enable DoubleClickTeleport shortcut : SJ]
class LLAdvancedToggleDoubleClickTeleport: public view_listener_t
{
@ -9569,6 +9580,22 @@ void handle_show_url(const LLSD& param)
}
void handle_report_bug(const LLSD& param)
{
LLUIString url(param.asString());
LLStringUtil::format_map_t replace;
replace["[ENVIRONMENT]"] = LLURI::escape(LLAppViewer::instance()->getViewerInfoString());
LLSLURL location_url;
LLAgentUI::buildSLURL(location_url);
replace["[LOCATION]"] = location_url.getSLURLString();
LLUIString file_bug_url = gSavedSettings.getString("ReportBugURL");
file_bug_url.setArgs(replace);
LLWeb::loadURLExternal(file_bug_url.getString());
}
void handle_buy_currency_test(void*)
{
std::string url =
@ -10630,6 +10657,7 @@ void initialize_menus()
view_listener_t::addMenu(new LLAdvancedCheckRenderShadowOption(), "Advanced.CheckRenderShadowOption");
view_listener_t::addMenu(new LLAdvancedClickRenderShadowOption(), "Advanced.ClickRenderShadowOption");
view_listener_t::addMenu(new LLAdvancedClickRenderProfile(), "Advanced.ClickRenderProfile");
view_listener_t::addMenu(new LLAdvancedClickRenderBenchmark(), "Advanced.ClickRenderBenchmark");
//[FIX FIRE-1927 - enable DoubleClickTeleport shortcut : SJ]
view_listener_t::addMenu(new LLAdvancedToggleDoubleClickTeleport, "Advanced.ToggleDoubleClickTeleport");
@ -10647,6 +10675,7 @@ void initialize_menus()
commit.add("Advanced.WebBrowserTest", boost::bind(&handle_web_browser_test, _2)); // sigh! this one opens the MEDIA browser
commit.add("Advanced.WebContentTest", boost::bind(&handle_web_content_test, _2)); // this one opens the Web Content floater
commit.add("Advanced.ShowURL", boost::bind(&handle_show_url, _2));
commit.add("Advanced.ReportBug", boost::bind(&handle_report_bug, _2));
view_listener_t::addMenu(new LLAdvancedBuyCurrencyTest(), "Advanced.BuyCurrencyTest");
view_listener_t::addMenu(new LLAdvancedDumpSelectMgr(), "Advanced.DumpSelectMgr");
view_listener_t::addMenu(new LLAdvancedDumpInventory(), "Advanced.DumpInventory");

Some files were not shown because too many files have changed in this diff Show More