From d8c95f844ffabeb0f21068ae6350a8f04c75275c Mon Sep 17 00:00:00 2001 From: Lirusaito Date: Sun, 20 Jan 2019 09:40:56 -0500 Subject: [PATCH] Add url menus to the text editor!! Hey there, Alpha User! This commit is riddled with complex words, but here's what matters to you: This adds the ability to right click a Name, URL, SLURL, or Object Name, or even an Email, and get some awesome options just like v3 gets! Buuuut, unlike V3, if there was something else you might want to do, we've still got you covered in the same menu!! Also make the text editor's default menu an xml Synced a lot from upstream Unlike Upstream, actually combine the base menu with the url menu if we have a selection Unlike Upstream and previously, don't create a new menu per text editor Unlike Upstream, don't create a separate FriendSignal and ObjectBlockedSignal per text editor we need it in!! Unlike Upstream, always show a Select All option --- indra/llui/llmenugl.h | 1 + indra/llui/lltexteditor.cpp | 237 ++++++++++++------ indra/llui/lltexteditor.h | 23 +- indra/newview/llviewermenu.cpp | 6 + .../skins/default/xui/de/menu_url_agent.xml | 9 + .../skins/default/xui/de/menu_url_email.xml | 5 + .../default/xui/de/menu_url_experience.xml | 4 + .../skins/default/xui/de/menu_url_group.xml | 6 + .../skins/default/xui/de/menu_url_http.xml | 7 + .../default/xui/de/menu_url_inventory.xml | 6 + .../skins/default/xui/de/menu_url_map.xml | 6 + .../default/xui/de/menu_url_objectim.xml | 10 + .../skins/default/xui/de/menu_url_parcel.xml | 6 + .../skins/default/xui/de/menu_url_slapp.xml | 5 + .../skins/default/xui/de/menu_url_slurl.xml | 7 + .../default/xui/de/menu_url_teleport.xml | 6 + .../default/xui/en-us/menu_texteditor.xml | 21 ++ .../default/xui/en-us/menu_url_agent.xml | 53 ++++ .../default/xui/en-us/menu_url_agent_mini.xml | 32 +++ .../default/xui/en-us/menu_url_email.xml | 25 ++ .../default/xui/en-us/menu_url_experience.xml | 16 ++ .../default/xui/en-us/menu_url_group.xml | 32 +++ .../skins/default/xui/en-us/menu_url_http.xml | 41 +++ .../default/xui/en-us/menu_url_inventory.xml | 32 +++ .../skins/default/xui/en-us/menu_url_map.xml | 34 +++ .../default/xui/en-us/menu_url_objectim.xml | 62 +++++ .../default/xui/en-us/menu_url_parcel.xml | 34 +++ .../default/xui/en-us/menu_url_slapp.xml | 25 ++ .../default/xui/en-us/menu_url_slurl.xml | 41 +++ .../default/xui/en-us/menu_url_teleport.xml | 34 +++ .../skins/default/xui/es/menu_url_agent.xml | 9 + .../skins/default/xui/es/menu_url_email.xml | 5 + .../default/xui/es/menu_url_experience.xml | 4 + .../skins/default/xui/es/menu_url_group.xml | 6 + .../skins/default/xui/es/menu_url_http.xml | 7 + .../default/xui/es/menu_url_inventory.xml | 6 + .../skins/default/xui/es/menu_url_map.xml | 6 + .../default/xui/es/menu_url_objectim.xml | 10 + .../skins/default/xui/es/menu_url_parcel.xml | 6 + .../skins/default/xui/es/menu_url_slapp.xml | 5 + .../skins/default/xui/es/menu_url_slurl.xml | 7 + .../default/xui/es/menu_url_teleport.xml | 6 + .../skins/default/xui/fr/menu_url_agent.xml | 9 + .../skins/default/xui/fr/menu_url_email.xml | 5 + .../default/xui/fr/menu_url_experience.xml | 4 + .../skins/default/xui/fr/menu_url_group.xml | 6 + .../skins/default/xui/fr/menu_url_http.xml | 7 + .../default/xui/fr/menu_url_inventory.xml | 6 + .../skins/default/xui/fr/menu_url_map.xml | 6 + .../default/xui/fr/menu_url_objectim.xml | 10 + .../skins/default/xui/fr/menu_url_parcel.xml | 6 + .../skins/default/xui/fr/menu_url_slapp.xml | 5 + .../skins/default/xui/fr/menu_url_slurl.xml | 7 + .../default/xui/fr/menu_url_teleport.xml | 6 + .../skins/default/xui/it/menu_url_agent.xml | 9 + .../skins/default/xui/it/menu_url_email.xml | 5 + .../default/xui/it/menu_url_experience.xml | 4 + .../skins/default/xui/it/menu_url_group.xml | 6 + .../skins/default/xui/it/menu_url_http.xml | 7 + .../default/xui/it/menu_url_inventory.xml | 6 + .../skins/default/xui/it/menu_url_map.xml | 6 + .../default/xui/it/menu_url_objectim.xml | 10 + .../skins/default/xui/it/menu_url_parcel.xml | 6 + .../skins/default/xui/it/menu_url_slapp.xml | 5 + .../skins/default/xui/it/menu_url_slurl.xml | 7 + .../default/xui/it/menu_url_teleport.xml | 6 + .../skins/default/xui/pt/menu_url_agent.xml | 9 + .../skins/default/xui/pt/menu_url_email.xml | 5 + .../default/xui/pt/menu_url_experience.xml | 4 + .../skins/default/xui/pt/menu_url_group.xml | 6 + .../skins/default/xui/pt/menu_url_http.xml | 7 + .../default/xui/pt/menu_url_inventory.xml | 6 + .../skins/default/xui/pt/menu_url_map.xml | 6 + .../default/xui/pt/menu_url_objectim.xml | 10 + .../skins/default/xui/pt/menu_url_parcel.xml | 6 + .../skins/default/xui/pt/menu_url_slapp.xml | 5 + .../skins/default/xui/pt/menu_url_slurl.xml | 7 + .../default/xui/pt/menu_url_teleport.xml | 6 + 78 files changed, 1055 insertions(+), 79 deletions(-) create mode 100644 indra/newview/skins/default/xui/de/menu_url_agent.xml create mode 100644 indra/newview/skins/default/xui/de/menu_url_email.xml create mode 100644 indra/newview/skins/default/xui/de/menu_url_experience.xml create mode 100644 indra/newview/skins/default/xui/de/menu_url_group.xml create mode 100644 indra/newview/skins/default/xui/de/menu_url_http.xml create mode 100644 indra/newview/skins/default/xui/de/menu_url_inventory.xml create mode 100644 indra/newview/skins/default/xui/de/menu_url_map.xml create mode 100644 indra/newview/skins/default/xui/de/menu_url_objectim.xml create mode 100644 indra/newview/skins/default/xui/de/menu_url_parcel.xml create mode 100644 indra/newview/skins/default/xui/de/menu_url_slapp.xml create mode 100644 indra/newview/skins/default/xui/de/menu_url_slurl.xml create mode 100644 indra/newview/skins/default/xui/de/menu_url_teleport.xml create mode 100644 indra/newview/skins/default/xui/en-us/menu_texteditor.xml create mode 100644 indra/newview/skins/default/xui/en-us/menu_url_agent.xml create mode 100644 indra/newview/skins/default/xui/en-us/menu_url_agent_mini.xml create mode 100644 indra/newview/skins/default/xui/en-us/menu_url_email.xml create mode 100644 indra/newview/skins/default/xui/en-us/menu_url_experience.xml create mode 100644 indra/newview/skins/default/xui/en-us/menu_url_group.xml create mode 100644 indra/newview/skins/default/xui/en-us/menu_url_http.xml create mode 100644 indra/newview/skins/default/xui/en-us/menu_url_inventory.xml create mode 100644 indra/newview/skins/default/xui/en-us/menu_url_map.xml create mode 100644 indra/newview/skins/default/xui/en-us/menu_url_objectim.xml create mode 100644 indra/newview/skins/default/xui/en-us/menu_url_parcel.xml create mode 100644 indra/newview/skins/default/xui/en-us/menu_url_slapp.xml create mode 100644 indra/newview/skins/default/xui/en-us/menu_url_slurl.xml create mode 100644 indra/newview/skins/default/xui/en-us/menu_url_teleport.xml create mode 100644 indra/newview/skins/default/xui/es/menu_url_agent.xml create mode 100644 indra/newview/skins/default/xui/es/menu_url_email.xml create mode 100644 indra/newview/skins/default/xui/es/menu_url_experience.xml create mode 100644 indra/newview/skins/default/xui/es/menu_url_group.xml create mode 100644 indra/newview/skins/default/xui/es/menu_url_http.xml create mode 100644 indra/newview/skins/default/xui/es/menu_url_inventory.xml create mode 100644 indra/newview/skins/default/xui/es/menu_url_map.xml create mode 100644 indra/newview/skins/default/xui/es/menu_url_objectim.xml create mode 100644 indra/newview/skins/default/xui/es/menu_url_parcel.xml create mode 100644 indra/newview/skins/default/xui/es/menu_url_slapp.xml create mode 100644 indra/newview/skins/default/xui/es/menu_url_slurl.xml create mode 100644 indra/newview/skins/default/xui/es/menu_url_teleport.xml create mode 100644 indra/newview/skins/default/xui/fr/menu_url_agent.xml create mode 100644 indra/newview/skins/default/xui/fr/menu_url_email.xml create mode 100644 indra/newview/skins/default/xui/fr/menu_url_experience.xml create mode 100644 indra/newview/skins/default/xui/fr/menu_url_group.xml create mode 100644 indra/newview/skins/default/xui/fr/menu_url_http.xml create mode 100644 indra/newview/skins/default/xui/fr/menu_url_inventory.xml create mode 100644 indra/newview/skins/default/xui/fr/menu_url_map.xml create mode 100644 indra/newview/skins/default/xui/fr/menu_url_objectim.xml create mode 100644 indra/newview/skins/default/xui/fr/menu_url_parcel.xml create mode 100644 indra/newview/skins/default/xui/fr/menu_url_slapp.xml create mode 100644 indra/newview/skins/default/xui/fr/menu_url_slurl.xml create mode 100644 indra/newview/skins/default/xui/fr/menu_url_teleport.xml create mode 100644 indra/newview/skins/default/xui/it/menu_url_agent.xml create mode 100644 indra/newview/skins/default/xui/it/menu_url_email.xml create mode 100644 indra/newview/skins/default/xui/it/menu_url_experience.xml create mode 100644 indra/newview/skins/default/xui/it/menu_url_group.xml create mode 100644 indra/newview/skins/default/xui/it/menu_url_http.xml create mode 100644 indra/newview/skins/default/xui/it/menu_url_inventory.xml create mode 100644 indra/newview/skins/default/xui/it/menu_url_map.xml create mode 100644 indra/newview/skins/default/xui/it/menu_url_objectim.xml create mode 100644 indra/newview/skins/default/xui/it/menu_url_parcel.xml create mode 100644 indra/newview/skins/default/xui/it/menu_url_slapp.xml create mode 100644 indra/newview/skins/default/xui/it/menu_url_slurl.xml create mode 100644 indra/newview/skins/default/xui/it/menu_url_teleport.xml create mode 100644 indra/newview/skins/default/xui/pt/menu_url_agent.xml create mode 100644 indra/newview/skins/default/xui/pt/menu_url_email.xml create mode 100644 indra/newview/skins/default/xui/pt/menu_url_experience.xml create mode 100644 indra/newview/skins/default/xui/pt/menu_url_group.xml create mode 100644 indra/newview/skins/default/xui/pt/menu_url_http.xml create mode 100644 indra/newview/skins/default/xui/pt/menu_url_inventory.xml create mode 100644 indra/newview/skins/default/xui/pt/menu_url_map.xml create mode 100644 indra/newview/skins/default/xui/pt/menu_url_objectim.xml create mode 100644 indra/newview/skins/default/xui/pt/menu_url_parcel.xml create mode 100644 indra/newview/skins/default/xui/pt/menu_url_slapp.xml create mode 100644 indra/newview/skins/default/xui/pt/menu_url_slurl.xml create mode 100644 indra/newview/skins/default/xui/pt/menu_url_teleport.xml 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 @@ + + + + + +