diff --git a/indra/llui/llmenugl.h b/indra/llui/llmenugl.h index 4c5811321..7c3626d35 100644 --- a/indra/llui/llmenugl.h +++ b/indra/llui/llmenugl.h @@ -580,6 +580,7 @@ public: void resetScrollPositionOnShow(bool reset_scroll_pos) { mResetScrollPositionOnShow = reset_scroll_pos; } bool isScrollPositionOnShowReset() { return mResetScrollPositionOnShow; } protected: + friend class LLTextEditor; void createSpilloverBranch(); void cleanupSpilloverBranch(); // Add the menu item to this menu. diff --git a/indra/llui/lltexteditor.cpp b/indra/llui/lltexteditor.cpp index 9da1a3fc4..0062eddc8 100644 --- a/indra/llui/lltexteditor.cpp +++ b/indra/llui/lltexteditor.cpp @@ -65,6 +65,7 @@ #include "lltextparser.h" #include "lldir.h" #include +#include "llmemberlistener.h" #include "llmenugl.h" #include "../newview/lgghunspell_wrapper.h" @@ -243,6 +244,8 @@ private: /////////////////////////////////////////////////////////////////// +LLTextEditor::is_friend_signal_t* LLTextEditor::mIsFriendSignal = nullptr; +LLTextEditor::is_blocked_signal_t* LLTextEditor::mIsObjectBlockedSignal = nullptr; LLTextEditor::LLTextEditor( const std::string& name, @@ -345,32 +348,6 @@ LLTextEditor::LLTextEditor( resetDirty(); // Update saved text state - // make the popup menu available - //LLMenuGL* menu = LLUICtrlFactory::getInstance()->buildMenu("menu_texteditor.xml", parent_view); - LLMenuGL* menu = new LLMenuGL("rclickmenu"); - /*if (!menu) - { - menu = new LLMenuGL(LLStringUtil::null); - }*/ - menu->addChild(new LLMenuItemCallGL("Cut", context_cut, NULL, this)); - menu->addChild(new LLMenuItemCallGL("Copy", context_copy, NULL, this)); - menu->addChild(new LLMenuItemCallGL("Copy Raw", [](void* data) { - if (LLTextEditor* line = static_cast(data)) line->copyRaw(); - }, NULL, this)); - menu->addChild(new LLMenuItemCallGL("Copy URL", [](void* data) { - if (std::string* str = static_cast(data)) - { - auto url = utf8str_to_wstring(*str); - gClipboard.copyFromSubstring(url, 0, url.size()); - } - }, NULL, this)); - menu->addChild(new LLMenuItemCallGL("Paste", context_paste, NULL, this)); - menu->addChild(new LLMenuItemCallGL("Delete", context_delete, NULL, this)); - menu->addChild(new LLMenuItemCallGL("Select All", context_selectall, NULL, this)); - menu->addSeparator(); - menu->setCanTearOff(FALSE); - menu->setVisible(FALSE); - mPopupMenuHandle = menu->getHandle(); setCommitCallback(boost::bind(&LLTextEditor::setControlValue, this, _2)); } @@ -387,19 +364,76 @@ LLTextEditor::~LLTextEditor() // Scrollbar is deleted by LLView std::for_each(mUndoStack.begin(), mUndoStack.end(), DeletePointer()); - //LLView::deleteViewByHandle(mPopupMenuHandle); + mSegments.clear(); + auto menu = mPopupMenuHandle.get(); + if (menu) + { + menu->die(); + mPopupMenuHandle.markDead(); + } + /* Singu Note: Static this, we'll use it wherever we can! + delete mIsFriendSignal; + delete mIsObjectBlockedSignal;*/ } -void LLTextEditor::context_cut(void* data) + +const std::string& LLTextEditor::getMenuSegmentUrl() const { - LLTextEditor* line = (LLTextEditor*)data; - if(line)line->cut(); + auto segment = getSegmentAtLocalPos(mLastContextMenuX, mLastContextMenuY); + auto style = segment->getStyle(); + return style ? style->getLinkHREF() : LLStringUtil::null; } -void LLTextEditor::context_copy(void* data) + +static LLTextEditor* get_focused_text_editor() { - LLTextEditor* line = (LLTextEditor*)data; - if(line)line->copy(); + auto* list = dynamic_cast(gFocusMgr.getKeyboardFocus()); + llassert(list); // This listener only applies to lists + return list; } +class ContextText : public LLMemberListener +{ + bool handleEvent(LLPointer, const LLSD& userdata) override + { + auto text = get_focused_text_editor(); + const auto& op = userdata.asStringRef(); + if (op == "Cut") text->cut(); + else if (op == "Copy") text->copy(); + else if (op == "CopyRaw") text->copyRaw(); + else if (op == "Paste") text->paste(); + else if (op == "Delete") text->doDelete(); + else if (op == "SelectAll") text->selectAll(); + return true; + } +}; + +class ContextUrl : public LLMemberListener +{ + static const std::string& get_focused_url() + { + return get_focused_text_editor()->getMenuSegmentUrl(); + } + bool handleEvent(LLPointer, const LLSD& userdata) override + { + const auto& url = get_focused_url(); + const auto& op = userdata.asStringRef(); + if (op == "Open") LLUrlAction::openURL(url); + else if (op == "OpenInternal") LLUrlAction::openURLInternal(url); + else if (op == "OpenExternal") LLUrlAction::openURLExternal(url); + else if (op == "Execute") LLUrlAction::executeSLURL(url, true); + else if (op == "Block") LLUrlAction::blockObject(url); + else if (op == "Unblock") LLUrlAction::unblockObject(url); + else if (op == "Teleport") LLUrlAction::teleportToLocation(url); + else if (op == "ShowProfile") LLUrlAction::showProfile(url); + else if (op == "AddFriend") LLUrlAction::addFriend(url); + else if (op == "RemoveFriend") LLUrlAction::removeFriend(url); + else if (op == "SendIM") LLUrlAction::sendIM(url); + else if (op == "ShowOnMap") LLUrlAction::showLocationOnMap(url); + else if (op == "CopyLabel") LLUrlAction::copyLabelToClipboard(url); + else if (op == "CopyUrl") LLUrlAction::copyURLToClipboard(url); + return true; + } +}; + void LLTextEditor::spell_correct(void* data) { @@ -477,21 +511,11 @@ void LLTextEditor::spell_add(void* data) } } - -void LLTextEditor::context_paste(void* data) +//static +void LLTextEditor::addMenuListeners() { - LLTextEditor* line = (LLTextEditor*)data; - if(line)line->paste(); -} -void LLTextEditor::context_delete(void* data) -{ - LLTextEditor* line = (LLTextEditor*)data; - if(line)line->doDelete(); -} -void LLTextEditor::context_selectall(void* data) -{ - LLTextEditor* line = (LLTextEditor*)data; - if(line)line->selectAll(); + (new ContextText)->registerListener(LLMenuGL::sMenuContainer, "Text"); + (new ContextUrl)->registerListener(LLMenuGL::sMenuContainer, "Text.Url"); } void LLTextEditor::setTrackColor( const LLColor4& color ) @@ -651,6 +675,56 @@ BOOL LLTextEditor::truncate() return did_truncate; } +LLMenuGL* LLTextEditor::createUrlContextMenu(S32 x, S32 y, const std::string &in_url) +{ + // work out the XUI menu file to use for this url + LLUrlMatch match; + std::string url = in_url; + if (!LLUrlRegistry::instance().findUrl(url, match)) + { + return nullptr; + } + + std::string xui_file = match.getMenuName(); + if (xui_file.empty()) + { + return nullptr; + } + + // create and return the context menu from the XUI file + llassert(LLMenuGL::sMenuContainer != NULL); + auto menu = LLUICtrlFactory::getInstance()->buildMenu(xui_file, LLMenuGL::sMenuContainer); + if (menu) + { + if (mIsFriendSignal) + { + bool isFriend = *(*mIsFriendSignal)(LLUUID(LLUrlAction::getUserID(url))); + LLView* addFriendButton = menu->findChild("add_friend"); + LLView* removeFriendButton = menu->findChild("remove_friend"); + + if (addFriendButton && removeFriendButton) + { + addFriendButton->setEnabled(!isFriend); + removeFriendButton->setEnabled(isFriend); + } + } + + if (mIsObjectBlockedSignal) + { + bool is_blocked = *(*mIsObjectBlockedSignal)(LLUUID(LLUrlAction::getObjectId(url)), LLUrlAction::getObjectName(url)); + LLView* blockButton = menu->findChild("block_object"); + LLView* unblockButton = menu->findChild("unblock_object"); + + if (blockButton && unblockButton) + { + blockButton->setVisible(!is_blocked); + unblockButton->setVisible(is_blocked); + } + } + } + return menu; +} + void LLTextEditor::setText(const LLStringExplicit &utf8str) { // clear out the existing text and segments @@ -1382,6 +1456,7 @@ BOOL LLTextEditor::handleMouseDown(S32 x, S32 y, MASK mask) } BOOL LLTextEditor::handleRightMouseDown( S32 x, S32 y, MASK mask ) { + setFocus(TRUE); //setCursorAtLocalPos( x, y, TRUE ); @@ -1392,43 +1467,56 @@ BOOL LLTextEditor::handleRightMouseDown( S32 x, S32 y, MASK mask ) LLMenuGL* menu = (LLMenuGL*)mPopupMenuHandle.get(); if (menu) { - for(int i = 0;i<(int)suggestionMenuItems.size();i++) + for (auto tempBind : suggestionMenuItems) { - SpellMenuBind * tempBind = suggestionMenuItems[i]; - if(tempBind) + if (tempBind) { menu->removeChild(tempBind->menuItem); tempBind->menuItem->die(); - //delete tempBind->menuItem; - //tempBind->menuItem = NULL; delete tempBind; } } suggestionMenuItems.clear(); + menu->die(); + } + + auto segment = getSegmentAtLocalPos(x, y); + const LLStyleSP style = segment ? segment->getStyle() : nullptr; + auto submenu = (style && style->isLink()) ? createUrlContextMenu(x, y, style->getLinkHREF()) : nullptr; + // Add url menu to base menu if we have a selection, otherwise make it the menu. + menu = (submenu && !hasSelection()) ? submenu : LLUICtrlFactory::getInstance()->buildMenu("menu_texteditor.xml", LLMenuGL::sMenuContainer); + mPopupMenuHandle = menu->getHandle(); + if (menu) + { + if (submenu && submenu != menu) + { + submenu->removeChild(submenu->getChild("Select All")); // There can be only one! + menu->appendMenu(submenu); + } // spell_check="true" in xui - menu->setItemVisible("Spelsep", !mReadOnly && mSpellCheckable); if (!mReadOnly && mSpellCheckable) { bool is_word_part = getWordBoundriesAt(pos, &wordStart, &wordLen); if (is_word_part) { const LLWString &text = mWText; - std::string selectedWord(std::string(text.begin(), text.end()).substr(wordStart,wordLen)); + std::string selectedWord(std::string(text.begin(), text.end()).substr(wordStart, wordLen)); if (!glggHunSpell->isSpelledRight(selectedWord)) { //misspelled word here, and you have just right clicked on it! std::vector suggs = glggHunSpell->getSuggestionList(selectedWord); - for (int i = 0; i<(int)suggs.size(); i++) + menu->addSeparator(); + for (auto word : suggs) { SpellMenuBind * tempStruct = new SpellMenuBind; tempStruct->origin = this; - tempStruct->word = suggs[i]; + tempStruct->word = word; tempStruct->wordPositionEnd = wordStart + wordLen; - tempStruct->wordPositionStart=wordStart; - tempStruct->wordY=y; + tempStruct->wordPositionStart = wordStart; + tempStruct->wordY = y; LLMenuItemCallGL * suggMenuItem = new LLMenuItemCallGL( tempStruct->word, spell_correct, NULL, tempStruct); tempStruct->menuItem = suggMenuItem; @@ -1439,8 +1527,8 @@ BOOL LLTextEditor::handleRightMouseDown( S32 x, S32 y, MASK mask ) tempStruct->origin = this; tempStruct->word = selectedWord; tempStruct->wordPositionEnd = wordStart + wordLen; - tempStruct->wordPositionStart=wordStart; - tempStruct->wordY=y; + tempStruct->wordPositionStart = wordStart; + tempStruct->wordY = y; LLMenuItemCallGL * suggMenuItem = new LLMenuItemCallGL( "Add Word", spell_add, NULL, tempStruct); tempStruct->menuItem = suggMenuItem; @@ -1467,17 +1555,6 @@ BOOL LLTextEditor::handleRightMouseDown( S32 x, S32 y, MASK mask ) menu->addChild(suggMenuItem); } - { - const LLStyleSP style = mHoverSegment ? mHoverSegment->getStyle() : nullptr; - auto copy_url = menu->findChild("Copy URL"); - if (mReadOnly && mParseHTML && style && !style->getLinkHREF().empty()) - { - copy_url->setVisible(true); - copy_url->setUserData((void*)&style->getLinkHREF()); // Yes, this can be invalidated, but they'll never click it then. - } - else copy_url->setVisible(false); - } - mLastContextMenuX = x; mLastContextMenuY = y; menu->buildDrawLabels(); @@ -4975,6 +5052,24 @@ BOOL LLTextEditor::exportBuffer(std::string &buffer ) return TRUE; } +boost::signals2::connection LLTextEditor::setIsFriendCallback(const is_friend_signal_t::slot_type& cb) +{ + if (!mIsFriendSignal) + { + mIsFriendSignal = new is_friend_signal_t(); + } + return mIsFriendSignal->connect(cb); +} + +boost::signals2::connection LLTextEditor::setIsObjectBlockedCallback(const is_blocked_signal_t::slot_type& cb) +{ + if (!mIsObjectBlockedSignal) + { + mIsObjectBlockedSignal = new is_blocked_signal_t(); + } + return mIsObjectBlockedSignal->connect(cb); +} + ////////////////////////////////////////////////////////////////////////// // LLTextSegment diff --git a/indra/llui/lltexteditor.h b/indra/llui/lltexteditor.h index a0755f067..66df57ad0 100644 --- a/indra/llui/lltexteditor.h +++ b/indra/llui/lltexteditor.h @@ -72,8 +72,15 @@ public: virtual ~LLTextEditor(); - typedef boost::signals2::signal keystroke_signal_t; + const std::string& getMenuSegmentUrl() const; + typedef boost::signals2::signal keystroke_signal_t; + typedef boost::signals2::signal is_friend_signal_t; + typedef boost::signals2::signal is_blocked_signal_t; + + static boost::signals2::connection setIsFriendCallback(const is_friend_signal_t::slot_type& cb); + static boost::signals2::connection setIsObjectBlockedCallback(const is_blocked_signal_t::slot_type& cb); + static void addMenuListeners(); void setKeystrokeCallback(const keystroke_signal_t::slot_type& callback); virtual LLXMLNodePtr getXML(bool save_children = true) const; @@ -152,12 +159,6 @@ public: virtual BOOL canSelectAll() const; virtual void deselect(); virtual BOOL canDeselect() const; - static void context_cut(void* data); - - static void context_copy(void* data); - static void context_paste(void* data); - static void context_delete(void* data); - static void context_selectall(void* data); static void spell_correct(void* data); static void spell_add(void* data); static void spell_show(void* data); @@ -270,7 +271,9 @@ public: LLSD getValue() const; const std::string& getText() const; - + + LLMenuGL* createUrlContextMenu(S32 x, S32 y, const std::string &url); // create a popup context menu for the given Url + // Non-undoable void setText(const LLStringExplicit &utf8str); void setWText(const LLWString &wtext); @@ -468,6 +471,10 @@ protected: void (*mOnScrollEndCallback)(void*); void *mOnScrollEndData; + // Used to check if user with given ID is avatar's friend + static is_friend_signal_t* mIsFriendSignal; + static is_blocked_signal_t* mIsObjectBlockedSignal; + LLWString mPreeditWString; LLWString mPreeditOverwrittenWString; std::vector mPreeditPositions; diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index e23353a47..aee2075ed 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -127,6 +127,7 @@ #include "llfloaternotificationsconsole.h" // +#include "lltexteditor.h" // Initialize the text editor menu listeners in here #include "llfloatermessagelog.h" #include "shfloatermediaticker.h" #include "llpacketring.h" @@ -9604,6 +9605,11 @@ void initialize_menus() add_radar_listeners(); + // Text Editor menus + LLTextEditor::setIsObjectBlockedCallback(boost::bind(&LLMuteList::isMuted, LLMuteList::getInstance(), _1, _2, 0)); + LLTextEditor::setIsFriendCallback(LLAvatarActions::isFriend); + LLTextEditor::addMenuListeners(); + class LLViewBuildMode : public view_listener_t { bool handleEvent(LLPointer event, const LLSD& userdata) diff --git a/indra/newview/skins/default/xui/de/menu_url_agent.xml b/indra/newview/skins/default/xui/de/menu_url_agent.xml new file mode 100644 index 000000000..ddb072ba8 --- /dev/null +++ b/indra/newview/skins/default/xui/de/menu_url_agent.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/indra/newview/skins/default/xui/de/menu_url_email.xml b/indra/newview/skins/default/xui/de/menu_url_email.xml new file mode 100644 index 000000000..3d8e61bc8 --- /dev/null +++ b/indra/newview/skins/default/xui/de/menu_url_email.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/indra/newview/skins/default/xui/de/menu_url_experience.xml b/indra/newview/skins/default/xui/de/menu_url_experience.xml new file mode 100644 index 000000000..45c118cb6 --- /dev/null +++ b/indra/newview/skins/default/xui/de/menu_url_experience.xml @@ -0,0 +1,4 @@ + + + + diff --git a/indra/newview/skins/default/xui/de/menu_url_group.xml b/indra/newview/skins/default/xui/de/menu_url_group.xml new file mode 100644 index 000000000..6bd86414b --- /dev/null +++ b/indra/newview/skins/default/xui/de/menu_url_group.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/indra/newview/skins/default/xui/de/menu_url_http.xml b/indra/newview/skins/default/xui/de/menu_url_http.xml new file mode 100644 index 000000000..30eb1668a --- /dev/null +++ b/indra/newview/skins/default/xui/de/menu_url_http.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/indra/newview/skins/default/xui/de/menu_url_inventory.xml b/indra/newview/skins/default/xui/de/menu_url_inventory.xml new file mode 100644 index 000000000..dc069df02 --- /dev/null +++ b/indra/newview/skins/default/xui/de/menu_url_inventory.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/indra/newview/skins/default/xui/de/menu_url_map.xml b/indra/newview/skins/default/xui/de/menu_url_map.xml new file mode 100644 index 000000000..2f6ffcd45 --- /dev/null +++ b/indra/newview/skins/default/xui/de/menu_url_map.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/indra/newview/skins/default/xui/de/menu_url_objectim.xml b/indra/newview/skins/default/xui/de/menu_url_objectim.xml new file mode 100644 index 000000000..95fe97407 --- /dev/null +++ b/indra/newview/skins/default/xui/de/menu_url_objectim.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/indra/newview/skins/default/xui/de/menu_url_parcel.xml b/indra/newview/skins/default/xui/de/menu_url_parcel.xml new file mode 100644 index 000000000..9169bca24 --- /dev/null +++ b/indra/newview/skins/default/xui/de/menu_url_parcel.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/indra/newview/skins/default/xui/de/menu_url_slapp.xml b/indra/newview/skins/default/xui/de/menu_url_slapp.xml new file mode 100644 index 000000000..72e916b90 --- /dev/null +++ b/indra/newview/skins/default/xui/de/menu_url_slapp.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/indra/newview/skins/default/xui/de/menu_url_slurl.xml b/indra/newview/skins/default/xui/de/menu_url_slurl.xml new file mode 100644 index 000000000..5d48230eb --- /dev/null +++ b/indra/newview/skins/default/xui/de/menu_url_slurl.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/indra/newview/skins/default/xui/de/menu_url_teleport.xml b/indra/newview/skins/default/xui/de/menu_url_teleport.xml new file mode 100644 index 000000000..4cc1ecc70 --- /dev/null +++ b/indra/newview/skins/default/xui/de/menu_url_teleport.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/indra/newview/skins/default/xui/en-us/menu_texteditor.xml b/indra/newview/skins/default/xui/en-us/menu_texteditor.xml new file mode 100644 index 000000000..425eef2d4 --- /dev/null +++ b/indra/newview/skins/default/xui/en-us/menu_texteditor.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/indra/newview/skins/default/xui/en-us/menu_url_agent.xml b/indra/newview/skins/default/xui/en-us/menu_url_agent.xml new file mode 100644 index 000000000..96f771d43 --- /dev/null +++ b/indra/newview/skins/default/xui/en-us/menu_url_agent.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/indra/newview/skins/default/xui/en-us/menu_url_agent_mini.xml b/indra/newview/skins/default/xui/en-us/menu_url_agent_mini.xml new file mode 100644 index 000000000..5a0b4f9ce --- /dev/null +++ b/indra/newview/skins/default/xui/en-us/menu_url_agent_mini.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + diff --git a/indra/newview/skins/default/xui/en-us/menu_url_email.xml b/indra/newview/skins/default/xui/en-us/menu_url_email.xml new file mode 100644 index 000000000..cfd91a65d --- /dev/null +++ b/indra/newview/skins/default/xui/en-us/menu_url_email.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + diff --git a/indra/newview/skins/default/xui/en-us/menu_url_experience.xml b/indra/newview/skins/default/xui/en-us/menu_url_experience.xml new file mode 100644 index 000000000..76d91ca83 --- /dev/null +++ b/indra/newview/skins/default/xui/en-us/menu_url_experience.xml @@ -0,0 +1,16 @@ + + + + + + + + + diff --git a/indra/newview/skins/default/xui/en-us/menu_url_group.xml b/indra/newview/skins/default/xui/en-us/menu_url_group.xml new file mode 100644 index 000000000..1abc9ecb3 --- /dev/null +++ b/indra/newview/skins/default/xui/en-us/menu_url_group.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + diff --git a/indra/newview/skins/default/xui/en-us/menu_url_http.xml b/indra/newview/skins/default/xui/en-us/menu_url_http.xml new file mode 100644 index 000000000..ed2d71435 --- /dev/null +++ b/indra/newview/skins/default/xui/en-us/menu_url_http.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/indra/newview/skins/default/xui/en-us/menu_url_inventory.xml b/indra/newview/skins/default/xui/en-us/menu_url_inventory.xml new file mode 100644 index 000000000..d74067a71 --- /dev/null +++ b/indra/newview/skins/default/xui/en-us/menu_url_inventory.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + diff --git a/indra/newview/skins/default/xui/en-us/menu_url_map.xml b/indra/newview/skins/default/xui/en-us/menu_url_map.xml new file mode 100644 index 000000000..b7314726f --- /dev/null +++ b/indra/newview/skins/default/xui/en-us/menu_url_map.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + diff --git a/indra/newview/skins/default/xui/en-us/menu_url_objectim.xml b/indra/newview/skins/default/xui/en-us/menu_url_objectim.xml new file mode 100644 index 000000000..1b4317ff9 --- /dev/null +++ b/indra/newview/skins/default/xui/en-us/menu_url_objectim.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/indra/newview/skins/default/xui/en-us/menu_url_parcel.xml b/indra/newview/skins/default/xui/en-us/menu_url_parcel.xml new file mode 100644 index 000000000..f727631a2 --- /dev/null +++ b/indra/newview/skins/default/xui/en-us/menu_url_parcel.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + diff --git a/indra/newview/skins/default/xui/en-us/menu_url_slapp.xml b/indra/newview/skins/default/xui/en-us/menu_url_slapp.xml new file mode 100644 index 000000000..fd5241947 --- /dev/null +++ b/indra/newview/skins/default/xui/en-us/menu_url_slapp.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + diff --git a/indra/newview/skins/default/xui/en-us/menu_url_slurl.xml b/indra/newview/skins/default/xui/en-us/menu_url_slurl.xml new file mode 100644 index 000000000..0b0f5fd92 --- /dev/null +++ b/indra/newview/skins/default/xui/en-us/menu_url_slurl.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/indra/newview/skins/default/xui/en-us/menu_url_teleport.xml b/indra/newview/skins/default/xui/en-us/menu_url_teleport.xml new file mode 100644 index 000000000..1f51e0ba8 --- /dev/null +++ b/indra/newview/skins/default/xui/en-us/menu_url_teleport.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + diff --git a/indra/newview/skins/default/xui/es/menu_url_agent.xml b/indra/newview/skins/default/xui/es/menu_url_agent.xml new file mode 100644 index 000000000..610d65465 --- /dev/null +++ b/indra/newview/skins/default/xui/es/menu_url_agent.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/indra/newview/skins/default/xui/es/menu_url_email.xml b/indra/newview/skins/default/xui/es/menu_url_email.xml new file mode 100644 index 000000000..fa9c74077 --- /dev/null +++ b/indra/newview/skins/default/xui/es/menu_url_email.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/indra/newview/skins/default/xui/es/menu_url_experience.xml b/indra/newview/skins/default/xui/es/menu_url_experience.xml new file mode 100644 index 000000000..a18cb0e8e --- /dev/null +++ b/indra/newview/skins/default/xui/es/menu_url_experience.xml @@ -0,0 +1,4 @@ + + + + diff --git a/indra/newview/skins/default/xui/es/menu_url_group.xml b/indra/newview/skins/default/xui/es/menu_url_group.xml new file mode 100644 index 000000000..79374b973 --- /dev/null +++ b/indra/newview/skins/default/xui/es/menu_url_group.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/indra/newview/skins/default/xui/es/menu_url_http.xml b/indra/newview/skins/default/xui/es/menu_url_http.xml new file mode 100644 index 000000000..585c059ff --- /dev/null +++ b/indra/newview/skins/default/xui/es/menu_url_http.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/indra/newview/skins/default/xui/es/menu_url_inventory.xml b/indra/newview/skins/default/xui/es/menu_url_inventory.xml new file mode 100644 index 000000000..13a8711c7 --- /dev/null +++ b/indra/newview/skins/default/xui/es/menu_url_inventory.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/indra/newview/skins/default/xui/es/menu_url_map.xml b/indra/newview/skins/default/xui/es/menu_url_map.xml new file mode 100644 index 000000000..f96a0c717 --- /dev/null +++ b/indra/newview/skins/default/xui/es/menu_url_map.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/indra/newview/skins/default/xui/es/menu_url_objectim.xml b/indra/newview/skins/default/xui/es/menu_url_objectim.xml new file mode 100644 index 000000000..51803e93c --- /dev/null +++ b/indra/newview/skins/default/xui/es/menu_url_objectim.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/indra/newview/skins/default/xui/es/menu_url_parcel.xml b/indra/newview/skins/default/xui/es/menu_url_parcel.xml new file mode 100644 index 000000000..9e789ef8e --- /dev/null +++ b/indra/newview/skins/default/xui/es/menu_url_parcel.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/indra/newview/skins/default/xui/es/menu_url_slapp.xml b/indra/newview/skins/default/xui/es/menu_url_slapp.xml new file mode 100644 index 000000000..7147dcd3c --- /dev/null +++ b/indra/newview/skins/default/xui/es/menu_url_slapp.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/indra/newview/skins/default/xui/es/menu_url_slurl.xml b/indra/newview/skins/default/xui/es/menu_url_slurl.xml new file mode 100644 index 000000000..4ab47c2f6 --- /dev/null +++ b/indra/newview/skins/default/xui/es/menu_url_slurl.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/indra/newview/skins/default/xui/es/menu_url_teleport.xml b/indra/newview/skins/default/xui/es/menu_url_teleport.xml new file mode 100644 index 000000000..8f86a91be --- /dev/null +++ b/indra/newview/skins/default/xui/es/menu_url_teleport.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/indra/newview/skins/default/xui/fr/menu_url_agent.xml b/indra/newview/skins/default/xui/fr/menu_url_agent.xml new file mode 100644 index 000000000..2c7443c6c --- /dev/null +++ b/indra/newview/skins/default/xui/fr/menu_url_agent.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/indra/newview/skins/default/xui/fr/menu_url_email.xml b/indra/newview/skins/default/xui/fr/menu_url_email.xml new file mode 100644 index 000000000..a86128bc0 --- /dev/null +++ b/indra/newview/skins/default/xui/fr/menu_url_email.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/indra/newview/skins/default/xui/fr/menu_url_experience.xml b/indra/newview/skins/default/xui/fr/menu_url_experience.xml new file mode 100644 index 000000000..90c0ce676 --- /dev/null +++ b/indra/newview/skins/default/xui/fr/menu_url_experience.xml @@ -0,0 +1,4 @@ + + + + diff --git a/indra/newview/skins/default/xui/fr/menu_url_group.xml b/indra/newview/skins/default/xui/fr/menu_url_group.xml new file mode 100644 index 000000000..de90c3ff7 --- /dev/null +++ b/indra/newview/skins/default/xui/fr/menu_url_group.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/indra/newview/skins/default/xui/fr/menu_url_http.xml b/indra/newview/skins/default/xui/fr/menu_url_http.xml new file mode 100644 index 000000000..5e9635299 --- /dev/null +++ b/indra/newview/skins/default/xui/fr/menu_url_http.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/indra/newview/skins/default/xui/fr/menu_url_inventory.xml b/indra/newview/skins/default/xui/fr/menu_url_inventory.xml new file mode 100644 index 000000000..8ab88b4be --- /dev/null +++ b/indra/newview/skins/default/xui/fr/menu_url_inventory.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/indra/newview/skins/default/xui/fr/menu_url_map.xml b/indra/newview/skins/default/xui/fr/menu_url_map.xml new file mode 100644 index 000000000..67e6986f5 --- /dev/null +++ b/indra/newview/skins/default/xui/fr/menu_url_map.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/indra/newview/skins/default/xui/fr/menu_url_objectim.xml b/indra/newview/skins/default/xui/fr/menu_url_objectim.xml new file mode 100644 index 000000000..95310dd1f --- /dev/null +++ b/indra/newview/skins/default/xui/fr/menu_url_objectim.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/indra/newview/skins/default/xui/fr/menu_url_parcel.xml b/indra/newview/skins/default/xui/fr/menu_url_parcel.xml new file mode 100644 index 000000000..07b0eeca4 --- /dev/null +++ b/indra/newview/skins/default/xui/fr/menu_url_parcel.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/indra/newview/skins/default/xui/fr/menu_url_slapp.xml b/indra/newview/skins/default/xui/fr/menu_url_slapp.xml new file mode 100644 index 000000000..f4b7e212c --- /dev/null +++ b/indra/newview/skins/default/xui/fr/menu_url_slapp.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/indra/newview/skins/default/xui/fr/menu_url_slurl.xml b/indra/newview/skins/default/xui/fr/menu_url_slurl.xml new file mode 100644 index 000000000..e44943cf1 --- /dev/null +++ b/indra/newview/skins/default/xui/fr/menu_url_slurl.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/indra/newview/skins/default/xui/fr/menu_url_teleport.xml b/indra/newview/skins/default/xui/fr/menu_url_teleport.xml new file mode 100644 index 000000000..a5075a274 --- /dev/null +++ b/indra/newview/skins/default/xui/fr/menu_url_teleport.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/indra/newview/skins/default/xui/it/menu_url_agent.xml b/indra/newview/skins/default/xui/it/menu_url_agent.xml new file mode 100644 index 000000000..e5c20fb9e --- /dev/null +++ b/indra/newview/skins/default/xui/it/menu_url_agent.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/indra/newview/skins/default/xui/it/menu_url_email.xml b/indra/newview/skins/default/xui/it/menu_url_email.xml new file mode 100644 index 000000000..a8ef2cde9 --- /dev/null +++ b/indra/newview/skins/default/xui/it/menu_url_email.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/indra/newview/skins/default/xui/it/menu_url_experience.xml b/indra/newview/skins/default/xui/it/menu_url_experience.xml new file mode 100644 index 000000000..d6ea3f352 --- /dev/null +++ b/indra/newview/skins/default/xui/it/menu_url_experience.xml @@ -0,0 +1,4 @@ + + + + diff --git a/indra/newview/skins/default/xui/it/menu_url_group.xml b/indra/newview/skins/default/xui/it/menu_url_group.xml new file mode 100644 index 000000000..d9a792ebd --- /dev/null +++ b/indra/newview/skins/default/xui/it/menu_url_group.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/indra/newview/skins/default/xui/it/menu_url_http.xml b/indra/newview/skins/default/xui/it/menu_url_http.xml new file mode 100644 index 000000000..e0153d916 --- /dev/null +++ b/indra/newview/skins/default/xui/it/menu_url_http.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/indra/newview/skins/default/xui/it/menu_url_inventory.xml b/indra/newview/skins/default/xui/it/menu_url_inventory.xml new file mode 100644 index 000000000..a45a6bbc1 --- /dev/null +++ b/indra/newview/skins/default/xui/it/menu_url_inventory.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/indra/newview/skins/default/xui/it/menu_url_map.xml b/indra/newview/skins/default/xui/it/menu_url_map.xml new file mode 100644 index 000000000..cb7935b3e --- /dev/null +++ b/indra/newview/skins/default/xui/it/menu_url_map.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/indra/newview/skins/default/xui/it/menu_url_objectim.xml b/indra/newview/skins/default/xui/it/menu_url_objectim.xml new file mode 100644 index 000000000..67bc34a5d --- /dev/null +++ b/indra/newview/skins/default/xui/it/menu_url_objectim.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/indra/newview/skins/default/xui/it/menu_url_parcel.xml b/indra/newview/skins/default/xui/it/menu_url_parcel.xml new file mode 100644 index 000000000..a032c3358 --- /dev/null +++ b/indra/newview/skins/default/xui/it/menu_url_parcel.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/indra/newview/skins/default/xui/it/menu_url_slapp.xml b/indra/newview/skins/default/xui/it/menu_url_slapp.xml new file mode 100644 index 000000000..b368aa914 --- /dev/null +++ b/indra/newview/skins/default/xui/it/menu_url_slapp.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/indra/newview/skins/default/xui/it/menu_url_slurl.xml b/indra/newview/skins/default/xui/it/menu_url_slurl.xml new file mode 100644 index 000000000..355c7dbed --- /dev/null +++ b/indra/newview/skins/default/xui/it/menu_url_slurl.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/indra/newview/skins/default/xui/it/menu_url_teleport.xml b/indra/newview/skins/default/xui/it/menu_url_teleport.xml new file mode 100644 index 000000000..c129e61f2 --- /dev/null +++ b/indra/newview/skins/default/xui/it/menu_url_teleport.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/indra/newview/skins/default/xui/pt/menu_url_agent.xml b/indra/newview/skins/default/xui/pt/menu_url_agent.xml new file mode 100644 index 000000000..102df18b2 --- /dev/null +++ b/indra/newview/skins/default/xui/pt/menu_url_agent.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/indra/newview/skins/default/xui/pt/menu_url_email.xml b/indra/newview/skins/default/xui/pt/menu_url_email.xml new file mode 100644 index 000000000..1dbb5cd99 --- /dev/null +++ b/indra/newview/skins/default/xui/pt/menu_url_email.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/indra/newview/skins/default/xui/pt/menu_url_experience.xml b/indra/newview/skins/default/xui/pt/menu_url_experience.xml new file mode 100644 index 000000000..af7634b0d --- /dev/null +++ b/indra/newview/skins/default/xui/pt/menu_url_experience.xml @@ -0,0 +1,4 @@ + + + + diff --git a/indra/newview/skins/default/xui/pt/menu_url_group.xml b/indra/newview/skins/default/xui/pt/menu_url_group.xml new file mode 100644 index 000000000..5b67a69c9 --- /dev/null +++ b/indra/newview/skins/default/xui/pt/menu_url_group.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/indra/newview/skins/default/xui/pt/menu_url_http.xml b/indra/newview/skins/default/xui/pt/menu_url_http.xml new file mode 100644 index 000000000..e53a2572b --- /dev/null +++ b/indra/newview/skins/default/xui/pt/menu_url_http.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/indra/newview/skins/default/xui/pt/menu_url_inventory.xml b/indra/newview/skins/default/xui/pt/menu_url_inventory.xml new file mode 100644 index 000000000..45c14355d --- /dev/null +++ b/indra/newview/skins/default/xui/pt/menu_url_inventory.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/indra/newview/skins/default/xui/pt/menu_url_map.xml b/indra/newview/skins/default/xui/pt/menu_url_map.xml new file mode 100644 index 000000000..ba114ccca --- /dev/null +++ b/indra/newview/skins/default/xui/pt/menu_url_map.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/indra/newview/skins/default/xui/pt/menu_url_objectim.xml b/indra/newview/skins/default/xui/pt/menu_url_objectim.xml new file mode 100644 index 000000000..0ebb358b1 --- /dev/null +++ b/indra/newview/skins/default/xui/pt/menu_url_objectim.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/indra/newview/skins/default/xui/pt/menu_url_parcel.xml b/indra/newview/skins/default/xui/pt/menu_url_parcel.xml new file mode 100644 index 000000000..6cc668bfd --- /dev/null +++ b/indra/newview/skins/default/xui/pt/menu_url_parcel.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/indra/newview/skins/default/xui/pt/menu_url_slapp.xml b/indra/newview/skins/default/xui/pt/menu_url_slapp.xml new file mode 100644 index 000000000..d0784149a --- /dev/null +++ b/indra/newview/skins/default/xui/pt/menu_url_slapp.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/indra/newview/skins/default/xui/pt/menu_url_slurl.xml b/indra/newview/skins/default/xui/pt/menu_url_slurl.xml new file mode 100644 index 000000000..7216ccf0b --- /dev/null +++ b/indra/newview/skins/default/xui/pt/menu_url_slurl.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/indra/newview/skins/default/xui/pt/menu_url_teleport.xml b/indra/newview/skins/default/xui/pt/menu_url_teleport.xml new file mode 100644 index 000000000..f00742564 --- /dev/null +++ b/indra/newview/skins/default/xui/pt/menu_url_teleport.xml @@ -0,0 +1,6 @@ + + + + + +