From d44d6515d8419366f53d72264125f56c8a73c2d4 Mon Sep 17 00:00:00 2001 From: Inusaito Sayori Date: Fri, 30 Jan 2015 18:17:06 -0500 Subject: [PATCH 01/28] [Voice Update] Use newest SLVoice~ --- install.xml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/install.xml b/install.xml index 51fea7e69..e19eb5923 100644 --- a/install.xml +++ b/install.xml @@ -1388,9 +1388,9 @@ darwin md5sum - 8eb5462ea9d469bce4b0d22bd8f0c33b + 68a8fab5ad3a180487598d3a3e0d57b1 url - https://bitbucket.org/SingularityViewer/libraries/downloads/slvoice-4.6.0009.20030-darwin-20140312-rpk.tar.bz2 + http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/slvoice_3p-update-slvoice/rev/298329/arch/Darwin/installer/slvoice-4.6.0017.21209.298329-darwin-298329.tar.bz2 linux @@ -1409,16 +1409,16 @@ windows md5sum - 4a6b9cf0f1e2767240de21af3338ffd7 + 399afab7047e6fa62e7b2fb1768059ea url - https://bitbucket.org/SingularityViewer/libraries/downloads/slvoice-4.6.0009.20030-windows-20140312-rpk.tar.bz2 + http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/slvoice_3p-update-slvoice/rev/298329/arch/CYGWIN/installer/slvoice-4.6.0017.21209.298329-windows-298329.tar.bz2 windows64 md5sum - 4a6b9cf0f1e2767240de21af3338ffd7 + 399afab7047e6fa62e7b2fb1768059ea url - https://bitbucket.org/SingularityViewer/libraries/downloads/slvoice-4.6.0009.20030-windows-20140312-rpk.tar.bz2 + http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/slvoice_3p-update-slvoice/rev/298329/arch/CYGWIN/installer/slvoice-4.6.0017.21209.298329-windows-298329.tar.bz2 From 43e1aa9c01257ed8a1997d8445fecaede29ca996 Mon Sep 17 00:00:00 2001 From: Inusaito Sayori Date: Sat, 31 Jan 2015 06:47:24 -0500 Subject: [PATCH 02/28] Apply Aleric's fix for Issue 1810: Import of XML shape data from Avastar --- indra/newview/llfloatercustomize.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/indra/newview/llfloatercustomize.cpp b/indra/newview/llfloatercustomize.cpp index 026dfeb40..061a2bb8d 100644 --- a/indra/newview/llfloatercustomize.cpp +++ b/indra/newview/llfloatercustomize.cpp @@ -346,13 +346,12 @@ void LLFloaterCustomize::onBtnImport_continued(AIFilePicker* filepicker) // (root) //------------------------------------------------------------------------- std::string metaversion; - U32 metaversion_major; + U32 metaversion_major = 0; // No metaversion AIXMLParser linden_genepool(filename, "wearable import file", "linden_genepool", 1); linden_genepool.attribute("version", "1.0"); - linden_genepool.attribute("metaversion", metaversion); - if (!LLStringUtil::convertToU32(metaversion, metaversion_major) || metaversion_major > 1) + if (linden_genepool.attribute("metaversion", metaversion) && (!LLStringUtil::convertToU32(metaversion, metaversion_major) || metaversion_major > 1)) { THROW_MALERT("AIXMLImportRootVersionError", args("[TAG]", "metaversion")("[VERSIONMAJOR]", "1")); } From 4b7bc9929129db32a9d3fa1ffc7d761a26e263b6 Mon Sep 17 00:00:00 2001 From: Inusaito Sayori Date: Mon, 2 Feb 2015 15:44:06 -0500 Subject: [PATCH 03/28] Cleanup LLNotify Adds support for SUPPRESS_TOAST in payload to skip display of notices and just spew them to chat. (this was requested to be hooked up around last release, I think) Fixes Singularity->Close All Dialogs breaking notifications such that the skip button would appear when not needed. Cleans up a buncha dead code and silliness. Also Cleanup LLGroupNotify because why not? --- indra/newview/llgroupnotify.cpp | 139 +++++-------- indra/newview/llgroupnotify.h | 22 +- indra/newview/llnotify.cpp | 348 ++++++++++++-------------------- indra/newview/llnotify.h | 57 ++---- indra/newview/llviewermenu.cpp | 14 +- 5 files changed, 194 insertions(+), 386 deletions(-) diff --git a/indra/newview/llgroupnotify.cpp b/indra/newview/llgroupnotify.cpp index c432ca547..44b9533a6 100644 --- a/indra/newview/llgroupnotify.cpp +++ b/indra/newview/llgroupnotify.cpp @@ -53,11 +53,9 @@ #include "llglheaders.h" #include "llagent.h" // Globals -//LLView* gGroupNotifyBoxView = NULL; - const F32 ANIMATION_TIME = 0.333f; -S32 LLGroupNotifyBox::sGroupNotifyBoxCount = 0; +static S32 sGroupNotifyBoxCount = 0; //--------------------------------------------------------------------------- @@ -90,7 +88,7 @@ LLGroupNotifyBox::LLGroupNotifyBox(const std::string& subject, const std::string& inventory_name, const LLSD& inventory_offer) : LLPanel("groupnotify", LLGroupNotifyBox::getGroupNotifyRect(), BORDER_YES), - mAnimating(TRUE), + mAnimating(true), mTimer(), mGroupID(group_id), mHasInventory(has_inventory), @@ -123,9 +121,6 @@ LLGroupNotifyBox::LLGroupNotifyBox(const std::string& subject, setBackgroundOpaque(TRUE); setBackgroundColor( gColors.getColor("GroupNotifyBoxColor") ); - LLIconCtrl* icon; - LLTextEditor* text; - S32 y = TOP; S32 x = HPAD + HPAD; @@ -159,18 +154,9 @@ LLGroupNotifyBox::LLGroupNotifyBox(const std::string& subject, x = HPAD + HPAD; // TODO: change this to be the group icon. - if (!group_insignia.isNull()) - { - icon = new LLIconCtrl(std::string("icon"), - LLRect(x, y, x+ICON_WIDTH, y-ICON_WIDTH), - group_insignia.asString()); - } - else - { - icon = new LLIconCtrl(std::string("icon"), - LLRect(x, y, x+ICON_WIDTH, y-ICON_WIDTH), - std::string("notify_box_icon.tga")); - } + LLIconCtrl* icon = new LLIconCtrl(std::string("icon"), + LLRect(x, y, x+ICON_WIDTH, y-ICON_WIDTH), + group_insignia.isNull() ? "notify_box_icon.tga" : group_insignia.asString()); icon->setMouseOpaque(FALSE); addChild(icon); @@ -179,7 +165,7 @@ LLGroupNotifyBox::LLGroupNotifyBox(const std::string& subject, // If we have inventory with this message, leave room for the name. S32 box_bottom = BTN_TOP + (mHasInventory ? (LINE_HEIGHT + 2*VPAD) : 0); - text = new LLViewerTextEditor(std::string("box"), + LLTextEditor* text = new LLViewerTextEditor(std::string("box"), LLRect(x, y, RIGHT, box_bottom), DB_GROUP_NOTICE_MSG_STR_LEN, LLStringUtil::null, @@ -217,45 +203,42 @@ LLGroupNotifyBox::LLGroupNotifyBox(const std::string& subject, if (mHasInventory) { - addChild(new NoticeText(std::string("subjecttitle"),LLRect(x,y,x + LABEL_WIDTH,y - LINE_HEIGHT),LLTrans::getString("GroupNotifyAttached"),LLFontGL::getFontSansSerif())); + addChild(new NoticeText(std::string("subjecttitle"),LLRect(x,y,x + LABEL_WIDTH,y - LINE_HEIGHT),LLTrans::getString("GroupNotifyAttached"),LLFontGL::getFontSansSerif())); - LLUIImagePtr item_icon = LLInventoryIcon::getIcon(mInventoryOffer->mType, - LLInventoryType::IT_TEXTURE, - 0, FALSE); + LLUIImagePtr item_icon = LLInventoryIcon::getIcon(mInventoryOffer->mType, + LLInventoryType::IT_TEXTURE, + 0, FALSE); + x += LABEL_WIDTH + HPAD; - x += LABEL_WIDTH + HPAD; + std::stringstream ss; + ss << " " << inventory_name; + LLTextBox *line = new LLTextBox(std::string("object_name"),LLRect(x,y,RIGHT - HPAD,y - LINE_HEIGHT),ss.str(),LLFontGL::getFontSansSerif()); + line->setEnabled(FALSE); + line->setBorderVisible(TRUE); + line->setDisabledColor(LLColor4::blue4); + line->setFontStyle(LLFontGL::NORMAL); + line->setBackgroundVisible(true); + line->setBackgroundColor( semi_transparent ); + addChild(line); - std::stringstream ss; - ss << " " << inventory_name; - LLTextBox *line = new LLTextBox(std::string("object_name"),LLRect(x,y,RIGHT - HPAD,y - LINE_HEIGHT),ss.str(),LLFontGL::getFontSansSerif()); - line->setEnabled(FALSE); - line->setBorderVisible(TRUE); - line->setDisabledColor(LLColor4::blue4); - line->setFontStyle(LLFontGL::NORMAL); - line->setBackgroundVisible(true); - line->setBackgroundColor( semi_transparent ); - addChild(line); - - icon = new LLIconCtrl(std::string("icon"), - LLRect(x, y, x+16, y-16), - item_icon->getName()); - icon->setMouseOpaque(FALSE); - addChild(icon); + icon = new LLIconCtrl(std::string("icon"), + LLRect(x, y, x+16, y-16), + item_icon->getName()); + icon->setMouseOpaque(FALSE); + addChild(icon); } - LLButton* btn; - btn = new LLButton(LLTrans::getString("next"), + mNextBtn = new LLButton(LLTrans::getString("next"), LLRect(getRect().getWidth()-26, BOTTOM_PAD + 20, getRect().getWidth()-2, BOTTOM_PAD), std::string("notify_next.png"), std::string("notify_next.png"), LLStringUtil::null, - boost::bind(&LLGroupNotifyBox::onClickNext, this), + boost::bind(&LLGroupNotifyBox::moveToBack, this), LLFontGL::getFontSansSerif()); - btn->setToolTip(LLTrans::getString("next")); - btn->setScaleImage(TRUE); - addChild(btn); - mNextBtn = btn; + mNextBtn->setToolTip(LLTrans::getString("next")); + mNextBtn->setScaleImage(TRUE); + addChild(mNextBtn); S32 btn_width = 80; S32 wide_btn_width = 136; @@ -267,13 +250,12 @@ LLGroupNotifyBox::LLGroupNotifyBox(const std::string& subject, btn_width, BTN_HEIGHT); - btn = new LLButton(LLTrans::getString("ok"), btn_rect, LLStringUtil::null, boost::bind(&LLGroupNotifyBox::onClickOk,this)); + LLButton* btn = new LLButton(LLTrans::getString("ok"), btn_rect, LLStringUtil::null, boost::bind(&LLGroupNotifyBox::close, this)); addChild(btn, -1); setDefaultBtn(btn); x += btn_width + HPAD; - btn_rect.setOriginAndSize(x, BOTTOM_PAD, wide_btn_width, @@ -292,27 +274,14 @@ LLGroupNotifyBox::LLGroupNotifyBox(const std::string& subject, wide_btn_width, BTN_HEIGHT); - std::string btn_lbl(""); - if(is_openable(mInventoryOffer->mType)) - { - btn_lbl = LLTrans::getString("GroupNotifyOpenAttachment"); - } - else - { - btn_lbl = LLTrans::getString("GroupNotifySaveAttachment"); - } - mSaveInventoryBtn = new LLButton(btn_lbl, btn_rect, LLStringUtil::null, boost::bind(&LLGroupNotifyBox::onClickSaveInventory,this)); + mSaveInventoryBtn = new LLButton(LLTrans::getString(is_openable(mInventoryOffer->mType) ? "GroupNotifyOpenAttachment" : "GroupNotifySaveAttachment"), btn_rect, LLStringUtil::null, boost::bind(&LLGroupNotifyBox::onClickSaveInventory,this)); mSaveInventoryBtn->setVisible(mHasInventory); addChild(mSaveInventoryBtn); } - sGroupNotifyBoxCount++; - // If this is the only notify box, don't show the next button - if (sGroupNotifyBoxCount == 1) - { - mNextBtn->setVisible(FALSE); - } + if (++sGroupNotifyBoxCount == 1) + mNextBtn->setVisible(false); } @@ -352,7 +321,7 @@ void LLGroupNotifyBox::draw() } else { - mAnimating = FALSE; + mAnimating = false; LLPanel::draw(); } } @@ -363,11 +332,11 @@ void LLGroupNotifyBox::close() // The group notice dialog may be an inventory offer. // If it has an inventory save button and that button is still enabled // Then we need to send the inventory declined message - if(mHasInventory) + if (mHasInventory) { mInventoryOffer->forceResponse(IOR_DECLINE); mInventoryOffer = NULL; - mHasInventory = FALSE; + mHasInventory = false; } gNotifyBoxView->removeChild(this); @@ -384,9 +353,7 @@ void LLGroupNotifyBox::initClass() //static bool LLGroupNotifyBox::onNewNotification(const LLSD& notify) { - LLNotificationPtr notification = LLNotifications::instance().find(notify["id"].asUUID()); - - if (notification) + if (LLNotificationPtr notification = LLNotifications::instance().find(notify["id"].asUUID())) { const LLSD& payload = notification->getPayload(); // Get the group data @@ -397,8 +364,7 @@ bool LLGroupNotifyBox::onNewNotification(const LLSD& notify) return false; } - LLGroupNotifyBox* self; - self = new LLGroupNotifyBox(payload["subject"].asString(), + gNotifyBoxView->addChild(new LLGroupNotifyBox(payload["subject"].asString(), payload["message"].asString(), payload["sender_name"].asString(), payload["group_id"].asUUID(), @@ -407,8 +373,7 @@ bool LLGroupNotifyBox::onNewNotification(const LLSD& notify) notification->getDate(), payload["inventory_offer"].isDefined(), payload["inventory_name"].asString(), - payload["inventory_offer"]); - gNotifyBoxView->addChild(self); + payload["inventory_offer"])); } return false; } @@ -424,14 +389,12 @@ void LLGroupNotifyBox::moveToBack() if (sGroupNotifyBoxCount > 1) { LLView* view = gNotifyBoxView->getFirstChild(); - - if(view && "groupnotify" == view->getName()) + if (view && "groupnotify" == view->getName()) { - LLGroupNotifyBox* front = (LLGroupNotifyBox*)view; - - if(front->mNextBtn) + LLGroupNotifyBox* front = static_cast(view); + if (front->mNextBtn) { - front->mNextBtn->setVisible(TRUE); + front->mNextBtn->setVisible(true); } } } @@ -452,23 +415,13 @@ LLRect LLGroupNotifyBox::getGroupNotifyRect() } -void LLGroupNotifyBox::onClickOk() -{ - close(); -} - void LLGroupNotifyBox::onClickSaveInventory() { mInventoryOffer->forceResponse(IOR_ACCEPT); mInventoryOffer = NULL; - mHasInventory = FALSE; + mHasInventory = false; // Each item can only be received once, so disable the button. mSaveInventoryBtn->setEnabled(FALSE); } - -void LLGroupNotifyBox::onClickNext() -{ - moveToBack(); -} diff --git a/indra/newview/llgroupnotify.h b/indra/newview/llgroupnotify.h index bd19ccd89..29d2454bf 100644 --- a/indra/newview/llgroupnotify.h +++ b/indra/newview/llgroupnotify.h @@ -52,7 +52,6 @@ public: void close(); static void initClass(); - static void destroyClass(); static bool onNewNotification(const LLSD& notification); protected: @@ -72,11 +71,6 @@ protected: /*virtual*/ ~LLGroupNotifyBox(); -// JC - removed support for clicking in background to dismiss -// the dialogs. -// /*virtual*/ BOOL handleMouseDown(S32 x, S32 y, MASK mask); -// /*virtual*/ BOOL handleDoubleClick(S32 x, S32 y, MASK mask); -// /*virtual*/ BOOL handleMouseUp(S32 x, S32 y, MASK mask); /*virtual*/ BOOL handleRightMouseDown(S32 x, S32 y, MASK mask); // Animate as sliding onto the screen. @@ -89,15 +83,11 @@ protected: static LLRect getGroupNotifyRect(); // internal handler for button being clicked - void onClickOk(); void onClickSaveInventory(); - // for "next" button - void onClickNext(); - private: // Are we sliding onscreen? - BOOL mAnimating; + bool mAnimating; // Time since this notification was displayed. // This is an LLTimer not a frame timer because I am concerned @@ -107,17 +97,9 @@ private: LLButton* mNextBtn; LLButton* mSaveInventoryBtn; - static S32 sGroupNotifyBoxCount; - LLUUID mGroupID; - BOOL mHasInventory; + bool mHasInventory; LLOfferInfo* mInventoryOffer; }; -// This view contains the stack of notification windows. -//extern LLView* gGroupNotifyBoxView; - -const S32 GROUP_LAYOUT_DEFAULT = 0; -const S32 GROUP_LAYOUT_SCRIPT_DIALOG = 1; - #endif diff --git a/indra/newview/llnotify.cpp b/indra/newview/llnotify.cpp index 4f6cca008..f84efeaa3 100644 --- a/indra/newview/llnotify.cpp +++ b/indra/newview/llnotify.cpp @@ -69,11 +69,22 @@ const S32 BOTTOM_PAD = VPAD * 3; // statics -S32 LLNotifyBox::sNotifyBoxCount = 0; -const LLFontGL* LLNotifyBox::sFont = NULL; -const LLFontGL* LLNotifyBox::sFontSmall = NULL; -std::map LLNotifyBox::sOpenUniqueNotifyBoxes; +S32 sNotifyBoxCount = 0; +static const LLFontGL* sFont = NULL; +void chat_notification(const LLNotificationPtr notification) +{ + // TODO: Make a separate archive for these. + if (gSavedSettings.getBOOL("HideNotificationsInChat")) return; + LLChat chat(notification->getMessage()); + chat.mSourceType = CHAT_SOURCE_SYSTEM; +// [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0e) | Added: RLVa-0.2.0b + // Notices should already have their contents filtered where necessary + if (rlv_handler_t::isEnabled()) + chat.mRlvLocFiltered = chat.mRlvNamesFiltered = true; +// [/RLVa:KB] + LLFloaterChat::getInstance()->addChatHistory(chat); +} //--------------------------------------------------------------------------- // LLNotifyBox @@ -82,6 +93,7 @@ std::map LLNotifyBox::sOpenUniqueNotifyBoxes; //static void LLNotifyBox::initClass() { + sFont = LLFontGL::getFontSansSerif(); LLNotificationChannel::buildChannel("Notifications", "Visible", LLNotificationFilters::filterBy(&LLNotification::getType, "notify")); LLNotificationChannel::buildChannel("NotificationTips", "Visible", LLNotificationFilters::filterBy(&LLNotification::getType, "notifytip")); @@ -96,8 +108,13 @@ bool LLNotifyBox::onNotification(const LLSD& notify) if (!notification) return false; - if(notify["sigtype"].asString() == "add" || notify["sigtype"].asString() == "change") + if (notify["sigtype"].asString() == "add" || notify["sigtype"].asString() == "change") { + if (notification->getPayload().has("SUPPRESS_TOAST")) + { + chat_notification(notification); + return false; + } //bring existing notification to top //This getInstance is ugly, as LLNotifyBox is derived from both LLInstanceTracker and LLEventTimer, which also is derived from its own LLInstanceTracker //Have to explicitly determine which getInstance function to use. @@ -108,12 +125,7 @@ bool LLNotifyBox::onNotification(const LLSD& notify) } else { - bool is_script_dialog = (notification->getName() == "ScriptDialog" || notification->getName() == "ScriptDialogGroup"); - LLNotifyBox* notify_box = new LLNotifyBox( - notification, - is_script_dialog); //layout_script_dialog); - - gNotifyBoxView->addChild(notify_box); + gNotifyBoxView->addChild(new LLNotifyBox(notification)); } } else if (notify["sigtype"].asString() == "delete") @@ -129,8 +141,8 @@ bool LLNotifyBox::onNotification(const LLSD& notify) } //--------------------------------------------------------------------------- -LLNotifyBox::LLNotifyBox(LLNotificationPtr notification, - BOOL layout_script_dialog) +// Singu Note: We could clean a lot of this up by creating derived classes for Notifications and NotificationTips. +LLNotifyBox::LLNotifyBox(LLNotificationPtr notification) : LLPanel(notification->getName(), LLRect(), BORDER_NO), LLEventTimer(notification->getExpiration() == LLDate() ? LLDate(LLDate::now().secondsSinceEpoch() + (F64)gSavedSettings.getF32("NotifyTipDuration")) @@ -138,25 +150,18 @@ LLNotifyBox::LLNotifyBox(LLNotificationPtr notification, LLInstanceTracker(notification->getID()), mNotification(notification), mIsTip(notification->getType() == "notifytip"), - mAnimating(TRUE), + mAnimating(gNotifyBoxView->getChildCount() == 0), // Only animate first window mNextBtn(NULL), mNumOptions(0), mNumButtons(0), - mAddedDefaultBtn(FALSE), - mLayoutScriptDialog(layout_script_dialog), + mAddedDefaultBtn(false), mUserInputBox(NULL) { std::string edit_text_name; std::string edit_text_contents; - // class init - { - sFont = LLFontGL::getFontSansSerif(); - sFontSmall = LLFontGL::getFontSansSerifSmall(); - } - // setup paramaters - mMessage = notification->getMessage(); + const std::string& message(notification->getMessage()); // initialize setFocusRoot(!mIsTip); @@ -169,19 +174,14 @@ LLNotifyBox::LLNotifyBox(LLNotificationPtr notification, // they display the tip in a different color mIsCaution = notification->getPriority() >= NOTIFICATION_PRIORITY_HIGH; - // Only animate first window - if( gNotifyBoxView->getChildCount() > 0 ) - mAnimating = FALSE; - else - mAnimating = TRUE; - LLNotificationFormPtr form(notification->getForm()); mNumOptions = form->getNumElements(); bool is_textbox = form->getElement("message").isDefined(); - LLRect rect = mIsTip ? getNotifyTipRect(mMessage) + bool layout_script_dialog(notification->getName() == "ScriptDialog" || notification->getName() == "ScriptDialogGroup"); + LLRect rect = mIsTip ? getNotifyTipRect(message) : getNotifyRect(is_textbox ? 10 : mNumOptions, layout_script_dialog, mIsCaution); setRect(rect); setFollows(mIsTip ? (FOLLOWS_BOTTOM|FOLLOWS_RIGHT) : (FOLLOWS_TOP|FOLLOWS_RIGHT)); @@ -250,7 +250,7 @@ LLNotifyBox::LLNotifyBox(LLNotificationPtr notification, const S32 MAX_LENGTH = 512 + 20 + DB_FIRST_NAME_BUF_SIZE + DB_LAST_NAME_BUF_SIZE + DB_INV_ITEM_NAME_BUF_SIZE; // For script dialogs: add space for title. - text = new LLTextEditor(std::string("box"), LLRect(x, y, getRect().getWidth()-2, mIsTip ? BOTTOM : BTN_TOP+16), MAX_LENGTH, mMessage, sFont, FALSE); + text = new LLTextEditor(std::string("box"), LLRect(x, y, getRect().getWidth()-2, mIsTip ? BOTTOM : BTN_TOP+16), MAX_LENGTH, message, sFont, FALSE); text->setWordWrap(TRUE); text->setTabStop(FALSE); text->setMouseOpaque(FALSE); @@ -267,11 +267,9 @@ LLNotifyBox::LLNotifyBox(LLNotificationPtr notification, } else { - const S32 BTN_TOP = BOTTOM_PAD + (((mNumOptions-1+2)/3)) * (BTN_HEIGHT+VPAD); // Tokenization on \n is handled by LLTextBox - const S32 MAX_LENGTH = 512 + 20 + DB_FIRST_NAME_BUF_SIZE + DB_LAST_NAME_BUF_SIZE + @@ -280,7 +278,7 @@ LLNotifyBox::LLNotifyBox(LLNotificationPtr notification, text = new LLTextEditor(std::string("box"), LLRect(x, y, getRect().getWidth()-2, mIsTip ? BOTTOM : BTN_TOP+16), MAX_LENGTH, - mMessage, + message, sFont, FALSE); text->setWordWrap(TRUE); @@ -300,54 +298,39 @@ LLNotifyBox::LLNotifyBox(LLNotificationPtr notification, if (mIsTip) { - // TODO: Make a separate archive for these. - LLChat chat(mMessage); - chat.mSourceType = CHAT_SOURCE_SYSTEM; -// [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0e) | Added: RLVa-0.2.0b - if (rlv_handler_t::isEnabled()) - { - // Notices should already have their contents filtered where necessary - chat.mRlvLocFiltered = chat.mRlvNamesFiltered = TRUE; - } -// [/RLVa:KB] - if (!gSavedSettings.getBOOL("HideNotificationsInChat")) { - LLFloaterChat::getInstance(LLSD())->addChatHistory(chat); - } + chat_notification(mNotification); } else { - LLButton* btn; - btn = new LLButton(std::string("next"), + mNextBtn = new LLButton(std::string("next"), LLRect(getRect().getWidth()-26, BOTTOM_PAD + 20, getRect().getWidth()-2, BOTTOM_PAD), std::string("notify_next.png"), std::string("notify_next.png"), LLStringUtil::null, - boost::bind(&LLNotifyBox::onClickNext,this), + boost::bind(&LLNotifyBox::moveToBack, this, true), sFont); - btn->setScaleImage(TRUE); - btn->setToolTip(LLTrans::getString("next")); - addChild(btn); - mNextBtn = btn; + mNextBtn->setScaleImage(TRUE); + mNextBtn->setToolTip(LLTrans::getString("next")); + addChild(mNextBtn); for (S32 i = 0; i < mNumOptions; i++) { - LLSD form_element = form->getElement(i); std::string element_type = form_element["type"].asString(); if (element_type == "button") { - addButton(form_element["name"].asString(), form_element["text"].asString(), TRUE, form_element["default"].asBoolean()); + addButton(form_element["name"].asString(), form_element["text"].asString(), TRUE, form_element["default"].asBoolean(), layout_script_dialog); } else if (element_type == "input") { edit_text_contents = form_element["value"].asString(); edit_text_name = form_element["name"].asString(); } - } + } if (is_textbox) { - S32 button_rows = (layout_script_dialog) ? 2 : 1; + S32 button_rows = layout_script_dialog ? 2 : 1; LLRect input_rect; input_rect.setOriginAndSize(x, BOTTOM_PAD + button_rows * (BTN_HEIGHT + VPAD), @@ -373,23 +356,15 @@ LLNotifyBox::LLNotifyBox(LLNotificationPtr notification, if (mNumButtons == 0) { - addButton("OK", "OK", FALSE, TRUE); - mAddedDefaultBtn = TRUE; + addButton("OK", "OK", false, true, layout_script_dialog); + mAddedDefaultBtn = true; } - sNotifyBoxCount++; - - if (sNotifyBoxCount <= 0) - { + if (++sNotifyBoxCount <= 0) llwarns << "A notification was mishandled. sNotifyBoxCount = " << sNotifyBoxCount << llendl; - } - // If this is the only notify box, don't show the next button - if (sNotifyBoxCount == 1 - && mNextBtn) - { - mNextBtn->setVisible(FALSE); - } + else if (sNotifyBoxCount == 1 && mNextBtn) + mNextBtn->setVisible(false); } } @@ -399,14 +374,13 @@ LLNotifyBox::~LLNotifyBox() } // virtual -LLButton* LLNotifyBox::addButton(const std::string& name, const std::string& label, BOOL is_option, BOOL is_default) +LLButton* LLNotifyBox::addButton(const std::string& name, const std::string& label, bool is_option, bool is_default, bool layout_script_dialog) { // make caution notification buttons slightly narrower // so that 3 of them can fit without overlapping the "next" button - S32 btn_width = mIsCaution? 84 : 90; + S32 btn_width = mIsCaution ? 84 : 90; LLRect btn_rect; - LLButton* btn; S32 btn_height= BTN_HEIGHT; const LLFontGL* font = sFont; S32 ignore_pad = 0; @@ -414,7 +388,7 @@ LLButton* LLNotifyBox::addButton(const std::string& name, const std::string& lab S32 index = button_index; S32 x = (HPAD * 4) + 32; - if (mLayoutScriptDialog) + if (layout_script_dialog) { // Add two "blank" option spaces, before the "Ignore" button index = button_index + 2; @@ -422,6 +396,7 @@ LLButton* LLNotifyBox::addButton(const std::string& name, const std::string& lab { // Ignore button is smaller, less wide btn_height = BTN_HEIGHT_SMALL; + static const LLFontGL* sFontSmall = LLFontGL::getFontSansSerifSmall(); font = sFontSmall; ignore_pad = 10; } @@ -432,7 +407,7 @@ LLButton* LLNotifyBox::addButton(const std::string& name, const std::string& lab btn_width - 2*ignore_pad, btn_height); - btn = new LLButton(name, btn_rect, "", boost::bind(&LLNotifyBox::onClickButton, this, is_option ? name : "")); + LLButton* btn = new LLButton(name, btn_rect, "", boost::bind(&LLNotifyBox::onClickButton, this, is_option ? name : "")); btn->setLabel(label); btn->setFont(font); @@ -445,9 +420,7 @@ LLButton* LLNotifyBox::addButton(const std::string& name, const std::string& lab addChild(btn, -1); if (is_default) - { setDefaultBtn(btn); - } mNumButtons++; return btn; @@ -486,14 +459,10 @@ void LLNotifyBox::draw() { // If we are teleporting, stop the timer and restart it when the teleporting completes if (gTeleportDisplay) - { mEventTimer.stop(); - } else if (!mEventTimer.getStarted()) - { mEventTimer.start(); - } - + F32 display_time = mAnimateTimer.getElapsedTimeF32(); if (mAnimating && display_time < ANIMATION_TIME) @@ -508,21 +477,18 @@ void LLNotifyBox::draw() LLUI::translate(0.f, voffset, 0.f); drawBackground(); - LLPanel::draw(); LLUI::popMatrix(); } else { - if(mAnimating) + if (mAnimating) { - mAnimating = FALSE; - if(!mIsTip) - { + mAnimating = false; + if (!mIsTip) // hide everyone behind me once I'm done animating gNotifyBoxView->showOnly(this); - } } drawBackground(); LLPanel::draw(); @@ -531,67 +497,52 @@ void LLNotifyBox::draw() void LLNotifyBox::drawBackground() const { - LLUIImagePtr imagep = LLUI::getUIImage("rounded_square.tga"); - if (imagep) + if (LLUIImagePtr imagep = LLUI::getUIImage("rounded_square.tga")) { gGL.getTexUnit(0)->bind(imagep->getImage()); // set proper background color depending on whether notify box is a caution or not - LLColor4 color = mIsCaution? gColors.getColor("NotifyCautionBoxColor") : gColors.getColor("NotifyBoxColor"); - if(gFocusMgr.childHasKeyboardFocus( this )) + bool has_focus(gFocusMgr.childHasKeyboardFocus(this)); + if (has_focus) { const S32 focus_width = 2; - color = gColors.getColor("FloaterFocusBorderColor"); + static const LLCachedControl sBorder(gColors, "FloaterFocusBorderColor"); + LLColor4 color = sBorder; gGL.color4fv(color.mV); gl_segmented_rect_2d_tex(-focus_width, getRect().getHeight() + focus_width, getRect().getWidth() + focus_width, -focus_width, imagep->getTextureWidth(), imagep->getTextureHeight(), 16, mIsTip ? ROUNDED_RECT_TOP : ROUNDED_RECT_BOTTOM); - color = gColors.getColor("ColorDropShadow"); - gGL.color4fv(color.mV); - gl_segmented_rect_2d_tex(0, getRect().getHeight(), getRect().getWidth(), 0, imagep->getTextureWidth(), imagep->getTextureHeight(), 16, mIsTip ? ROUNDED_RECT_TOP : ROUNDED_RECT_BOTTOM); - - if( mIsCaution ) - color = gColors.getColor("NotifyCautionBoxColor"); - else - color = gColors.getColor("NotifyBoxColor"); - - gGL.color4fv(color.mV); - gl_segmented_rect_2d_tex(1, getRect().getHeight()-1, getRect().getWidth()-1, 1, imagep->getTextureWidth(), imagep->getTextureHeight(), 16, mIsTip ? ROUNDED_RECT_TOP : ROUNDED_RECT_BOTTOM); - } - else - { + static const LLCachedControl sDropShadow(gColors, "ColorDropShadow"); + color = sDropShadow; gGL.color4fv(color.mV); gl_segmented_rect_2d_tex(0, getRect().getHeight(), getRect().getWidth(), 0, imagep->getTextureWidth(), imagep->getTextureHeight(), 16, mIsTip ? ROUNDED_RECT_TOP : ROUNDED_RECT_BOTTOM); } + + static const LLCachedControl sCautionColor(gColors, "NotifyCautionBoxColor"); + static const LLCachedControl sColor(gColors, "NotifyBoxColor"); + LLColor4 color = mIsCaution ? sCautionColor : sColor; + gGL.color4fv(color.mV); + gl_segmented_rect_2d_tex(has_focus, getRect().getHeight()-has_focus, getRect().getWidth()-has_focus, has_focus, imagep->getTextureWidth(), imagep->getTextureHeight(), 16, mIsTip ? ROUNDED_RECT_TOP : ROUNDED_RECT_BOTTOM); } } void LLNotifyBox::close() { - BOOL isTipTmp = mIsTip; - if (!mIsTip) { - sNotifyBoxCount--; + if (LLNotifyBox* front = gNotifyBoxView->getFirstNontipBox()) + { + gNotifyBoxView->showOnly(front); + // we're assuming that close is only called by user action (for non-tips), so we then give focus to the next close button + if (LLView* view = front->getDefaultButton()) + view->setFocus(true); + gFocusMgr.triggerFocusFlash(); // TODO it's ugly to call this here + } + --sNotifyBoxCount; } die(); - if(!isTipTmp) - { - LLNotifyBox * front = gNotifyBoxView->getFirstNontipBox(); - if(front) - { - gNotifyBoxView->showOnly(front); - // we're assuming that close is only called by user action (for non-tips), - // so we then give focus to the next close button - if (front->getDefaultButton()) - { - front->getDefaultButton()->setFocus(TRUE); - } - gFocusMgr.triggerFocusFlash(); // TODO it's ugly to call this here - } - } } void LLNotifyBox::format(std::string& msg, const LLStringUtil::format_map_t& args) @@ -622,11 +573,8 @@ BOOL LLNotifyBox::tick() void LLNotifyBox::setVisible(BOOL visible) { // properly set the status of the next button - if(visible && !mIsTip) - { + if (visible && !mIsTip) mNextBtn->setVisible(sNotifyBoxCount > 1); - mNextBtn->setEnabled(sNotifyBoxCount > 1); - } LLPanel::setVisible(visible); } @@ -634,35 +582,30 @@ void LLNotifyBox::moveToBack(bool getfocus) { // Move this dialog to the back. gNotifyBoxView->sendChildToBack(this); - if(!mIsTip && mNextBtn) + if (!mIsTip && mNextBtn) { - mNextBtn->setVisible(FALSE); + mNextBtn->setVisible(false); // And enable the next button on the frontmost one, if there is one - if (gNotifyBoxView->getChildCount() > 0) - { - LLNotifyBox* front = gNotifyBoxView->getFirstNontipBox(); - if (front) + if (gNotifyBoxView->getChildCount()) + if (LLNotifyBox* front = gNotifyBoxView->getFirstNontipBox()) { gNotifyBoxView->showOnly(front); if (getfocus) { // if are called from a user interaction // we give focus to the next next button - if (front->mNextBtn != NULL) - { - front->mNextBtn->setFocus(TRUE); - } + if (front->mNextBtn) + front->mNextBtn->setFocus(true); gFocusMgr.triggerFocusFlash(); // TODO: it's ugly to call this here } } - } } } // static -LLRect LLNotifyBox::getNotifyRect(S32 num_options, BOOL layout_script_dialog, BOOL is_caution) +LLRect LLNotifyBox::getNotifyRect(S32 num_options, bool layout_script_dialog, bool is_caution) { S32 notify_height = gSavedSettings.getS32("NotifyBoxHeight"); if (is_caution) @@ -680,15 +623,11 @@ LLRect LLNotifyBox::getNotifyRect(S32 num_options, BOOL layout_script_dialog, BO const S32 LEFT = RIGHT - NOTIFY_WIDTH; if (num_options < 1) - { num_options = 1; - } // Add two "blank" option spaces. if (layout_script_dialog) - { num_options += 2; - } S32 additional_lines = (num_options-1) / 3; @@ -700,7 +639,6 @@ LLRect LLNotifyBox::getNotifyRect(S32 num_options, BOOL layout_script_dialog, BO // static LLRect LLNotifyBox::getNotifyTipRect(const std::string &utf8message) { - S32 line_count = 1; LLWString message = utf8str_to_wstring(utf8message); S32 message_len = message.length(); @@ -712,27 +650,24 @@ LLRect LLNotifyBox::getNotifyTipRect(const std::string &utf8message) const llwchar* start = wchars; const llwchar* end; S32 total_drawn = 0; - BOOL done = FALSE; + bool done = false; + S32 line_count; - do + for (line_count = 2; !done; ++line_count) { - line_count++; + for (end = start; *end != 0 && *end != '\n'; end++); - for (end=start; *end != 0 && *end != '\n'; end++) - ; - - if( *end == 0 ) + if (*end == 0) { end = wchars + message_len; - done = TRUE; + done = true; } - S32 remaining = end - start; - while( remaining ) + for (S32 remaining = end - start; remaining;) { - S32 drawn = sFont->maxDrawableChars( start, (F32)text_area_width, remaining, LLFontGL::WORD_BOUNDARY_IF_POSSIBLE ); + S32 drawn = sFont->maxDrawableChars(start, (F32)text_area_width, remaining, LLFontGL::WORD_BOUNDARY_IF_POSSIBLE); - if( 0 == drawn ) + if (0 == drawn) { drawn = 1; // Draw at least one character, even if it doesn't all fit. (avoids an infinite loop) } @@ -740,10 +675,10 @@ LLRect LLNotifyBox::getNotifyTipRect(const std::string &utf8message) total_drawn += drawn; start += drawn; remaining -= drawn; - - if( total_drawn < message_len ) + + if (total_drawn < message_len) { - if( (wchars[ total_drawn ] != '\n') ) + if (wchars[ total_drawn ] != '\n') { // wrap because line was too long line_count++; @@ -751,19 +686,18 @@ LLRect LLNotifyBox::getNotifyTipRect(const std::string &utf8message) } else { - done = TRUE; + done = true; } } total_drawn++; // for '\n' - end++; - start = end; - } while( !done ); + start = ++end; + } const S32 MIN_NOTIFY_HEIGHT = 72; const S32 MAX_NOTIFY_HEIGHT = 600; S32 notify_height = llceil((F32) (line_count+1) * sFont->getLineHeight()); - if(gOverlayBar) + if (gOverlayBar) { notify_height += gOverlayBar->getBoundingRect().mTop; } @@ -799,18 +733,12 @@ void LLNotifyBox::onClickButton(const std::string name) } -void LLNotifyBox::onClickNext() -{ - moveToBack(true); -} - - LLNotifyBoxView::LLNotifyBoxView(const std::string& name, const LLRect& rect, BOOL mouse_opaque, U32 follows) : LLUICtrl(name,rect,mouse_opaque,NULL,follows) { } -LLNotifyBox * LLNotifyBoxView::getFirstNontipBox() const +LLNotifyBox* LLNotifyBoxView::getFirstNontipBox() const { // *TODO: Don't make assumptions like this! // assumes every child is a notify box @@ -819,50 +747,41 @@ LLNotifyBox * LLNotifyBoxView::getFirstNontipBox() const iter++) { // hack! *TODO: Integrate llnotify and llgroupnotify - if(isGroupNotifyBox(*iter)) - { + if (isGroupNotifyBox(*iter)) continue; - } - - LLNotifyBox* box = (LLNotifyBox*)(*iter); - if(!box->isTip() && !box->isDead()) - { + + LLNotifyBox* box = static_cast(*iter); + if (!box->isTip() && !box->isDead()) return box; - } } return NULL; } -void LLNotifyBoxView::showOnly(LLView * view) +void LLNotifyBoxView::showOnly(LLView* view) { - if(view) - { - // assumes that the argument is actually a child - LLNotifyBox * shown = dynamic_cast(view); - if(!shown) - { - return ; - } + // assumes that the argument is actually a child + if (!dynamic_cast(view)) return; - // make every other notification invisible - for(child_list_const_iter_t iter = getChildList()->begin(); + // make every other notification invisible + for(child_list_const_iter_t iter = getChildList()->begin(); iter != getChildList()->end(); iter++) - { - if(isGroupNotifyBox(*iter)) - { - continue; - } - - LLNotifyBox * box = (LLNotifyBox*)(*iter); - if(box != view && box->getVisible() && !box->isTip()) - { - box->setVisible(FALSE); - } - } - shown->setVisible(TRUE); - sendChildToFront(shown); + { + if (view == (*iter)) continue; + LLView* view(*iter); + if (isGroupNotifyBox(view) && !view->getVisible()) + continue; + if (!static_cast(view)->isTip()) + view->setVisible(false); } + view->setVisible(true); + sendChildToFront(view); +} + +void LLNotifyBoxView::deleteAllChildren() +{ + LLUICtrl::deleteAllChildren(); + sNotifyBoxCount = 0; } void LLNotifyBoxView::purgeMessagesMatching(const Matcher& matcher) @@ -874,13 +793,11 @@ void LLNotifyBoxView::purgeMessagesMatching(const Matcher& matcher) iter != notification_queue.end(); iter++) { - if(isGroupNotifyBox(*iter)) - { + if (isGroupNotifyBox(*iter)) continue; - } - LLNotifyBox* notification = (LLNotifyBox*)*iter; - if(matcher.matches(notification->getNotification())) + LLNotifyBox* notification = static_cast(*iter); + if (matcher.matches(notification->getNotification())) { removeChild(notification); } @@ -889,11 +806,6 @@ void LLNotifyBoxView::purgeMessagesMatching(const Matcher& matcher) bool LLNotifyBoxView::isGroupNotifyBox(const LLView* view) const { - if (view->getName() == "groupnotify") - { - return TRUE ; - } - - return FALSE ; + return view->getName() == "groupnotify"; } diff --git a/indra/newview/llnotify.h b/indra/newview/llnotify.h index c0b03b8f9..fa85eb17e 100644 --- a/indra/newview/llnotify.h +++ b/indra/newview/llnotify.h @@ -37,7 +37,6 @@ #include "llpanel.h" #include "lleventtimer.h" #include "llnotifications.h" -#include class LLButton; class LLNotifyBoxTemplate; @@ -51,16 +50,12 @@ class LLNotifyBox : public LLInstanceTracker { public: - typedef void (*notify_callback_t)(S32 option, void* data); - typedef std::vector option_list_t; - static void initClass(); - static void destroyClass(); - BOOL isTip() const { return mIsTip; } - BOOL isCaution() const { return mIsCaution; } + bool isTip() const { return mIsTip; } + bool isCaution() const { return mIsCaution; } /*virtual*/ void setVisible(BOOL visible); - void stopAnimation() { mAnimating = FALSE; } + void stopAnimation() { mAnimating = false; } void close(); @@ -69,11 +64,11 @@ public: static void format(std::string& msg, const LLStringUtil::format_map_t& args); protected: - LLNotifyBox(LLNotificationPtr notification, BOOL layout_script_dialog); + LLNotifyBox(LLNotificationPtr notification); /*virtual*/ ~LLNotifyBox(); - LLButton* addButton(std::string const &name, const std::string& label, BOOL is_option, BOOL is_default); + LLButton* addButton(const std::string& name, const std::string& label, bool is_option, bool is_default, bool layout_script_dialog); /*virtual*/ BOOL handleMouseUp(S32 x, S32 y, MASK mask); /*virtual*/ BOOL handleRightMouseDown(S32 x, S32 y, MASK mask); @@ -86,30 +81,23 @@ protected: // Returns the rect, relative to gNotifyView, where this // notify box should be placed. - static LLRect getNotifyRect(S32 num_options, BOOL layout_script_dialog, BOOL is_caution); + static LLRect getNotifyRect(S32 num_options, bool layout_script_dialog, bool is_caution); static LLRect getNotifyTipRect(const std::string &message); // internal handler for button being clicked void onClickButton(const std::string name); - // for "next" button - void onClickNext(); - - //static LLNotifyBox* findExistingNotify(LLPointer notify_template, const LLString::format_map_t& args); - private: static bool onNotification(const LLSD& notify); void drawBackground() const; protected: - std::string mMessage; - LLTextEditor *mUserInputBox; LLNotificationPtr mNotification; - BOOL mIsTip; - BOOL mIsCaution; // is this a caution notification? - BOOL mAnimating; // Are we sliding onscreen? + bool mIsTip; + bool mIsCaution; // is this a caution notification? + bool mAnimating; // Are we sliding onscreen? // Time since this notification was displayed. // This is an LLTimer not a frame timer because I am concerned @@ -120,34 +108,19 @@ protected: S32 mNumOptions; S32 mNumButtons; - BOOL mAddedDefaultBtn; - - BOOL mLayoutScriptDialog; - - // Used for callbacks - struct InstanceAndS32 - { - LLNotifyBox* mSelf; - std::string mButtonName; - }; - static S32 sNotifyBoxCount; - static const LLFontGL* sFont; - static const LLFontGL* sFontSmall; - - typedef std::map unique_map_t; - static unique_map_t sOpenUniqueNotifyBoxes; + bool mAddedDefaultBtn; }; class LLNotifyBoxView : public LLUICtrl { public: LLNotifyBoxView(const std::string& name, const LLRect& rect, BOOL mouse_opaque, U32 follows=FOLLOWS_NONE); - void showOnly(LLView * ctrl); - LLNotifyBox * getFirstNontipBox() const; + void showOnly(LLView* ctrl); + LLNotifyBox* getFirstNontipBox() const; + /*virtual*/ void deleteAllChildren(); - class Matcher + struct Matcher { - public: Matcher(){} virtual ~Matcher() {} virtual bool matches(const LLNotificationPtr) const = 0; @@ -157,7 +130,7 @@ public: void purgeMessagesMatching(const Matcher& matcher); private: - bool isGroupNotifyBox(const LLView* view) const ; + bool isGroupNotifyBox(const LLView* view) const; }; // This view contains the stack of notification windows. diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 5ad5d60c4..055945c18 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -366,7 +366,6 @@ BOOL handle_check_pose(void* userdata) { } -void handle_close_all_notifications(void*); void handle_open_message_log(void*); // @@ -3690,17 +3689,6 @@ void handle_open_message_log(void*) LLFloaterMessageLog::show(); } -void handle_close_all_notifications(void*) -{ - LLView::child_list_t child_list(*(gNotifyBoxView->getChildList())); - for(LLView::child_list_iter_t iter = child_list.begin(); - iter != child_list.end(); - iter++) - { - gNotifyBoxView->removeChild(*iter); - } -} - void handle_fake_away_status(void*) { bool fake_away = gSavedSettings.getBOOL("FakeAway"); @@ -8796,7 +8784,7 @@ class SinguCloseAllDialogs : public view_listener_t { bool handleEvent(LLPointer event, const LLSD& userdata) { - handle_close_all_notifications(NULL); + gNotifyBoxView->deleteAllChildren(); return true; } }; From a9593e62b75403d3670f853e1031e0c298f1e18b Mon Sep 17 00:00:00 2001 From: Inusaito Sayori Date: Mon, 2 Feb 2015 16:12:32 -0500 Subject: [PATCH 04/28] LLViewerMenu code cleanup --- indra/newview/llviewercontrol.cpp | 7 ++ indra/newview/llviewermenu.cpp | 97 ++++++------------- .../skins/default/xui/en-us/menu_viewer.xml | 4 +- 3 files changed, 39 insertions(+), 69 deletions(-) diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp index a8e8c2379..021844f0e 100644 --- a/indra/newview/llviewercontrol.cpp +++ b/indra/newview/llviewercontrol.cpp @@ -625,6 +625,12 @@ static bool handleAllowLargeSounds(const LLSD& newvalue) return true; } +void handleHighResChanged(const LLSD& val) +{ + if (val) // High Res Snapshot active, must uncheck RenderUIInSnapshot + gSavedSettings.setBOOL("RenderUIInSnapshot", false); +} + //////////////////////////////////////////////////////////////////////////// void settings_setup_listeners() { @@ -819,6 +825,7 @@ void settings_setup_listeners() gSavedSettings.getControl("AllowLargeSounds")->getSignal()->connect(boost::bind(&handleAllowLargeSounds, _2)); gSavedSettings.getControl("LiruUseZQSDKeys")->getSignal()->connect(boost::bind(load_default_bindings, _2)); + gSavedSettings.getControl("HighResSnapshot")->getSignal()->connect(boost::bind(&handleHighResChanged, _2)); } void onCommitControlSetting_gSavedSettings(LLUICtrl* ctrl, void* name) diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 055945c18..a072431fa 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -335,10 +335,6 @@ void set_current_pose(std::string anim) gAgent.sendAnimationRequest(current_pose, ANIM_REQUEST_START); gAgent.sendAgentSetAppearance(); } -void handle_pose_stand(void*) -{ - set_current_pose("038fcec9-5ebd-8a8e-0e2e-6e71a0a1ac53"); -} void handle_pose_stand_stop(void*) { if (on_pose_stand) @@ -349,21 +345,12 @@ void handle_pose_stand_stop(void*) gAgent.sendAgentSetAppearance(); } } -void cleanup_pose_stand(void) +void cleanup_pose_stand() { handle_pose_stand_stop(NULL); } -void handle_toggle_pose(void* userdata) { - if(current_pose.isNull()) - handle_pose_stand(userdata); - else - handle_pose_stand_stop(userdata); -} - -BOOL handle_check_pose(void* userdata) { - return current_pose.notNull(); -} +BOOL handle_check_pose(void* userdata) { return current_pose.notNull(); } void handle_open_message_log(void*); @@ -450,6 +437,7 @@ void handle_morph_load_obj(void*); void handle_debug_avatar_textures(void*); void handle_dump_region_object_cache(void*); +void menu_toggle_double_click_control(void*); BOOL menu_ui_enabled(void *user_data); BOOL menu_check_control( void* user_data); void menu_toggle_variable( void* user_data ); @@ -1158,11 +1146,11 @@ void init_debug_ui_menu(LLMenuGL* menu) menu->addChild(new LLMenuItemCallGL( "Print Agent Info", &print_agent_nvpairs, NULL, NULL, 'P', MASK_SHIFT )); menu->addChild(new LLMenuItemCallGL( "Memory Stats", &output_statistics, NULL, NULL, 'M', MASK_SHIFT | MASK_ALT | MASK_CONTROL)); menu->addChild(new LLMenuItemCheckGL("Double-Click Auto-Pilot", - menu_toggle_control, NULL, menu_check_control, + menu_toggle_double_click_control, NULL, menu_check_control, (void*)"DoubleClickAutoPilot")); // add for double click teleport support menu->addChild(new LLMenuItemCheckGL("Double-Click Teleport", - menu_toggle_control, NULL, menu_check_control, + menu_toggle_double_click_control, NULL, menu_check_control, (void*)"DoubleClickTeleport")); menu->addSeparator(); // menu->addChild(new LLMenuItemCallGL( "Print Packets Lost", &print_packets_lost, NULL, NULL, 'L', MASK_SHIFT )); @@ -7307,26 +7295,27 @@ BOOL menu_ui_enabled(void *user_data) } // TomY TODO DEPRECATE & REMOVE -void menu_toggle_control( void* user_data ) +void menu_toggle_control(void* user_data) { std::string setting(static_cast(user_data)); - BOOL checked = gSavedSettings.getBOOL(setting); - if (setting == "HighResSnapshot" && !checked) - { - // High Res Snapshot active, must uncheck RenderUIInSnapshot - gSavedSettings.setBOOL( "RenderUIInSnapshot", FALSE ); - } - else if (setting == "DoubleClickAutoPilot" && !checked) - { - // Doubleclick actions - there can be only one - gSavedSettings.setBOOL( "DoubleClickTeleport", FALSE ); - } - else if (setting == "DoubleClickTeleport" && !checked) - { - // Doubleclick actions - there can be only one - gSavedSettings.setBOOL( "DoubleClickAutoPilot", FALSE ); - } - gSavedSettings.setBOOL(setting, !checked); + LLControlVariable* control(gSavedSettings.getControl(setting)); + control->set(!control->get()); +} + +void menu_toggle_double_click_control(void* user_data) +{ + std::string setting(static_cast(user_data)); + LLControlVariable* control(gSavedSettings.getControl(setting)); + bool checked = control->get(); + // Doubleclick actions - there can be only one + if (!checked) + { + if (setting == "DoubleClickAutoPilot") + gSavedSettings.setBOOL("DoubleClickTeleport", false); + else if (setting == "DoubleClickTeleport") + gSavedSettings.setBOOL("DoubleClickAutoPilot", false); + } + control->set(!checked); } @@ -7335,14 +7324,8 @@ class LLToggleControl : public view_listener_t { bool handleEvent(LLPointer event, const LLSD& userdata) { - std::string control_name = userdata.asString(); - BOOL checked = gSavedSettings.getBOOL( control_name ); - if (control_name == "HighResSnapshot" && !checked) - { - // High Res Snapshot active, must uncheck RenderUIInSnapshot - gSavedSettings.setBOOL( "RenderUIInSnapshot", FALSE ); - } - gSavedSettings.setBOOL( control_name, !checked ); + LLControlVariable* control(gSavedSettings.getControl(userdata.asString())); + control->set(!control->get()); return true; } }; @@ -8789,26 +8772,6 @@ class SinguCloseAllDialogs : public view_listener_t } }; -class SinguNimble : public view_listener_t -{ - bool handleEvent(LLPointer event, const LLSD& userdata) - { - gSavedSettings.setBOOL("Nimble", !gSavedSettings.getBOOL("Nimble")); - - return true; - } -}; - -class SinguCheckNimble : public view_listener_t -{ - bool handleEvent(LLPointer event, const LLSD& userdata) - { - gMenuHolder->findControl(userdata["control"].asString())->setValue(gSavedSettings.getBOOL("Nimble")); - - return true; - } -}; - class SinguEnableStreamingAudioDisplay : public view_listener_t { bool handleEvent(LLPointer event, const LLSD& userdata) @@ -8821,8 +8784,10 @@ class SinguPoseStand : public view_listener_t { bool handleEvent(LLPointer event, const LLSD& userdata) { - handle_toggle_pose(NULL); - + if (current_pose.isNull()) + set_current_pose("038fcec9-5ebd-8a8e-0e2e-6e71a0a1ac53"); + else + handle_pose_stand_stop(NULL); return true; } }; @@ -9509,8 +9474,6 @@ void initialize_menus() // Singularity menu addMenu(new SinguCloseAllDialogs(), "CloseAllDialogs"); // ---- Fake away handled elsewhere - addMenu(new SinguNimble(), "Nimble"); - addMenu(new SinguCheckNimble(), "CheckNimble"); addMenu(new SinguEnableStreamingAudioDisplay(), "EnableStreamingAudioDisplay"); addMenu(new SinguPoseStand(), "PoseStand"); addMenu(new SinguCheckPoseStand(), "CheckPoseStand"); diff --git a/indra/newview/skins/default/xui/en-us/menu_viewer.xml b/indra/newview/skins/default/xui/en-us/menu_viewer.xml index 440891d60..85f12d49a 100644 --- a/indra/newview/skins/default/xui/en-us/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en-us/menu_viewer.xml @@ -1031,8 +1031,8 @@ - - + + From ac0afbcc4aa121b5426350d9d441093d8953ffbd Mon Sep 17 00:00:00 2001 From: Inusaito Sayori Date: Mon, 2 Feb 2015 16:12:56 -0500 Subject: [PATCH 05/28] Fix llDialog tooltip --- indra/newview/skins/default/xui/en-us/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/skins/default/xui/en-us/strings.xml b/indra/newview/skins/default/xui/en-us/strings.xml index 50c3501af..468eea93f 100644 --- a/indra/newview/skins/default/xui/en-us/strings.xml +++ b/indra/newview/skins/default/xui/en-us/strings.xml @@ -1401,7 +1401,7 @@ integer llScriptDanger(vector pos) Returns TRUE if pos is over public land, sandbox land, land that doesn't allow everyone to edit and build, or land that doesn't allow outside scripts -llDialog(key avatar, string message, list buttons, integer chat_channel +llDialog(key avatar, string message, list buttons, integer chat_channel) Shows a dialog box on the avatar's screen with a message and up to 12 buttons. If a button is pressed, the avatar says the text of the button label on chat_channel. From c3e9150125d646366d54e14f5b8a5c62ce77da94 Mon Sep 17 00:00:00 2001 From: Inusaito Sayori Date: Mon, 2 Feb 2015 19:28:29 -0500 Subject: [PATCH 06/28] Oops, should leave that there. --- indra/newview/llnotify.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/indra/newview/llnotify.cpp b/indra/newview/llnotify.cpp index f84efeaa3..62ef0e53a 100644 --- a/indra/newview/llnotify.cpp +++ b/indra/newview/llnotify.cpp @@ -529,7 +529,9 @@ void LLNotifyBox::drawBackground() const void LLNotifyBox::close() { - if (!mIsTip) + bool not_tip = !mIsTip; + die(); + if (not_tip) { if (LLNotifyBox* front = gNotifyBoxView->getFirstNontipBox()) { @@ -541,8 +543,6 @@ void LLNotifyBox::close() } --sNotifyBoxCount; } - - die(); } void LLNotifyBox::format(std::string& msg, const LLStringUtil::format_map_t& args) From ef5b95d5b90ffae75a27f5eec39dfab9347bbe1f Mon Sep 17 00:00:00 2001 From: Inusaito Sayori Date: Wed, 4 Feb 2015 00:02:09 -0500 Subject: [PATCH 07/28] Fix crash signature 9141 --- indra/newview/llfloaterchat.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/indra/newview/llfloaterchat.cpp b/indra/newview/llfloaterchat.cpp index 21131a737..449fe6028 100644 --- a/indra/newview/llfloaterchat.cpp +++ b/indra/newview/llfloaterchat.cpp @@ -70,6 +70,8 @@ #include "rlvhandler.h" // [/RLVa:KB] +#include + // // Global statics // @@ -501,7 +503,7 @@ LLColor4 get_text_color(const LLChat& chat, bool from_im) } static const LLCachedControl sKeywordsChangeColor(gSavedPerAccountSettings, "KeywordsChangeColor", false); - if (sKeywordsChangeColor && gAgentID != chat.mFromID && chat.mSourceType != CHAT_SOURCE_SYSTEM && AscentKeyword::hasKeyword(chat.mText.substr(chat.mFromName.length()), 1)) + if (sKeywordsChangeColor && gAgentID != chat.mFromID && chat.mSourceType != CHAT_SOURCE_SYSTEM && AscentKeyword::hasKeyword(boost::starts_with(chat.mText, chat.mFromName) ? chat.mText.substr(chat.mFromName.length()) : chat.mText, 1)) { static const LLCachedControl sKeywordsColor(gSavedPerAccountSettings, "KeywordsColor", LLColor4(1.f, 1.f, 1.f, 1.f)); text_color = sKeywordsColor; From 10ef3ff683eaf1b2af395632e598362de7f94b25 Mon Sep 17 00:00:00 2001 From: Inusaito Sayori Date: Wed, 4 Feb 2015 00:30:40 -0500 Subject: [PATCH 08/28] Fix crash signature 7694 --- indra/newview/llfloaterfriends.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/indra/newview/llfloaterfriends.cpp b/indra/newview/llfloaterfriends.cpp index c28993742..481d8f31f 100644 --- a/indra/newview/llfloaterfriends.cpp +++ b/indra/newview/llfloaterfriends.cpp @@ -328,9 +328,10 @@ const S32& friend_name_system() return name_system; } -static void update_friend_item(LLScrollListItem* item, const LLAvatarName& avname) +static void update_friend_name(LLScrollListCtrl* list, const LLUUID& id, const LLAvatarName& avname) { - item->getColumn(1)->setValue(avname.getNSName(friend_name_system())); + if (LLScrollListItem* item = list->getItem(id)) + item->getColumn(1)->setValue(avname.getNSName(friend_name_system())); } void LLPanelFriends::addFriend(const LLUUID& agent_id) @@ -399,8 +400,8 @@ void LLPanelFriends::addFriend(const LLUUID& agent_id) .value(have_name ? relation_info->getChangeSerialNum() : -1); element.columns.add(cell); - LLScrollListItem* item(mFriendsList->addRow(element)); - if (!have_name) LLAvatarNameCache::get(agent_id, boost::bind(update_friend_item, item, _2)); + mFriendsList->addRow(element); + if (!have_name) LLAvatarNameCache::get(agent_id, boost::bind(update_friend_name, mFriendsList, _1, _2)); } // propagate actual relationship to UI. @@ -421,7 +422,7 @@ void LLPanelFriends::updateFriendItem(const LLUUID& agent_id, const LLRelationsh else { gCacheName->getFullName(agent_id, fullname); - LLAvatarNameCache::get(agent_id, boost::bind(update_friend_item, itemp, _2)); + LLAvatarNameCache::get(agent_id, boost::bind(update_friend_name, mFriendsList, _1, _2)); itemp->getColumn(LIST_FRIEND_UPDATE_GEN)->setValue(-1); } From adecaca730a512272fad5c830f1f670039d63a21 Mon Sep 17 00:00:00 2001 From: Inusaito Sayori Date: Wed, 4 Feb 2015 01:07:56 -0500 Subject: [PATCH 09/28] Work around crash signature 8715 Apparently SL Grid gives some odd session types for P2P? This should be looked into closer, but for now just accept that it happens. --- indra/newview/llimpanel.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/indra/newview/llimpanel.cpp b/indra/newview/llimpanel.cpp index 255a428fb..b55c0e9e4 100644 --- a/indra/newview/llimpanel.cpp +++ b/indra/newview/llimpanel.cpp @@ -336,6 +336,9 @@ LLFloaterIMPanel::LLFloaterIMPanel( mFactoryMap["active_speakers_panel"] = LLCallbackMap(createSpeakersPanel, this); mVoiceChannel = new LLVoiceChannelGroup(mSessionUUID, mLogLabel); break; + default: + llwarns << "Unknown session type: " << mDialog << llendl; + // fallthrough, Singu TODO: Find out which cases this happens in, seems to only be P2P, though. // just received text from another user case IM_NOTHING_SPECIAL: mTextIMPossible = LLVoiceClient::getInstance()->isSessionTextIMPossible(mSessionUUID); @@ -347,9 +350,6 @@ LLFloaterIMPanel::LLFloaterIMPanel( LLMuteList::instance().addObserver(this); mDing = gSavedSettings.getBOOL("LiruNewMessageSoundIMsOn"); break; - default: - llwarns << "Unknown session type" << llendl; - break; } mSpeakers = new LLIMSpeakerMgr(mVoiceChannel); From f0b18e52a3d977c2c19f2a6b4e50292acb5941f2 Mon Sep 17 00:00:00 2001 From: Inusaito Sayori Date: Wed, 4 Feb 2015 13:54:39 -0500 Subject: [PATCH 10/28] OR not AND --- indra/newview/llnotify.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/llnotify.cpp b/indra/newview/llnotify.cpp index 62ef0e53a..9cbafafd2 100644 --- a/indra/newview/llnotify.cpp +++ b/indra/newview/llnotify.cpp @@ -769,7 +769,7 @@ void LLNotifyBoxView::showOnly(LLView* view) { if (view == (*iter)) continue; LLView* view(*iter); - if (isGroupNotifyBox(view) && !view->getVisible()) + if (isGroupNotifyBox(view) || !view->getVisible()) continue; if (!static_cast(view)->isTip()) view->setVisible(false); From e625fa3b33bbe4dbe10373c9040549e62b674374 Mon Sep 17 00:00:00 2001 From: Inusaito Sayori Date: Wed, 4 Feb 2015 23:47:37 -0500 Subject: [PATCH 11/28] Cleanup duplicate show_picture codestuffs. --- indra/newview/llpanelavatar.cpp | 60 ++++++--------------------------- indra/newview/llpanelavatar.h | 3 -- indra/newview/llpanelpick.cpp | 6 ++-- 3 files changed, 14 insertions(+), 55 deletions(-) diff --git a/indra/newview/llpanelavatar.cpp b/indra/newview/llpanelavatar.cpp index c8483f591..d8377ffb2 100644 --- a/indra/newview/llpanelavatar.cpp +++ b/indra/newview/llpanelavatar.cpp @@ -277,27 +277,6 @@ void LLPanelAvatarSecondLife::enableControls(BOOL self) childSetEnabled("?", self); } -void LLPanelAvatarFirstLife::onClickImage() -{ - const LLUUID& id(getChild("img")->getImageAssetID()); - llinfos << "LLPanelAvatarFirstLife::onClickImage" << llendl; - if (!LLPreview::show(id)) - { - // There isn't one, so make a new preview - S32 left, top; - gFloaterView->getNewFloaterPosition(&left, &top); - LLRect rect = gSavedSettings.getRect("PreviewTextureRect"); - rect.translate( left - rect.mLeft, rect.mTop - top ); // Changed to avoid textures being sunken below the window border. - LLPreviewTexture* preview = new LLPreviewTexture("preview task texture", - rect, - std::string("Profile First Life Picture"), - id); - preview->setFocus(TRUE); - //preview->mIsCopyable=FALSE; - //preview->canSaveAs - } -} - // virtual void LLPanelAvatarFirstLife::processProperties(void* data, EAvatarProcessorType type) { @@ -313,29 +292,6 @@ void LLPanelAvatarFirstLife::processProperties(void* data, EAvatarProcessorType } } -void LLPanelAvatarSecondLife::onClickImage() -{ - const LLUUID& id = getChild("img")->getImageAssetID(); - llinfos << "LLPanelAvatarSecondLife::onClickImage" << llendl; - if (!LLPreview::show(id)) - { - // There isn't one, so make a new preview - S32 left, top; - gFloaterView->getNewFloaterPosition(&left, &top); - LLRect rect = gSavedSettings.getRect("PreviewTextureRect"); - rect.translate(left - rect.mLeft, rect.mTop - top); // Changed to avoid textures being sunken below the window border. - LLPreviewTexture* preview = new LLPreviewTexture("preview task texture", - rect, - std::string("Profile Picture: ") + getChild("dnname")->getText(), - id); - preview->setFocus(TRUE); - //preview->mIsCopyable=FALSE; - /*open_texture(LLUUID::null,//id, - std::string("Profile Picture: ") + getChild("dnname")->getText() + "and image id is " + id.asString() - , FALSE, id, TRUE);*/ - } -} - void LLPanelAvatarSecondLife::onDoubleClickGroup() { if (LLScrollListItem* item = getChild("groups")->getFirstSelected()) @@ -370,6 +326,8 @@ void LLPanelAvatarFirstLife::enableControls(BOOL self) // postBuild //----------------------------------------------------------------------------- +void show_picture(const LLUUID& id, const std::string& name); +static std::string profile_picture_title(const std::string& str) { return "Profile Picture: " + str; } static void show_partner_help() { LLNotificationsUtil::add("ClickPartnerHelpAvatar", LLSD(), LLSD(), boost::bind(LLPanelAvatarSecondLife::onClickPartnerHelpLoadURL, _1, _2)); } BOOL LLPanelAvatarSecondLife::postBuild() { @@ -410,10 +368,11 @@ BOOL LLPanelAvatarSecondLife::postBuild() getChild("Offer Teleport...")->setCommitCallback(boost::bind(static_cast(LLAvatarActions::offerTeleport), boost::bind(&LLPanelAvatar::getAvatarID, pa))); getChild("groups")->setDoubleClickCallback(boost::bind(&LLPanelAvatarSecondLife::onDoubleClickGroup,this)); - - getChild("bigimg")->setCommitCallback(boost::bind(&LLPanelAvatarSecondLife::onClickImage, this)); - - getChild("img")->setFallbackImageName("default_profile_picture.j2c"); + + LLTextureCtrl* ctrl = getChild("img"); + ctrl->setFallbackImageName("default_profile_picture.j2c"); + + getChild("bigimg")->setCommitCallback(boost::bind(boost::bind(show_picture, boost::bind(&LLTextureCtrl::getImageAssetID, ctrl), boost::bind(profile_picture_title, boost::bind(&LLView::getValue, getChild("dnname")))))); return TRUE; } @@ -423,9 +382,10 @@ BOOL LLPanelAvatarFirstLife::postBuild() BOOL own_avatar = (getPanelAvatar()->getAvatarID() == gAgent.getID() ); enableControls(own_avatar); - getChild("img")->setFallbackImageName("default_profile_picture.j2c"); + LLTextureCtrl* ctrl = getChild("img"); + ctrl->setFallbackImageName("default_profile_picture.j2c"); - getChild("flbigimg")->setCommitCallback(boost::bind(&LLPanelAvatarFirstLife::onClickImage, this)); + getChild("flbigimg")->setCommitCallback(boost::bind(boost::bind(boost::bind(show_picture, boost::bind(&LLTextureCtrl::getImageAssetID, ctrl), "First Life Picture")))); return TRUE; } diff --git a/indra/newview/llpanelavatar.h b/indra/newview/llpanelavatar.h index 89cf3b5dc..cc6e10b51 100644 --- a/indra/newview/llpanelavatar.h +++ b/indra/newview/llpanelavatar.h @@ -92,8 +92,6 @@ public: /*virtual*/ BOOL postBuild(); /*virtual*/ void processProperties(void* data, EAvatarProcessorType type); - void onClickImage(); - void enableControls(BOOL own_avatar); }; @@ -113,7 +111,6 @@ public: /*virtual*/ void onChange() {} /*virtual*/ void onChangeDetailed(const LLMute& mute); - void onClickImage(); void onClickFriends(); void onDoubleClickGroup(); static bool onClickPartnerHelpLoadURL(const LLSD& notification, const LLSD& response); diff --git a/indra/newview/llpanelpick.cpp b/indra/newview/llpanelpick.cpp index c2e2a2cb1..f949d482d 100644 --- a/indra/newview/llpanelpick.cpp +++ b/indra/newview/llpanelpick.cpp @@ -63,8 +63,10 @@ void show_picture(const LLUUID& id, const std::string& name) // Try to show and focus existing preview if (LLPreview::show(id)) return; // If there isn't one, make a new preview - LLPreview* preview = new LLPreviewTexture("preview texture", gSavedSettings.getRect("PreviewTextureRect"), name, id); - preview->setFocus(true); + S32 left, top; + gFloaterView->getNewFloaterPosition(&left, &top); + LLRect rect = gSavedSettings.getRect("PreviewTextureRect"); + (new LLPreviewTexture("preview texture", rect.translate(left - rect.mLeft, rect.mTop - top), name, id))->setFocus(true); } //static From 3620e537ab9922e44a5c2bb1c59f47fb8d66e5c0 Mon Sep 17 00:00:00 2001 From: Inusaito Sayori Date: Thu, 5 Feb 2015 00:37:35 -0500 Subject: [PATCH 12/28] Satisfy Issue 1827: Group Profile Texture Expansion Also fix buttons laying over Group Insignia text --- indra/newview/llpanelgroupgeneral.cpp | 2 ++ .../skins/default/xui/en-us/panel_group_general.xml | 11 ++++++----- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/indra/newview/llpanelgroupgeneral.cpp b/indra/newview/llpanelgroupgeneral.cpp index 48d74eacd..84c5997a1 100644 --- a/indra/newview/llpanelgroupgeneral.cpp +++ b/indra/newview/llpanelgroupgeneral.cpp @@ -128,6 +128,8 @@ BOOL LLPanelGroupGeneral::postBuild() { mInsignia->setCommitCallback(boost::bind(&LLPanelGroupGeneral::onCommitAny,this)); mDefaultIconID = mInsignia->getImageAssetID(); + void show_picture(const LLUUID& id, const std::string& name); + getChild("bigimg")->setCommitCallback(boost::bind(boost::bind(show_picture, boost::bind(&LLTextureCtrl::getImageAssetID, mInsignia), "Group Insignia"))); } mEditCharter = getChild("charter", recurse); diff --git a/indra/newview/skins/default/xui/en-us/panel_group_general.xml b/indra/newview/skins/default/xui/en-us/panel_group_general.xml index 9e51bb3fa..53f9a8cfd 100644 --- a/indra/newview/skins/default/xui/en-us/panel_group_general.xml +++ b/indra/newview/skins/default/xui/en-us/panel_group_general.xml @@ -53,8 +53,8 @@ Hover your mouse over the options for more help. mouse_opaque="true" name="insignia" tool_tip="Click to choose a picture" width="128" /> @@ -62,11 +62,12 @@ Hover your mouse over the options for more help.