meow-7.2.2
Brad Payne (Vir Linden) 2012-01-04 09:59:57 -05:00
commit a3e30250e8
39 changed files with 340 additions and 151 deletions

View File

@ -229,6 +229,14 @@ c4911ec8cd81e676dfd2af438b3e065407a94a7a 3.2.1-start
a8c7030d6845186fac7c188be4323a0e887b4184 DRTVWR-99_3.2.1-release
a8c7030d6845186fac7c188be4323a0e887b4184 3.2.1-release
3fe994349fae64fc40874bb59db387131eb35a41 3.2.4-start
a9abb9633a266c8d2fe62411cfd1c86d32da72bf DRTVWR-60_2.7.1-release
fe3a8e7973072ea62043c08b19b66626c1a720eb DRTVWR-60_2.7.1-release
a9abb9633a266c8d2fe62411cfd1c86d32da72bf 2.7.1-release
fe3a8e7973072ea62043c08b19b66626c1a720eb 2.7.1-release
3fe994349fae64fc40874bb59db387131eb35a41 DRTVWR-104_3.2.4-beta1
3fe994349fae64fc40874bb59db387131eb35a41 3.2.4-beta1
8a44ff3d2104269ce76145c2772cf1bdff2a2abe 3.2.5-start
fe3a8e7973072ea62043c08b19b66626c1a720eb DRTVWR-62_2.7.2-release
fe3a8e7973072ea62043c08b19b66626c1a720eb 2.7.2-release
bd6bcde2584491fd9228f1fa51c4575f4e764e19 DRTVWR-103_3.2.4-release
bd6bcde2584491fd9228f1fa51c4575f4e764e19 3.2.4-release

View File

@ -145,6 +145,17 @@ oz_viewer-devreview.codeticket_add_context = false
oz_viewer-devreview.build_enforce_coding_policy = true
oz_viewer-devreview.email = oz@lindenlab.com
oz_viewer-trial.build_debug_release_separately = true
oz_viewer-trial.codeticket_add_context = false
oz_viewer-trial.build_enforce_coding_policy = true
oz_viewer-trial.email = oz@lindenlab.com
oz_viewer-beta-review.build_debug_release_separately = true
oz_viewer-beta-review.codeticket_add_context = false
oz_viewer-beta-review.viewer_channel = "Second Life Beta Viewer"
oz_viewer-beta-review.login_channel = "Second Life Beta Viewer"
oz_viewer-beta-review.email = oz@lindenlab.com
oz_project-1.build_debug_release_separately = true
oz_project-1.codeticket_add_context = false
oz_project-1.email = oz@lindenlab.com
@ -157,15 +168,6 @@ oz_project-3.email = oz@lindenlab.com
oz_project-4.build_debug_release_separately = true
oz_project-4.codeticket_add_context = false
oz_project-4.email = oz@lindenlab.com
oz_project-5.build_debug_release_separately = true
oz_project-5.codeticket_add_context = false
oz_project-5.email = oz@lindenlab.com
oz_viewer-beta-review.build_debug_release_separately = true
oz_viewer-beta-review.codeticket_add_context = false
oz_viewer-beta-review.viewer_channel = "Second Life Beta Viewer"
oz_viewer-beta-review.login_channel = "Second Life Beta Viewer"
oz_viewer-beta-review.email = oz@lindenlab.com
# =================================================================
# asset delivery 2010 projects

View File

@ -159,6 +159,7 @@ Alissa Sabre
VWR-12620
VWR-12789
SNOW-322
STORM-1723
Alliez Mysterio
Angus Boyd
VWR-592
@ -583,6 +584,7 @@ Jonathan Yap
STORM-976
STORM-1639
STORM-910
STORM-1653
STORM-1642
STORM-591
STORM-1105
@ -595,6 +597,12 @@ Jonathan Yap
STORM-1719
STORM-1712
STORM-1728
STORM-1736
STORM-1734
STORM-1731
STORM-653
STORM-1737
STORM-1733
Kadah Coba
STORM-1060
Jondan Lundquist

View File

@ -608,6 +608,7 @@ LLCPUInfo::LLCPUInfo()
out << " (" << mCPUMHz << " MHz)";
}
mCPUString = out.str();
LLStringUtil::trim(mCPUString);
}
bool LLCPUInfo::hasAltivec() const

View File

@ -517,7 +517,7 @@ void LLCurl::Easy::prepRequest(const std::string& url,
}
////////////////////////////////////////////////////////////////////////////
LLMutex* LLCurl::Multi::sMultiInitMutexp = NULL ;
LLCurl::Multi::Multi()
: mQueued(0),
mErrorCount(0),
@ -527,11 +527,11 @@ LLCurl::Multi::Multi()
mDeletionMutexp(NULL),
mEasyMutexp(NULL)
{
mCurlMultiHandle = curl_multi_init();
mCurlMultiHandle = initMulti();
if (!mCurlMultiHandle)
{
llwarns << "curl_multi_init() returned NULL! Easy handles: " << gCurlEasyCount << " Multi handles: " << gCurlMultiCount << llendl;
mCurlMultiHandle = curl_multi_init();
mCurlMultiHandle = initMulti();
}
llassert_always(mCurlMultiHandle);
@ -576,6 +576,13 @@ LLCurl::Multi::~Multi()
--gCurlMultiCount;
}
CURLM* LLCurl::Multi::initMulti()
{
LLMutexLock lock(sMultiInitMutexp) ;
return curl_multi_init() ;
}
void LLCurl::Multi::lock()
{
if(mMutexp)
@ -857,11 +864,17 @@ void LLCurlThread::CurlRequest::finishRequest(bool completed)
LLCurlThread::LLCurlThread(bool threaded) :
LLQueuedThread("curlthread", threaded)
{
if(!LLCurl::Multi::sMultiInitMutexp)
{
LLCurl::Multi::sMultiInitMutexp = new LLMutex(NULL) ;
}
}
//virtual
LLCurlThread::~LLCurlThread()
{
delete LLCurl::Multi::sMultiInitMutexp ;
LLCurl::Multi::sMultiInitMutexp = NULL ;
}
S32 LLCurlThread::update(F32 max_time_ms)

View File

@ -299,6 +299,7 @@ public:
S32 mQueued;
S32 mErrorCount;
static CURLM* initMulti() ;
private:
void easyFree(LLCurl::Easy*);
@ -318,6 +319,8 @@ private:
LLMutex* mMutexp ;
LLMutex* mDeletionMutexp ;
LLMutex* mEasyMutexp ;
static LLMutex* sMultiInitMutexp ;
};
class LLCurlThread : public LLQueuedThread

