Merge LL 3.7.3 (Viewer-Bear fixes)
commit
3d1ac7c0ec
3
.hgtags
3
.hgtags
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
||||
|
|
|
|||
|
|
@ -94,6 +94,11 @@ void LLListener_FMODEX::orient(LLVector3 up, LLVector3 at)
|
|||
//-----------------------------------------------------------------------
|
||||
void LLListener_FMODEX::commitDeferredChanges()
|
||||
{
|
||||
if(!mSystem)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
mSystem->update();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@
|
|||
class LLHost;
|
||||
class LLSD;
|
||||
|
||||
class LLHTTPSender
|
||||
class LLHTTPSender : public LLThreadSafeRefCount
|
||||
{
|
||||
public:
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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&issuetype=1&environment=[ENVIRONMENT]&customfield_10253=[LOCATION]</string>
|
||||
</map>
|
||||
<key>RevokePermsOnStopAnimation</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Clear animation permssions when choosing "Stop Animating Me"</string>
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -908,7 +908,7 @@ void FSData::callbackReqInfo(const LLSD ¬ification, 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(),
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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";
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
|
|
|||
|
|
@ -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(),
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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/";
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -362,7 +362,7 @@ private:
|
|||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
static LLRegisterPanelClassWrapper<LLOutfitsList> t_outfits_list("outfits_list");
|
||||
static LLPanelInjector<LLOutfitsList> t_outfits_list("outfits_list");
|
||||
|
||||
LLOutfitsList::LLOutfitsList()
|
||||
: LLPanelAppearanceTab()
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
|
||||
|
||||
/////////////////////////
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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(),
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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";
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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),
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
|
||||
//=============================================================================
|
||||
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -244,7 +244,7 @@ private:
|
|||
};
|
||||
|
||||
|
||||
static LLRegisterPanelClassWrapper<LLPanelPlaces> t_places("panel_places");
|
||||
static LLPanelInjector<LLPanelPlaces> t_places("panel_places");
|
||||
|
||||
LLPanelPlaces::LLPanelPlaces()
|
||||
: LLPanel(),
|
||||
|
|
|
|||
|
|
@ -68,7 +68,7 @@ private:
|
|||
void onSend();
|
||||
};
|
||||
|
||||
static LLRegisterPanelClassWrapper<LLPanelSnapshotInventory> panel_class("llpanelsnapshotinventory");
|
||||
static LLPanelInjector<LLPanelSnapshotInventory> panel_class("llpanelsnapshotinventory");
|
||||
|
||||
LLPanelSnapshotInventory::LLPanelSnapshotInventory()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -67,7 +67,7 @@ private:
|
|||
void onSaveFlyoutCommit(LLUICtrl* ctrl);
|
||||
};
|
||||
|
||||
static LLRegisterPanelClassWrapper<LLPanelSnapshotLocal> panel_class("llpanelsnapshotlocal");
|
||||
static LLPanelInjector<LLPanelSnapshotLocal> panel_class("llpanelsnapshotlocal");
|
||||
|
||||
LLPanelSnapshotLocal::LLPanelSnapshotLocal()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -61,7 +61,7 @@ private:
|
|||
// </exodus>
|
||||
};
|
||||
|
||||
static LLRegisterPanelClassWrapper<LLPanelSnapshotOptions> panel_class("llpanelsnapshotoptions");
|
||||
static LLPanelInjector<LLPanelSnapshotOptions> panel_class("llpanelsnapshotoptions");
|
||||
|
||||
LLPanelSnapshotOptions::LLPanelSnapshotOptions()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -81,7 +81,7 @@ private:
|
|||
std::string mAgentEmail;
|
||||
};
|
||||
|
||||
static LLRegisterPanelClassWrapper<LLPanelSnapshotPostcard> panel_class("llpanelsnapshotpostcard");
|
||||
static LLPanelInjector<LLPanelSnapshotPostcard> panel_class("llpanelsnapshotpostcard");
|
||||
|
||||
LLPanelSnapshotPostcard::LLPanelSnapshotPostcard()
|
||||
: mHasFirstMsgFocus(false)
|
||||
|
|
|
|||
|
|
@ -66,7 +66,7 @@ private:
|
|||
void onSend();
|
||||
};
|
||||
|
||||
static LLRegisterPanelClassWrapper<LLPanelSnapshotProfile> panel_class("llpanelsnapshotprofile");
|
||||
static LLPanelInjector<LLPanelSnapshotProfile> panel_class("llpanelsnapshotprofile");
|
||||
|
||||
LLPanelSnapshotProfile::LLPanelSnapshotProfile()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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(),
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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
|
||||
{
|
||||
|
|
|
|||
|
|
@ -65,7 +65,7 @@
|
|||
#include "llviewernetwork.h"
|
||||
#endif // OPENSIM
|
||||
|
||||
static LLRegisterPanelClassWrapper<LLSidepanelInventory> t_inventory("sidepanel_inventory");
|
||||
static LLPanelInjector<LLSidepanelInventory> t_inventory("sidepanel_inventory");
|
||||
|
||||
//
|
||||
// Constants
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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 );
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
Loading…
Reference in New Issue