diff options
20 files changed, 84 insertions, 72 deletions
diff --git a/indra/llui/llurlentry.cpp b/indra/llui/llurlentry.cpp index d7666ca4c3..20d3e679e6 100644 --- a/indra/llui/llurlentry.cpp +++ b/indra/llui/llurlentry.cpp @@ -745,7 +745,7 @@ std::string LLUrlEntryWorldMap::getLabel(const std::string &url, const LLUrlLabe } const std::string label = LLTrans::getString("SLurlLabelShowOnMap"); - std::string location = path_array[2]; + std::string location = unescapeUrl(path_array[2]); std::string x = (path_parts > 3) ? path_array[3] : "128"; std::string y = (path_parts > 4) ? path_array[4] : "128"; std::string z = (path_parts > 5) ? path_array[5] : "0"; diff --git a/indra/llui/llurlregistry.cpp b/indra/llui/llurlregistry.cpp index 7e09a5a919..0a70aa586a 100644 --- a/indra/llui/llurlregistry.cpp +++ b/indra/llui/llurlregistry.cpp @@ -53,6 +53,7 @@ LLUrlRegistry::LLUrlRegistry() registerUrl(new LLUrlEntryParcel()); registerUrl(new LLUrlEntryTeleport()); registerUrl(new LLUrlEntryWorldMap()); + registerUrl(new LLUrlEntryObjectIM()); registerUrl(new LLUrlEntryPlace()); registerUrl(new LLUrlEntryInventory()); registerUrl(new LLUrlEntryObjectIM()); diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 442cd5d31e..5993eb46fa 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -8184,13 +8184,13 @@ <key>NearbyPeopleSortOrder</key> <map> <key>Comment</key> - <string>Specifies sort order for nearby people (0 = by name, 2 = by most recent)</string> + <string>Specifies sort order for nearby people (0 = by name, 3 = by distance, 4 = by most recent)</string> <key>Persist</key> <integer>1</integer> <key>Type</key> <string>U32</string> <key>Value</key> - <integer>2</integer> + <integer>4</integer> </map> <key>RecentPeopleSortOrder</key> <map> diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp index 25d3f971b5..256796aa80 100644 --- a/indra/newview/llfloaterland.cpp +++ b/indra/newview/llfloaterland.cpp @@ -90,6 +90,7 @@ static std::string MATURITY = "[MATURITY]"; // constants used in callbacks below - syntactic sugar. static const BOOL BUY_GROUP_LAND = TRUE; static const BOOL BUY_PERSONAL_LAND = FALSE; +LLPointer<LLParcelSelection> LLPanelLandGeneral::sSelectionForBuyPass = NULL; // Statics LLParcelSelectionObserver* LLFloaterLand::sObserver = NULL; @@ -974,6 +975,8 @@ void LLPanelLandGeneral::onClickBuyPass(void* data) args["PARCEL_NAME"] = parcel_name; args["TIME"] = time; + // creating pointer on selection to avoid deselection of parcel until we are done with buying pass (EXT-6464) + sSelectionForBuyPass = LLViewerParcelMgr::getInstance()->getParcelSelection(); LLNotificationsUtil::add("LandBuyPass", args, LLSD(), cbBuyPass); } @@ -1005,6 +1008,8 @@ bool LLPanelLandGeneral::cbBuyPass(const LLSD& notification, const LLSD& respons // User clicked OK LLViewerParcelMgr::getInstance()->buyPass(); } + // we are done with buying pass, additional selection is no longer needed + sSelectionForBuyPass = NULL; return false; } diff --git a/indra/newview/llfloaterland.h b/indra/newview/llfloaterland.h index fe80766a74..0a743e5215 100644 --- a/indra/newview/llfloaterland.h +++ b/indra/newview/llfloaterland.h @@ -234,6 +234,11 @@ protected: LLSafeHandle<LLParcelSelection>& mParcel; + // This pointer is needed to avoid parcel deselection until buying pass is completed or canceled. + // Deselection happened because of zero references to parcel selection, which took place when + // "Buy Pass" was called from popup menu(EXT-6464) + static LLPointer<LLParcelSelection> sSelectionForBuyPass; + static LLHandle<LLFloater> sBuyPassDialogHandle; }; diff --git a/indra/newview/llfloaterworldmap.cpp b/indra/newview/llfloaterworldmap.cpp index 896c410e32..152360a96e 100644 --- a/indra/newview/llfloaterworldmap.cpp +++ b/indra/newview/llfloaterworldmap.cpp @@ -125,7 +125,7 @@ public: } // support the secondlife:///app/worldmap/{LOCATION}/{COORDS} SLapp - const std::string region_name = params[0].asString(); + const std::string region_name = LLURI::unescape(params[0].asString()); S32 x = (params.size() > 1) ? params[1].asInteger() : 128; S32 y = (params.size() > 2) ? params[2].asInteger() : 128; S32 z = (params.size() > 3) ? params[3].asInteger() : 0; diff --git a/indra/newview/llpaneloutfitedit.cpp b/indra/newview/llpaneloutfitedit.cpp index 2b25c544e3..1ab2100a41 100644 --- a/indra/newview/llpaneloutfitedit.cpp +++ b/indra/newview/llpaneloutfitedit.cpp @@ -113,9 +113,9 @@ private: LLPanelOutfitEdit::LLPanelOutfitEdit() -: LLPanel(), mLookID(), mFetchLook(NULL), mSearchFilter(NULL), +: LLPanel(), mCurrentOutfitID(), mFetchLook(NULL), mSearchFilter(NULL), mLookContents(NULL), mInventoryItemsPanel(NULL), mAddToLookBtn(NULL), -mRemoveFromLookBtn(NULL), mLookObserver(NULL), mNumItemsInLook(0) +mRemoveFromLookBtn(NULL), mLookObserver(NULL) { mSavedFolderState = new LLSaveFolderState(); mSavedFolderState->setApply(FALSE); @@ -157,7 +157,7 @@ BOOL LLPanelOutfitEdit::postBuild() { // gInventory.isInventoryUsable() no longer needs to be tested per Richard's fix for race conditions between inventory and panels - mLookName = getChild<LLTextBox>("curr_look_name"); + mCurrentOutfitName = getChild<LLTextBox>("curr_outfit_name"); childSetCommitCallback("add_btn", boost::bind(&LLPanelOutfitEdit::showAddWearablesPanel, this), NULL); @@ -206,7 +206,7 @@ BOOL LLPanelOutfitEdit::postBuild() mLookContents = getChild<LLScrollListCtrl>("look_items_list"); mLookContents->sortByColumn("look_item_sort", TRUE); mLookContents->setCommitCallback(boost::bind(&LLPanelOutfitEdit::onLookItemSelectionChange, this)); - + /* LLButton::Params remove_params; remove_params.name("remove_from_look"); @@ -220,12 +220,12 @@ BOOL LLPanelOutfitEdit::postBuild() //childSetAction("remove_from_look_btn", boost::bind(&LLPanelOutfitEdit::onRemoveFromLookClicked, this), this); mRemoveFromLookBtn->setCommitCallback(boost::bind(&LLPanelOutfitEdit::onRemoveFromLookClicked, this)); //getChild<LLPanel>("look_info_group_bar")->addChild(mRemoveFromLookBtn); remove_item_btn - + mEditWearableBtn = getChild<LLButton>("edit_wearable_btn"); mEditWearableBtn->setEnabled(FALSE); mEditWearableBtn->setVisible(FALSE); mEditWearableBtn->setCommitCallback(boost::bind(&LLPanelOutfitEdit::onEditWearableClicked, this)); - + childSetAction("remove_item_btn", boost::bind(&LLPanelOutfitEdit::onRemoveFromLookClicked, this), this); return TRUE; @@ -302,7 +302,7 @@ void LLPanelOutfitEdit::onAddToLookClicked(void) { LLFolderViewItem* curr_item = mInventoryItemsPanel->getRootFolder()->getCurSelectedItem(); LLFolderViewEventListener* listenerp = curr_item->getListener(); - link_inventory_item(gAgent.getID(), listenerp->getUUID(), mLookID, listenerp->getName(), + link_inventory_item(gAgent.getID(), listenerp->getUUID(), mCurrentOutfitID, listenerp->getName(), LLAssetType::AT_LINK, LLPointer<LLInventoryCallback>(NULL)); updateLookInfo(); } @@ -445,7 +445,7 @@ void LLPanelOutfitEdit::lookFetched(void) // collectDescendentsIf takes non-const reference: LLFindCOFValidItems is_cof_valid; - gInventory.collectDescendentsIf(mLookID, + gInventory.collectDescendentsIf(mCurrentOutfitID, cat_array, item_array, LLInventoryModel::EXCLUDE_TRASH, @@ -468,12 +468,6 @@ void LLPanelOutfitEdit::lookFetched(void) mLookContents->addElement(row); } - - if (mLookContents->getItemCount() != mNumItemsInLook) - { - mNumItemsInLook = mLookContents->getItemCount(); - LLAppearanceMgr::instance().updateCOF(mLookID); - } } void LLPanelOutfitEdit::updateLookInfo() @@ -483,7 +477,7 @@ void LLPanelOutfitEdit::updateLookInfo() mLookContents->clearRows(); uuid_vec_t folders; - folders.push_back(mLookID); + folders.push_back(mCurrentOutfitID); mFetchLook->fetchDescendents(folders); if (mFetchLook->isEverythingComplete()) { @@ -496,28 +490,26 @@ void LLPanelOutfitEdit::updateLookInfo() } } -void LLPanelOutfitEdit::displayLookInfo(const LLInventoryCategory* pLook) +void LLPanelOutfitEdit::displayCurrentOutfit() { - if (!pLook) - { - return; - } - if (!getVisible()) { setVisible(TRUE); } - if (mLookID != pLook->getUUID()) + mCurrentOutfitID = LLAppearanceMgr::getInstance()->getCOF(); + + std::string current_outfit_name; + if (LLAppearanceMgr::getInstance()->getBaseOutfitName(current_outfit_name)) { - mLookID = pLook->getUUID(); - mLookName->setText(pLook->getName()); - updateLookInfo(); + mCurrentOutfitName->setText(current_outfit_name); + } + else + { + mCurrentOutfitName->setText(getString("No Outfit")); } -} -void LLPanelOutfitEdit::reset() -{ - mLookID.setNull(); + updateLookInfo(); } + diff --git a/indra/newview/llpaneloutfitedit.h b/indra/newview/llpaneloutfitedit.h index 5c00f84e0e..ba382d7320 100644 --- a/indra/newview/llpaneloutfitedit.h +++ b/indra/newview/llpaneloutfitedit.h @@ -81,10 +81,6 @@ public: /*virtual*/ BOOL postBuild(); /*virtual*/ void changed(U32 mask); - void reset(); - // Ignore all old information, useful if you are - // recycling an existing dialog and need to clear it. - /*virtual*/ void setParcelID(const LLUUID& parcel_id); // Sends a request for data about the given parcel, which will // only update the location if there is none already available. @@ -100,7 +96,7 @@ public: void onEditWearableClicked(void); void onUpClicked(void); - void displayLookInfo(const LLInventoryCategory* pLook); + void displayCurrentOutfit(); void lookFetched(void); @@ -108,8 +104,10 @@ public: private: - LLUUID mLookID; - LLTextBox* mLookName; + //*TODO got rid of mCurrentOutfitID + LLUUID mCurrentOutfitID; + + LLTextBox* mCurrentOutfitName; LLScrollListCtrl* mLookContents; LLInventoryPanel* mInventoryItemsPanel; LLFilterEditor* mSearchFilter; @@ -119,7 +117,6 @@ private: LLButton* mRemoveFromLookBtn; LLButton* mUpBtn; LLButton* mEditWearableBtn; - S32 mNumItemsInLook; LLLookFetchObserver* mFetchLook; LLInventoryLookObserver* mLookObserver; diff --git a/indra/newview/llpaneloutfitsinventory.cpp b/indra/newview/llpaneloutfitsinventory.cpp index 7f17dc5f67..7d8b1dea0e 100644 --- a/indra/newview/llpaneloutfitsinventory.cpp +++ b/indra/newview/llpaneloutfitsinventory.cpp @@ -131,7 +131,7 @@ void LLPanelOutfitsInventory::updateVerbs() if (mListCommands) { - mListCommands->childSetVisible("look_edit_btn",sShowDebugEditor); + mListCommands->childSetVisible("edit_current_outfit_btn",sShowDebugEditor); updateListCommands(); } } @@ -269,19 +269,12 @@ void LLPanelOutfitsInventory::onSelectionChange(const std::deque<LLFolderViewIte } } -void LLPanelOutfitsInventory::onSelectorButtonClicked() +void LLPanelOutfitsInventory::showEditOutfitPanel() { - LLFolderViewItem* cur_item = getRootFolder()->getCurSelectedItem(); - - LLFolderViewEventListener* listenerp = cur_item->getListener(); - if (getIsCorrectType(listenerp)) - { - LLSD key; - key["type"] = "look"; - key["id"] = listenerp->getUUID(); - - LLSideTray::getInstance()->showPanel("sidepanel_appearance", key); - } + LLSD key; + key["type"] = "edit_outfit"; + + LLSideTray::getInstance()->showPanel("sidepanel_appearance", key); } LLFolderViewEventListener *LLPanelOutfitsInventory::getCorrectListenerForAction() @@ -328,7 +321,7 @@ void LLPanelOutfitsInventory::initListCommandsHandlers() mListCommands->childSetAction("make_outfit_btn", boost::bind(&LLPanelOutfitsInventory::onAddButtonClick, this)); mListCommands->childSetAction("wear_btn", boost::bind(&LLPanelOutfitsInventory::onWearButtonClick, this)); - mListCommands->childSetAction("look_edit_btn", boost::bind(&LLPanelOutfitsInventory::onSelectorButtonClicked, this)); + mListCommands->childSetAction("edit_current_outfit_btn", boost::bind(&LLPanelOutfitsInventory::showEditOutfitPanel, this)); LLDragAndDropButton* trash_btn = mListCommands->getChild<LLDragAndDropButton>("trash_btn"); trash_btn->setDragAndDropHandler(boost::bind(&LLPanelOutfitsInventory::handleDragAndDropToTrash, this diff --git a/indra/newview/llpaneloutfitsinventory.h b/indra/newview/llpaneloutfitsinventory.h index a4d38df740..41afc2f372 100644 --- a/indra/newview/llpaneloutfitsinventory.h +++ b/indra/newview/llpaneloutfitsinventory.h @@ -64,7 +64,7 @@ public: bool onSaveCommit(const LLSD& notification, const LLSD& response); void onSelectionChange(const std::deque<LLFolderViewItem*> &items, BOOL user_action); - void onSelectorButtonClicked(); + void showEditOutfitPanel(); // If a compatible listener type is selected, then return a pointer to that. // Otherwise, return NULL. diff --git a/indra/newview/llsidepanelappearance.cpp b/indra/newview/llsidepanelappearance.cpp index f1483bd404..d90f36fc89 100644 --- a/indra/newview/llsidepanelappearance.cpp +++ b/indra/newview/llsidepanelappearance.cpp @@ -182,11 +182,9 @@ void LLSidepanelAppearance::onOpen(const LLSD& key) mLookInfoType = key["type"].asString(); - if (mLookInfoType == "look") + if (mLookInfoType == "edit_outfit") { - LLInventoryCategory *pLook = gInventory.getCategory(key["id"].asUUID()); - if (pLook) - mOutfitEdit->displayLookInfo(pLook); + mOutfitEdit->displayCurrentOutfit(); } } diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 0277005a89..dbeb976743 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -5330,6 +5330,16 @@ class LLWorldCreateLandmark : public view_listener_t } }; +class LLWorldPlaceProfile : public view_listener_t +{ + bool handleEvent(const LLSD& userdata) + { + LLSideTray::getInstance()->showPanel("panel_places", LLSD().with("type", "agent")); + + return true; + } +}; + void handle_look_at_selection(const LLSD& param) { const F32 PADDING_FACTOR = 1.75f; @@ -7739,6 +7749,7 @@ void initialize_menus() commit.add("World.Chat", boost::bind(&handle_chat, (void*)NULL)); view_listener_t::addMenu(new LLWorldAlwaysRun(), "World.AlwaysRun"); view_listener_t::addMenu(new LLWorldCreateLandmark(), "World.CreateLandmark"); + view_listener_t::addMenu(new LLWorldPlaceProfile(), "World.PlaceProfile"); view_listener_t::addMenu(new LLWorldSetHomeLocation(), "World.SetHomeLocation"); view_listener_t::addMenu(new LLWorldTeleportHome(), "World.TeleportHome"); view_listener_t::addMenu(new LLWorldSetAway(), "World.SetAway"); diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index 8b4554502a..8a062f867a 100644 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -220,6 +220,13 @@ name="Land" tear_off="true"> <menu_item_call + label="Place Profile" + layout="topleft" + name="Place Profile"> + <menu_item_call.on_click + function="World.PlaceProfile" /> + </menu_item_call> + <menu_item_call label="About Land" name="About Land"> <menu_item_call.on_click diff --git a/indra/newview/skins/default/xui/en/panel_outfit_edit.xml b/indra/newview/skins/default/xui/en/panel_outfit_edit.xml index 4d3ee07195..c1800384a3 100644 --- a/indra/newview/skins/default/xui/en/panel_outfit_edit.xml +++ b/indra/newview/skins/default/xui/en/panel_outfit_edit.xml @@ -12,6 +12,9 @@ name="outfit_edit" top="0" width="320"> + <string + name="No Outfit" + value="No Outfit"/> <panel.string name="not_available"> @@ -94,7 +97,7 @@ font="SansSerifHugeBold" height="26" layout="topleft" - name="curr_look_name" + name="curr_outfit_name" text_color="LtGray" top_pad="0" value="[Current Outfit]" diff --git a/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml b/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml index f9ad525642..66ed43efec 100644 --- a/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml +++ b/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml @@ -122,7 +122,7 @@ label="Edit Outfit" layout="topleft" right="-140" - name="look_edit_btn" + name="edit_current_outfit_btn" top="26" visible="false" width="50" /> diff --git a/indra/newview/skins/default/xui/es/floater_preferences.xml b/indra/newview/skins/default/xui/es/floater_preferences.xml index 37d56ea839..61f12fc0d7 100644 --- a/indra/newview/skins/default/xui/es/floater_preferences.xml +++ b/indra/newview/skins/default/xui/es/floater_preferences.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater min_width="350" name="Preferences" title="PREFERENCIAS" width="646"> +<floater name="Preferences" title="PREFERENCIAS"> <button label="OK" label_selected="OK" name="OK"/> <button label="Cancelar" label_selected="Cancelar" name="Cancel"/> - <tab_container name="pref core" tab_width="146" width="646"> + <tab_container name="pref core"> <panel label="General" name="general"/> <panel label="Gráficos" name="display"/> <panel label="Privacidad" name="im"/> diff --git a/indra/newview/skins/default/xui/fr/floater_preferences.xml b/indra/newview/skins/default/xui/fr/floater_preferences.xml index 406e91a18a..052e43388b 100644 --- a/indra/newview/skins/default/xui/fr/floater_preferences.xml +++ b/indra/newview/skins/default/xui/fr/floater_preferences.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater min_width="330" name="Preferences" title="PRÉFÉRENCES" width="626"> +<floater name="Preferences" title="PRÉFÉRENCES"> <button label="OK" label_selected="OK" name="OK"/> <button label="Annuler" label_selected="Annuler" name="Cancel"/> - <tab_container name="pref core" tab_width="126" width="626"> + <tab_container name="pref core"> <panel label="Général" name="general"/> <panel label="Graphiques" name="display"/> <panel label="Confidentialité" name="im"/> diff --git a/indra/newview/skins/default/xui/it/floater_preferences.xml b/indra/newview/skins/default/xui/it/floater_preferences.xml index 5ffe7f4802..c5b6654a69 100644 --- a/indra/newview/skins/default/xui/it/floater_preferences.xml +++ b/indra/newview/skins/default/xui/it/floater_preferences.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater min_width="350" name="Preferences" title="PREFERENZE" width="646"> +<floater name="Preferences" title="PREFERENZE"> <button label="OK" label_selected="OK" name="OK"/> <button label="Annulla" label_selected="Annulla" name="Cancel"/> - <tab_container name="pref core" tab_width="146" width="646"> + <tab_container name="pref core" tab_width="100"> <panel label="Generale" name="general"/> <panel label="Grafica" name="display"/> <panel label="Riservatezza" name="im"/> diff --git a/indra/newview/skins/default/xui/pt/floater_preferences.xml b/indra/newview/skins/default/xui/pt/floater_preferences.xml index 2736900d5f..2c76a72ca8 100644 --- a/indra/newview/skins/default/xui/pt/floater_preferences.xml +++ b/indra/newview/skins/default/xui/pt/floater_preferences.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> -<floater min_width="332" name="Preferences" title="PREFERÊNCIAS" width="628"> +<floater name="Preferences" title="PREFERÊNCIAS"> <button label="OK" label_selected="OK" name="OK"/> <button label="Cancelar" label_selected="Cancelar" name="Cancel"/> - <tab_container name="pref core" tab_width="128" width="628"> + <tab_container name="pref core"> <panel label="Geral" name="general"/> <panel label="Vídeo" name="display"/> <panel label="Privacidade" name="im"/> diff --git a/indra/newview/tests/llviewernetwork_test.cpp b/indra/newview/tests/llviewernetwork_test.cpp index f9f42cfc86..e0c7c83f4b 100644 --- a/indra/newview/tests/llviewernetwork_test.cpp +++ b/indra/newview/tests/llviewernetwork_test.cpp @@ -216,10 +216,10 @@ namespace tut #ifndef LL_RELEASE_FOR_DOWNLOAD ensure_equals("Agni grid label was not modified by grid file", grid[GRID_LABEL_VALUE].asString(), std::string("Agni")); -#else \\ LL_RELEASE_FOR_DOWNLOAD +#else // LL_RELEASE_FOR_DOWNLOAD ensure_equals("Agni grid label was not modified by grid file", grid[GRID_LABEL_VALUE].asString(), std::string("Secondlife.com")); -#endif \\ LL_RELEASE_FOR_DOWNLOAD +#endif // LL_RELEASE_FOR_DOWNLOAD ensure_equals("Agni name wasn't modified by grid file", grid[GRID_VALUE].asString(), std::string("util.agni.lindenlab.com")); |