View File

@ -304,6 +304,18 @@ S32 LLFontGL::render(const LLWString &wstr, S32 begin_offset, F32 x, F32 y, cons
S32 next_bitmap_num = fgi->mBitmapNum;
if (next_bitmap_num != bitmap_num)
{
// Actually draw the queued glyphs before switching their texture;
// otherwise the queued glyphs will be taken from wrong textures.
if (glyph_count > 0)
{
gGL.begin(LLRender::QUADS);
{
gGL.vertexBatchPreTransformed(vertices, uvs, colors, glyph_count * 4);
}
gGL.end();
glyph_count = 0;
}
bitmap_num = next_bitmap_num;
LLImageGL *font_image = font_bitmap_cache->getImageGL(bitmap_num);
gGL.getTexUnit(0)->bind(font_image);

View File

@ -75,6 +75,7 @@
//#include "llfirstuse.h"
#include "llrender.h"
#include "llteleporthistory.h"
#include "lltoast.h"
#include "lllocationhistory.h"
#include "llfasttimerview.h"
#include "llvector4a.h"
@ -4053,6 +4054,7 @@ void LLAppViewer::idle()
LLFrameTimer::updateFrameTime();
LLFrameTimer::updateFrameCount();
LLEventTimer::updateClass();
LLNotificationsUI::LLToast::updateClass();
LLCriticalDamp::updateInterpolants();
LLMortician::updateClass();
LLFilePickerThread::clearDead(); //calls LLFilePickerThread::notify()

View File

@ -250,6 +250,12 @@ LLIMWellChiclet::LLIMWellChiclet(const Params& p)
LLIMWellChiclet::~LLIMWellChiclet()
{
LLIMWellWindow* im_well_window = LLIMWellWindow::findInstance();
if (im_well_window)
{
im_well_window->setSysWellChiclet(NULL);
}
LLIMMgr::getInstance()->removeSessionObserver(this);
}

View File

@ -328,6 +328,19 @@ BOOL LLCOFWearables::postBuild()
return LLPanel::postBuild();
}
void LLCOFWearables::setAttachmentsTitle()
{
if (mAttachmentsTab)
{
U32 free_slots = MAX_AGENT_ATTACHMENTS - mAttachments->size();
LLStringUtil::format_map_t args_attachments;
args_attachments["[COUNT]"] = llformat ("%d", free_slots);
std::string attachments_title = LLTrans::getString("Attachments remain", args_attachments);
mAttachmentsTab->setTitle(attachments_title);
}
}
void LLCOFWearables::onSelectionChange(LLFlatListView* selected_list)
{
if (!selected_list) return;
@ -490,6 +503,7 @@ void LLCOFWearables::populateAttachmentsAndBodypartsLists(const LLInventoryModel
{
mAttachments->sort();
mAttachments->notify(REARRANGE); //notifying the parent about the list's size change (cause items were added with rearrange=false)
setAttachmentsTitle();
}
else
{

View File

@ -91,6 +91,8 @@ public:
*/
void selectClothing(LLWearableType::EType clothing_type);
void setAttachmentsTitle();
protected:
void populateAttachmentsAndBodypartsLists(const LLInventoryModel::item_array_t& cof_items);

View File

@ -333,8 +333,7 @@ void LLSnapshotLivePreview::updateSnapshot(BOOL new_snapshot, BOOL new_thumbnail
{
S32 old_image_index = mCurImageIndex;
mCurImageIndex = (mCurImageIndex + 1) % 2;
setWidth(mWidth[old_image_index]);
setHeight(mHeight[old_image_index]);
setSize(mWidth[old_image_index], mHeight[old_image_index]);
mFallAnimTimer.start();
}
mSnapshotUpToDate = FALSE;
@ -833,7 +832,7 @@ BOOL LLSnapshotLivePreview::onIdle( void* snapshot_preview )
previewp->mPreviewImage->getHeight(),
previewp->mPreviewImage->getComponents());
scaled->biasedScaleToPowerOfTwo(512);
scaled->biasedScaleToPowerOfTwo(MAX_TEXTURE_SIZE);
previewp->setImageScaled(TRUE);
if (formatted->encode(scaled, 0.f))
{
@ -960,7 +959,7 @@ void LLSnapshotLivePreview::saveTexture()
mPreviewImage->getHeight(),
mPreviewImage->getComponents());
scaled->biasedScaleToPowerOfTwo(512);
scaled->biasedScaleToPowerOfTwo(MAX_TEXTURE_SIZE);
lldebugs << "scaled texture to " << scaled->getWidth() << "x" << scaled->getHeight() << llendl;
if (formatted->encode(scaled, 0.0f))
@ -1447,7 +1446,6 @@ void LLFloaterSnapshot::Impl::updateControls(LLFloaterSnapshot* floater)
if (previewp)
{
lldebugs << "Setting snapshot type (" << shot_type << "), format (" << shot_format << ")" << llendl;
previewp->setSnapshotType(shot_type);
previewp->setSnapshotFormat(shot_format);
previewp->setSnapshotBufferType(layer_type);
@ -1460,6 +1458,7 @@ void LLFloaterSnapshot::Impl::updateControls(LLFloaterSnapshot* floater)
info["have-snapshot"] = got_snap;
current_panel->updateControls(info);
}
lldebugs << "finished updating controls" << llendl;
}
// static
@ -1696,6 +1695,7 @@ void LLFloaterSnapshot::Impl::setFinished(LLFloaterSnapshot* floater, bool finis
}
}
// Apply a new resolution selected from the given combobox.
// static
void LLFloaterSnapshot::Impl::updateResolution(LLUICtrl* ctrl, void* data, BOOL do_update)
{
@ -1738,6 +1738,13 @@ void LLFloaterSnapshot::Impl::updateResolution(LLUICtrl* ctrl, void* data, BOOL
lldebugs << "Loading typed res from panel " << spanel->getName() << llendl;
new_width = spanel->getTypedPreviewWidth();
new_height = spanel->getTypedPreviewHeight();
// Limit custom size for inventory snapshots to 512x512 px.
if (getActiveSnapshotType(view) == LLSnapshotLivePreview::SNAPSHOT_TEXTURE)
{
new_width = llmin(new_width, MAX_TEXTURE_SIZE);
new_height = llmin(new_height, MAX_TEXTURE_SIZE);
}
}
else
{
@ -1864,11 +1871,11 @@ BOOL LLFloaterSnapshot::Impl::checkImageSize(LLSnapshotLivePreview* previewp, S3
//change another value proportionally
if(isWidthChanged)
{
height = (S32)(width / aspect_ratio) ;
height = llround(width / aspect_ratio) ;
}
else
{
width = (S32)(height * aspect_ratio) ;
width = llround(height * aspect_ratio) ;
}
//bound w/h by the max_value

View File

@ -2403,15 +2403,6 @@ void LLIMMgr::addMessage(
bool link_name) // If this is true, then we insert the name and link it to a profile
{
LLUUID other_participant_id = target_id;
// don't process muted IMs
if (LLMuteList::getInstance()->isMuted(
other_participant_id,
LLMute::flagTextChat) && !LLMuteList::getInstance()->isLinden(from))
{
return;
}
LLUUID new_session_id = session_id;
if (new_session_id.isNull())
{
@ -2452,10 +2443,25 @@ void LLIMMgr::addMessage(
LLIMModel::instance().addMessage(new_session_id, from, other_participant_id, bonus_info.str());
}
// Logically it would make more sense to reject the session sooner, in another area of the
// code, but the session has to be established inside the server before it can be left.
if (LLMuteList::getInstance()->isMuted(other_participant_id) && !LLMuteList::getInstance()->isLinden(from))
{
llwarns << "Leaving IM session from initiating muted resident " << from << llendl;
if(!gIMMgr->leaveSession(new_session_id))
{
llinfos << "Session " << new_session_id << " does not exist." << llendl;
}
return;
}
make_ui_sound("UISndNewIncomingIMSession");
}
LLIMModel::instance().addMessage(new_session_id, from, other_participant_id, msg);
if (!LLMuteList::getInstance()->isMuted(other_participant_id, LLMute::flagTextChat))
{
LLIMModel::instance().addMessage(new_session_id, from, other_participant_id, msg);
}
}
void LLIMMgr::addSystemMessage(const LLUUID& session_id, const std::string& message_name, const LLSD& args)
@ -2661,18 +2667,15 @@ void LLIMMgr::inviteToSession(
const std::string& session_handle,
const std::string& session_uri)
{
//ignore invites from muted residents
if (LLMuteList::getInstance()->isMuted(caller_id))
{
return;
}
std::string notify_box_type;
// voice invite question is different from default only for group call (EXT-7118)
std::string question_type = "VoiceInviteQuestionDefault";
BOOL ad_hoc_invite = FALSE;
BOOL voice_invite = FALSE;
bool is_linden = LLMuteList::getInstance()->isLinden(caller_name);
if(type == IM_SESSION_P2P_INVITE)
{
//P2P is different...they only have voice invitations
@ -2711,7 +2714,18 @@ void LLIMMgr::inviteToSession(
payload["session_uri"] = session_uri;
payload["notify_box_type"] = notify_box_type;
payload["question_type"] = question_type;
//ignore invites from muted residents
if (LLMuteList::getInstance()->isMuted(caller_id) && !is_linden)
{
if (voice_invite && "VoiceInviteQuestionDefault" == question_type)
{
llinfos << "Rejecting voice call from initiating muted resident " << caller_name << llendl;
LLIncomingCallDialog::processCallResponse(1, payload);
}
return;
}
LLVoiceChannel* channelp = LLVoiceChannel::getChannelByID(session_id);
if (channelp && channelp->callStarted())
{
@ -3234,7 +3248,7 @@ public:
chat.mFromID = from_id;
chat.mFromName = name;
if (!is_linden && (is_busy || is_muted))
if (!is_linden && is_busy)
{
return;
}
@ -3266,6 +3280,11 @@ public:
ll_vector3_from_sd(message_params["position"]),
true);
if (LLMuteList::getInstance()->isMuted(from_id, name, LLMute::flagTextChat))
{
return;
}
//K now we want to accept the invitation
std::string url = gAgent.getRegion()->getCapability(
"ChatSessionRequest");

View File

@ -356,9 +356,9 @@ LLEditWearableDictionary::ColorSwatchCtrls::ColorSwatchCtrls()
LLEditWearableDictionary::TextureCtrls::TextureCtrls()
{
addEntry ( TEX_HEAD_BODYPAINT, new PickerControlEntry (TEX_HEAD_BODYPAINT, "Head Tattoos", LLUUID::null, TRUE ));
addEntry ( TEX_UPPER_BODYPAINT, new PickerControlEntry (TEX_UPPER_BODYPAINT, "Upper Tattoos", LLUUID::null, TRUE ));
addEntry ( TEX_LOWER_BODYPAINT, new PickerControlEntry (TEX_LOWER_BODYPAINT, "Lower Tattoos", LLUUID::null, TRUE ));
addEntry ( TEX_HEAD_BODYPAINT, new PickerControlEntry (TEX_HEAD_BODYPAINT, "Head", LLUUID::null, TRUE ));
addEntry ( TEX_UPPER_BODYPAINT, new PickerControlEntry (TEX_UPPER_BODYPAINT, "Upper Body", LLUUID::null, TRUE ));
addEntry ( TEX_LOWER_BODYPAINT, new PickerControlEntry (TEX_LOWER_BODYPAINT, "Lower Body", LLUUID::null, TRUE ));
addEntry ( TEX_HAIR, new PickerControlEntry (TEX_HAIR, "Texture", LLUUID( gSavedSettings.getString( "UIImgDefaultHairUUID" ) ), FALSE ));
addEntry ( TEX_EYES_IRIS, new PickerControlEntry (TEX_EYES_IRIS, "Iris", LLUUID( gSavedSettings.getString( "UIImgDefaultEyesUUID" ) ), FALSE ));
addEntry ( TEX_UPPER_SHIRT, new PickerControlEntry (TEX_UPPER_SHIRT, "Fabric", LLUUID( gSavedSettings.getString( "UIImgDefaultShirtUUID" ) ), FALSE ));

View File

@ -408,9 +408,16 @@ void LLScriptFloaterManager::onRemoveNotification(const LLUUID& notification_id)
}
// remove related chiclet
LLChicletBar::getInstance()->getChicletPanel()->removeChiclet(notification_id);
if (LLChicletBar::instanceExists())
{
LLChicletBar::getInstance()->getChicletPanel()->removeChiclet(notification_id);
}
LLIMWellWindow::getInstance()->removeObjectRow(notification_id);
LLIMWellWindow* im_well_window = LLIMWellWindow::findInstance();
if (im_well_window)
{
im_well_window->removeObjectRow(notification_id);
}
mNotifications.erase(notification_id);

View File

@ -159,6 +159,7 @@ void LLSysWellWindow::setVisible(BOOL visible)
LLTransientDockableFloater::setVisible(visible);
// update notification channel state
initChannel(); // make sure the channel still exists
if(mChannel)
{
mChannel->updateShowToastsState();
@ -598,6 +599,13 @@ LLIMWellWindow* LLIMWellWindow::getInstance(const LLSD& key /*= LLSD()*/)
return LLFloaterReg::getTypedInstance<LLIMWellWindow>("im_well_window", key);
}
// static
LLIMWellWindow* LLIMWellWindow::findInstance(const LLSD& key /*= LLSD()*/)
{
return LLFloaterReg::findTypedInstance<LLIMWellWindow>("im_well_window", key);
}
BOOL LLIMWellWindow::postBuild()
{
BOOL rv = LLSysWellWindow::postBuild();
@ -751,7 +759,10 @@ void LLIMWellWindow::removeObjectRow(const LLUUID& notification_id)
{
if (mMessageList->removeItemByValue(notification_id))
{
mSysWellChiclet->updateWidget(isWindowEmpty());
if (mSysWellChiclet)
{
mSysWellChiclet->updateWidget(isWindowEmpty());
}
}
else
{

View File

@ -153,6 +153,7 @@ public:
~LLIMWellWindow();
static LLIMWellWindow* getInstance(const LLSD& key = LLSD());
static LLIMWellWindow* findInstance(const LLSD& key = LLSD());
static void initClass() { getInstance(); }
/*virtual*/ BOOL postBuild();

View File

@ -140,7 +140,9 @@ LLToast::LLToast(const LLToast::Params& p)
// init callbacks if present
if(!p.on_delete_toast().empty())
{
mOnDeleteToastSignal.connect(p.on_delete_toast());
}
}
void LLToast::reshape(S32 width, S32 height, BOOL called_from_parent)
@ -236,7 +238,9 @@ void LLToast::setCanFade(bool can_fade)
{
mCanFade = can_fade;
if(!mCanFade)
{
mTimer->stop();
}
}
//--------------------------------------------------------------------------
@ -328,55 +332,6 @@ void LLToast::draw()
drawChild(mHideBtn);
}
}
updateHoveredState();
LLToastLifeTimer* timer = getTimer();
if (!timer)
{
return;
}
// Started timer means the mouse had left the toast previously.
// If toast is hovered in the current frame we should handle
// a mouse enter event.
if(timer->getStarted() && mIsHovered)
{
mOnToastHoverSignal(this, MOUSE_ENTER);
updateTransparency();
//toasts fading is management by Screen Channel
sendChildToFront(mHideBtn);
if(mHideBtn && mHideBtn->getEnabled())
{
mHideBtn->setVisible(TRUE);
}
mToastMouseEnterSignal(this, getValue());
}
// Stopped timer means the mouse had entered the toast previously.
// If the toast is not hovered in the current frame we should handle
// a mouse leave event.
else if(!timer->getStarted() && !mIsHovered)
{
mOnToastHoverSignal(this, MOUSE_LEAVE);
updateTransparency();
//toasts fading is management by Screen Channel
if(mHideBtn && mHideBtn->getEnabled())
{
if( mHideBtnPressed )
{
mHideBtnPressed = false;
return;
}
mHideBtn->setVisible(FALSE);
}
mToastMouseLeaveSignal(this, getValue());
}
}
//--------------------------------------------------------------------------
@ -440,28 +395,80 @@ void LLToast::updateHoveredState()
{
// mouse is not over this toast
mIsHovered = false;
return;
}
else
{
bool is_overlapped_by_other_floater = false;
const child_list_t* child_list = gFloaterView->getChildList();
// find this toast in gFloaterView child list to check whether any floater
// with higher Z-order is visible under the mouse pointer overlapping this toast
child_list_const_reverse_iter_t r_iter = std::find(child_list->rbegin(), child_list->rend(), this);
if (r_iter != child_list->rend())
{
// skip this toast and proceed to views above in Z-order
for (++r_iter; r_iter != child_list->rend(); ++r_iter)
{
LLView* view = *r_iter;
is_overlapped_by_other_floater = view->isInVisibleChain() && view->calcScreenRect().pointInRect(x, y);
if (is_overlapped_by_other_floater)
{
break;
}
}
}
mIsHovered = !is_overlapped_by_other_floater;
}
bool is_overlapped_by_other_floater = false;
const child_list_t* child_list = gFloaterView->getChildList();
// find this toast in gFloaterView child list to check whether any floater
// with higher Z-order is visible under the mouse pointer overlapping this toast
child_list_const_reverse_iter_t r_iter = std::find(child_list->rbegin(), child_list->rend(), this);
if (r_iter != child_list->rend())
{
// skip this toast and proceed to views above in Z-order
for (++r_iter; r_iter != child_list->rend(); ++r_iter)
LLToastLifeTimer* timer = getTimer();
if (timer)
{
// Started timer means the mouse had left the toast previously.
// If toast is hovered in the current frame we should handle
// a mouse enter event.
if(timer->getStarted() && mIsHovered)
{
LLView* view = *r_iter;
is_overlapped_by_other_floater = view->isInVisibleChain() && view->calcScreenRect().pointInRect(x, y);
if (is_overlapped_by_other_floater) break;
mOnToastHoverSignal(this, MOUSE_ENTER);
updateTransparency();
//toasts fading is management by Screen Channel
sendChildToFront(mHideBtn);
if(mHideBtn && mHideBtn->getEnabled())
{
mHideBtn->setVisible(TRUE);
}
mToastMouseEnterSignal(this, getValue());
}
// Stopped timer means the mouse had entered the toast previously.
// If the toast is not hovered in the current frame we should handle
// a mouse leave event.
else if(!timer->getStarted() && !mIsHovered)
{
mOnToastHoverSignal(this, MOUSE_LEAVE);
updateTransparency();
//toasts fading is management by Screen Channel
if(mHideBtn && mHideBtn->getEnabled())
{
if( mHideBtnPressed )
{
mHideBtnPressed = false;
return;
}
mHideBtn->setVisible(FALSE);
}
mToastMouseLeaveSignal(this, getValue());
}
}
mIsHovered = !is_overlapped_by_other_floater;
}
void LLToast::setBackgroundOpaque(BOOL b)
@ -553,3 +560,14 @@ S32 LLToast::notifyParent(const LLSD& info)
return LLModalDialog::notifyParent(info);
}
//static
void LLToast::updateClass()
{
for (LLInstanceTracker<LLToast>::instance_iter iter = LLInstanceTracker<LLToast>::beginInstances(); iter != LLInstanceTracker<LLToast>::endInstances(); )
{
LLToast& toast = *iter++;
toast.updateHoveredState();
}
}

View File

@ -27,7 +27,7 @@
#ifndef LL_LLTOAST_H
#define LL_LLTOAST_H
#include "llinstancetracker.h"
#include "llpanel.h"
#include "llmodaldialog.h"
#include "lleventtimer.h"
@ -69,7 +69,7 @@ private :
* Represents toast pop-up.
* This is a parent view for all toast panels.
*/
class LLToast : public LLModalDialog
class LLToast : public LLModalDialog, public LLInstanceTracker<LLToast>
{
friend class LLToastLifeTimer;
public:
@ -102,6 +102,8 @@ public:
Params();
};
static void updateClass();
LLToast(const LLToast::Params& p);
virtual ~LLToast();
@ -221,7 +223,7 @@ private:
F32 mToastLifetime; // in seconds
F32 mToastFadingTime; // in seconds
LLPanel* mPanel;
LLButton* mHideBtn;

View File

@ -2235,6 +2235,10 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
{
name = LLTrans::getString("Unnamed");
}
// Preserve the unaltered name for use in group notice mute checking.
std::string original_name = name;
// IDEVO convert new-style "Resident" names for display
name = clean_name_from_im(name, dialog);
@ -2441,6 +2445,26 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
break;
}
// The group notice packet does not have an AgentID. Obtain one from the name cache.
// If last name is "Resident" strip it out so the cache name lookup works.
U32 index = original_name.find(" Resident");
if (index != std::string::npos)
{
original_name = original_name.substr(0, index);
}
std::string legacy_name = gCacheName->buildLegacyName(original_name);
LLUUID agent_id;
gCacheName->getUUID(legacy_name, agent_id);
if (agent_id.isNull())
{
LL_WARNS("Messaging") << "buildLegacyName returned null while processing " << original_name << LL_ENDL;
}
else if (LLMuteList::getInstance()->isMuted(agent_id))
{
break;
}
notice_bin_bucket = (struct notice_bucket_full_t*) &binary_bucket[0];
U8 has_inventory = notice_bin_bucket->header.has_inventory;
U8 asset_type = notice_bin_bucket->header.asset_type;
@ -5206,6 +5230,7 @@ static void process_money_balance_reply_extended(LLMessageSystem* msg)
BOOL is_dest_group = FALSE;
S32 amount = 0;
std::string item_description;
BOOL success = FALSE;
msg->getS32("TransactionInfo", "TransactionType", transaction_type);
msg->getUUID("TransactionInfo", "SourceID", source_id);
@ -5214,6 +5239,7 @@ static void process_money_balance_reply_extended(LLMessageSystem* msg)
msg->getBOOL("TransactionInfo", "IsDestGroup", is_dest_group);
msg->getS32("TransactionInfo", "Amount", amount);
msg->getString("TransactionInfo", "ItemDescription", item_description);
msg->getBOOL("MoneyData", "TransactionSuccess", success);
LL_INFOS("Money") << "MoneyBalanceReply source " << source_id
<< " dest " << dest_id
<< " type " << transaction_type
@ -5275,28 +5301,32 @@ static void process_money_balance_reply_extended(LLMessageSystem* msg)
{
if (dest_id.notNull())
{
message = LLTrans::getString("you_paid_ldollars", args);
message = success ? LLTrans::getString("you_paid_ldollars", args) :
LLTrans::getString("you_paid_failure_ldollars", args);
}
else
{
// transaction fee to the system, eg, to create a group
message = LLTrans::getString("you_paid_ldollars_no_name", args);
message = success ? LLTrans::getString("you_paid_ldollars_no_name", args) :
LLTrans::getString("you_paid_failure_ldollars_no_name", args);
}
}
else
{
if (dest_id.notNull())
{
message = LLTrans::getString("you_paid_ldollars_no_reason", args);
message = success ? LLTrans::getString("you_paid_ldollars_no_reason", args) :
LLTrans::getString("you_paid_failure_ldollars_no_reason", args);
}
else
{
// no target, no reason, you just paid money
message = LLTrans::getString("you_paid_ldollars_no_info", args);
message = success ? LLTrans::getString("you_paid_ldollars_no_info", args) :
LLTrans::getString("you_paid_failure_ldollars_no_info", args);
}
}
final_args["MESSAGE"] = message;
notification = "PaymentSent";
notification = success ? "PaymentSent" : "PaymentFailure";
}
else {
// ...someone paid you

View File

@ -121,6 +121,7 @@
<menu_item_call label="Model..." name="Upload Model"/>
<menu_item_call label="Model Wizard..." name="Upload Model Wizard"/>
<menu_item_call label="Mange (L$[COST] pr. fil)..." name="Bulk Upload"/>
<menu_item_call label="Sæt standardværdier for upload rettigheder" name="perm prefs"/>
</menu>
<menu_item_call label="Fortyd" name="Undo"/>
<menu_item_call label="Gendan" name="Redo"/>

View File

@ -140,6 +140,7 @@
<menu_item_call label="Animation ([COST] L$)..." name="Upload Animation"/>
<menu_item_call label="Modell..." name="Upload Model"/>
<menu_item_call label="Mehrfach-Upload ([COST] L$ pro Datei)..." name="Bulk Upload"/>
<menu_item_call label="Hochlade-Berechtigungen (Standard) festlegen" name="perm prefs"/>
</menu>
<menu_item_call label="Rückgängig" name="Undo"/>
<menu_item_call label="Wiederholen" name="Redo"/>

View File

@ -3,7 +3,7 @@
legacy_header_height="18"
background_visible="true"
default_tab_group="1"
height="350"
height="355"
help_topic="floater_im_box"
layout="topleft"
name="panel_im"

View File

@ -1713,7 +1713,17 @@
function="ToggleControl"
parameter="MouseSmooth" />
</menu_item_check>
<menu_item_call
enabled="false"
label="Release Keys"
name="Release Keys">
<menu_item_call.on_click
function="Tools.ReleaseKeys"
parameter="" />
<menu_item_call.on_enable
function="Tools.EnableReleaseKeys"
parameter="" />
</menu_item_call>
<menu_item_separator/>
<menu
@ -1743,17 +1753,7 @@
function="Floater.Toggle"
parameter="search" />
</menu_item_check>
<menu_item_call
enabled="false"
label="Release Keys"
name="Release Keys">
<menu_item_call.on_click
function="Tools.ReleaseKeys"
parameter="" />
<menu_item_call.on_enable
function="Tools.EnableReleaseKeys"
parameter="" />
</menu_item_call>
<!-- This second, alternative shortcut for Show Advanced Menu is for backward compatibility. The main shortcut has been changed so it's Linux-friendly, where the old shortcut is typically eaten by the window manager. -->
<menu_item_check
label="Show Advanced Menu - legacy shortcut"

View File

@ -5516,6 +5516,15 @@ Please select at least one type of content to search (General, Moderate, or Adul
[MESSAGE]
</notification>
<notification
icon="notify.tga"
name="PaymentFailure"
persist="true"
type="notify">
<tag>funds</tag>
[MESSAGE]
</notification>
<!-- EventNotification couldn't be persist since server decide is it necessary to notify
user about subscribed event via LLEventNotifier-->
<notification

View File

@ -58,7 +58,7 @@
label="Call"
name="call_btn"
width="130"
top="5" />
top="0" />
</layout_panel>
<layout_panel
auto_resize="false"
@ -75,7 +75,7 @@
height="20"
label="Leave Call"
name="end_call_btn"
top="5"/>
top="0"/>
</layout_panel>
<layout_panel
auto_resize="false"
@ -92,7 +92,7 @@
height="20"
label="Voice Controls"
name="voice_ctrls_btn"
top="5"
top="0"
use_ellipses="true" />
</layout_panel>
</layout_stack>

View File

@ -37,6 +37,7 @@
top="0"
width="311" />
</accordion_tab>
<!-- The Attachments title is overwritten by the definition of "Attachments remain" in strings.xml -->
<accordion_tab
layout="topleft"
name="tab_attachments"

View File

@ -27,10 +27,10 @@
default_image_name="Default"
follows="left|top"
height="80"
label="Head Tattoos"
label="Head"
layout="topleft"
left="25"
name="Head Tattoos"
name="Head"
tool_tip="Click to choose a picture"
top="10"
width="74" >
@ -43,10 +43,10 @@
default_image_name="Default"
follows="left|top"
height="80"
label="Upper Tattoos"
label="Upper body"
layout="topleft"
left_pad="20"
name="Upper Tattoos"
name="Upper Body"
tool_tip="Click to choose a picture"
top="10"
width="74" >
@ -59,10 +59,10 @@
default_image_name="Default"
follows="left|top"
height="80"
label="Lower Tattoos"
label="Lower body"
layout="topleft"
left_pad="20"
name="Lower Tattoos"
name="Lower Body"
tool_tip="Click to choose a picture"
top="10"
width="74" >

View File

@ -2133,6 +2133,7 @@ Returns a string with the requested data about the region
<string name="InvFolder All">All</string>
<string name="no_attachments">No attachments worn</string>
<string name="Attachments remain">Attachments ([COUNT] slots remain)</string>
<!-- inventory FVBridge -->
<!-- This is used in llpanelinventory.cpp when constructing a context menu for an item for Sale -->
@ -3358,6 +3359,10 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
<string name="you_paid_ldollars_no_info">You paid L$[AMOUNT].</string>
<string name="you_paid_ldollars_no_reason">You paid [NAME] L$[AMOUNT].</string>
<string name="you_paid_ldollars_no_name">You paid L$[AMOUNT] [REASON].</string>
<string name="you_paid_failure_ldollars">You failed to pay [NAME] L$[AMOUNT] [REASON].</string>
<string name="you_paid_failure_ldollars_no_info">You failed to pay L$[AMOUNT].</string>
<string name="you_paid_failure_ldollars_no_reason">You failed to pay [NAME] L$[AMOUNT].</string>
<string name="you_paid_failure_ldollars_no_name">You failed to pay L$[AMOUNT] [REASON].</string>
<string name="for item">for [ITEM]</string>
<string name="for a parcel of land">for a parcel of land</string>
<string name="for a land access pass">for a land access pass</string>

View File

@ -160,7 +160,7 @@ para cubrir esta parcela.
Podrá o no unirse o dividirse.
</text>
<text name="covenant_text">
Debes aceptar el Contrato del Estado:
Debes aceptar el Contrato del estado:
</text>
<text left="470" name="covenant_timestamp_text"/>
<text_editor name="covenant_editor">

View File

@ -140,6 +140,7 @@
<menu_item_call label="Animación ([COST] L$)..." name="Upload Animation"/>
<menu_item_call label="Modelo..." name="Upload Model"/>
<menu_item_call label="Masivo ([COST] L$ por archivo)..." name="Bulk Upload"/>
<menu_item_call label="Configurar los permisos por defecto de subida" name="perm prefs"/>
</menu>
<menu_item_call label="Deshacer" name="Undo"/>
<menu_item_call label="Rehacer" name="Redo"/>

View File

@ -10,7 +10,7 @@
(desconocido)
</text>
<text name="owner_text">
Propietario del Estado:
Propietario del estado:
</text>
<text name="estate_owner">
(desconocido)
@ -39,7 +39,7 @@
</string>
<button label="?" name="abuse_email_address_help"/>
<button label="Aplicar" name="apply_btn"/>
<button label="Expulsar a un Residente del Estado..." name="kick_user_from_estate_btn"/>
<button label="Expulsar a un Residente del estado..." name="kick_user_from_estate_btn"/>
<button label="Enviar un mensaje al estado..." name="message_estate_btn"/>
<text name="estate_manager_label">
Administradores del estado:

View File

@ -140,6 +140,7 @@
<menu_item_call label="Animation ([COST] L$)..." name="Upload Animation"/>
<menu_item_call label="Modèle..." name="Upload Model"/>
<menu_item_call label="Lot ([COST] L$ par fichier)..." name="Bulk Upload"/>
<menu_item_call label="Définir les droits de chargement par défaut" name="perm prefs"/>
</menu>
<menu_item_call label="Annuler" name="Undo"/>
<menu_item_call label="Refaire" name="Redo"/>

View File

@ -140,6 +140,7 @@
<menu_item_call label="Animazione ([COST] L$)..." name="Upload Animation"/>
<menu_item_call label="Modella..." name="Upload Model"/>
<menu_item_call label="In blocco ([COST] L$ per file)..." name="Bulk Upload"/>
<menu_item_call label="Definisci diritti di caricamento predefiniti" name="perm prefs"/>
</menu>
<menu_item_call label="Annulla" name="Undo"/>
<menu_item_call label="Ripeti" name="Redo"/>

View File

@ -140,6 +140,7 @@
<menu_item_call label="アニメーションL$[COST]..." name="Upload Animation"/>
<menu_item_call label="モデル" name="Upload Model"/>
<menu_item_call label="一括 ファイルにつきL$[COST]..." name="Bulk Upload"/>
<menu_item_call label="デフォルトのアップロード権限を設定" name="perm prefs"/>
</menu>
<menu_item_call label="元に戻す" name="Undo"/>
<menu_item_call label="やり直し" name="Redo"/>

View File

@ -119,6 +119,7 @@
<menu_item_call label="dźwięk (L$[COST])..." name="Upload Sound"/>
<menu_item_call label="animację (L$[COST])..." name="Upload Animation"/>
<menu_item_call label="zbiór plików (L$[COST] za jeden plik)..." name="Bulk Upload"/>
<menu_item_call label="Ustaw domyślne pozwolenia ładowania" name="perm prefs"/>
</menu>
<menu_item_call label="Cofnij" name="Undo"/>
<menu_item_call label="Ponów" name="Redo"/>

View File

@ -5,10 +5,10 @@
-->
<floater name="inspect_avatar">
<string name="Subtitle">
[IDADE]
[AGE]
</string>
<string name="Details">
[PERFIL_SL]
[SL_PROFILE]
</string>
<text name="user_details">
This is my second life description and I really think it is great. But for some reason my description is super extra long because I like to talk a whole lot

View File

@ -96,7 +96,7 @@
</menu>
<menu_item_call label="Link" name="Link"/>
<menu_item_call label="Desconectar links" name="Unlink"/>
<menu_item_check label="Edit Linked Parts" name="Edit Linked Parts"/>
<menu_item_check label="Editar partes linkadas" name="Edit Linked Parts"/>
<menu label="Selecionar partes conectadas" name="Select Linked Parts">
<menu_item_call label="Selecionar próxima parte" name="Select Next Part"/>
<menu_item_call label="Selecionar parte anterior" name="Select Previous Part"/>
@ -110,7 +110,7 @@
<menu_item_call label="Pegar" name="Menu Object Take"/>
<menu_item_call label="Pegar uma cópia" name="Take Copy"/>
<menu_item_call label="Salvar no meu inventário" name="Save Object Back to My Inventory"/>
<menu_item_call label="Save Back to Object Contents" name="Save Object Back to Object Contents"/>
<menu_item_call label="Salvar objeto de volta aos conteúdos do objeto" name="Save Object Back to Object Contents"/>
<menu_item_call label="Devolver objeto" name="Return Object back to Owner"/>
</menu>
<menu label="Scripts" name="Scripts">
@ -140,6 +140,7 @@
<menu_item_call label="Animação (L$[COST])..." name="Upload Animation"/>
<menu_item_call label="Modelar..." name="Upload Model"/>
<menu_item_call label="Volume (L$[COST] por arquivo)..." name="Bulk Upload"/>
<menu_item_call label="Autorizações de upload padrão" name="perm prefs"/>
</menu>
<menu_item_call label="Desfazer" name="Undo"/>
<menu_item_call label="Repetir" name="Redo"/>
@ -165,7 +166,7 @@
</menu>
<menu label="Realces e visibilidade" name="Highlighting and Visibility">
<menu_item_check label="Efeito baliza piscando" name="Cheesy Beacon"/>
<menu_item_check label="Hide Particles" name="Hide Particles"/>
<menu_item_check label="Esconder partículas" name="Hide Particles"/>
<menu_item_check label="Ocultar seleções" name="Hide Selected"/>
<menu_item_check label="Realçar transparentes" name="Highlight Transparent"/>
<menu_item_check label="Mostrar anexos HUD" name="Show HUD Attachments"/>
@ -183,7 +184,7 @@
<menu_item_check label="Volume" name="Volume"/>
<menu_item_check label="Grama" name="Grass"/>
<menu_item_check label="Nuvens" name="Clouds"/>
<menu_item_check label="Particles" name="Particles"/>
<menu_item_check label="Partículas" name="Particles"/>
<menu_item_check label="Elevação" name="Bump"/>
</menu>
<menu label="Recursos de renderização" name="Rendering Features">

View File

@ -3886,16 +3886,16 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
[NAME] lhe pagou L$ [AMOUNT]
</string>
<string name="you_paid_ldollars">
You pagou L$[AMOUNT] por [REASON] a [NAME].
Você pagou L$[AMOUNT] por [REASON] a [NAME].
</string>
<string name="you_paid_ldollars_no_info">
Você acaba de pagar L$[AMOUNT].
</string>
<string name="you_paid_ldollars_no_reason">
You pagou L$[AMOUNT] a [NAME].
Você pagou L$[AMOUNT] a [NAME].
</string>
<string name="you_paid_ldollars_no_name">
You pagou L$[AMOUNT] por [REASON].
Você pagou L$[AMOUNT] por [REASON].
</string>
<string name="for item">
por [ITEM]