From c7db5122c8b7e803e0c3c05b82c99ab1f715935f Mon Sep 17 00:00:00 2001 From: Inusaito Sayori Date: Thu, 4 Sep 2014 17:31:11 -0400 Subject: [PATCH 1/4] Fix Issue 1653: Using Search Box causes crash --- indra/newview/llfloaterdirectory.cpp | 10 ++++++++-- indra/newview/llfloaterdirectory.h | 1 + 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/indra/newview/llfloaterdirectory.cpp b/indra/newview/llfloaterdirectory.cpp index ce2f71e16..978ccf32b 100644 --- a/indra/newview/llfloaterdirectory.cpp +++ b/indra/newview/llfloaterdirectory.cpp @@ -455,13 +455,13 @@ void LLFloaterDirectory::requestClassifieds() void LLFloaterDirectory::searchInAll(const std::string& search_text) { + start(); LLPanelDirFindAllInterface::search(sInstance->mFindAllPanel, search_text); performQueryOn2("classified_panel", search_text); performQueryOn2("events_panel", search_text); performQueryOn2("groups_panel", search_text); performQueryOn2("people_panel", search_text); performQueryOn2("places_panel", search_text); - sInstance->open(); } void LLFloaterDirectory::showFindAll(const std::string& search_text) @@ -583,7 +583,7 @@ void LLFloaterDirectory::focusCurrentPanel() } // static -void LLFloaterDirectory::showPanel(const std::string& tabname) +void LLFloaterDirectory::start() { // This function gets called when web browser clicks are processed, // so we don't delete the existing panel, which would delete the @@ -593,6 +593,12 @@ void LLFloaterDirectory::showPanel(const std::string& tabname) sInstance = new LLFloaterDirectory("directory"); } sInstance->open(); /*Flawfinder: ignore*/ +} + +// static +void LLFloaterDirectory::showPanel(const std::string& tabname) +{ + start(); sInstance->childShowTab("Directory Tabs", tabname); sInstance->focusCurrentPanel(); } diff --git a/indra/newview/llfloaterdirectory.h b/indra/newview/llfloaterdirectory.h index 0f5f1b501..c36ce412b 100644 --- a/indra/newview/llfloaterdirectory.h +++ b/indra/newview/llfloaterdirectory.h @@ -94,6 +94,7 @@ public: private: static void performQueryOn(const std::string& name, const std::string& search_text); static void performQueryOn2(const std::string& name, const std::string& search_text); + static void start(); static void showPanel(const std::string& tabname); /*virtual*/ void onClose(bool app_quitting); void focusCurrentPanel(); From 71d78425be944fb5039b718f113316df7a2f8e1f Mon Sep 17 00:00:00 2001 From: Inusaito Sayori Date: Thu, 4 Sep 2014 18:35:28 -0400 Subject: [PATCH 2/4] Preload trash icon Solves the issue where the remove saved login button has nothing on it --- indra/newview/skins/default/textures/textures.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index fb9c6c1e3..574f2b3a7 100644 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -122,7 +122,7 @@ - + From e62ef91404bb1b062fe0afb5a00c2779034b4293 Mon Sep 17 00:00:00 2001 From: Inusaito Sayori Date: Sat, 6 Sep 2014 18:42:24 -0400 Subject: [PATCH 3/4] Fix sex radio: Now let's hear some kinky tunes~ --- indra/newview/skins/default/xui/en-us/floater_customize.xml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/indra/newview/skins/default/xui/en-us/floater_customize.xml b/indra/newview/skins/default/xui/en-us/floater_customize.xml index b4eeaf48f..bdd0065cd 100644 --- a/indra/newview/skins/default/xui/en-us/floater_customize.xml +++ b/indra/newview/skins/default/xui/en-us/floater_customize.xml @@ -47,12 +47,10 @@ name="Legs" scale_image="true" width="82" /> - + Female - + Male From f38754d0d67c68eabf30f59b5dd983675cf50315 Mon Sep 17 00:00:00 2001 From: Shyotl Date: Sun, 7 Sep 2014 15:55:53 -0500 Subject: [PATCH 4/4] Fixed an alignment issue with LLAvatarJointCollisionVolume array. Thanks Henri. --- indra/llappearance/llavatarappearance.cpp | 48 +-- indra/llappearance/llavatarappearance.h | 4 +- indra/llappearance/llpolymorph.cpp | 6 +- indra/newview/llfloaterperms.cpp | 388 ++++++++-------------- 4 files changed, 164 insertions(+), 282 deletions(-) diff --git a/indra/llappearance/llavatarappearance.cpp b/indra/llappearance/llavatarappearance.cpp index 3d3420961..d26b45208 100644 --- a/indra/llappearance/llavatarappearance.cpp +++ b/indra/llappearance/llavatarappearance.cpp @@ -182,9 +182,6 @@ LLAvatarAppearance::LLAvatarAppearance(LLWearableData* wearable_data) : } mIsBuilt = FALSE; - - mNumCollisionVolumes = 0; - mCollisionVolumes = NULL; } // virtual @@ -294,7 +291,7 @@ LLAvatarAppearance::~LLAvatarAppearance() mJointMap.clear(); clearSkeleton(); - deleteAndClearArray(mCollisionVolumes); + clearCollisionVolumes(); std::for_each(mPolyMeshes.begin(), mPolyMeshes.end(), DeletePairedPointer()); mPolyMeshes.clear(); @@ -575,12 +572,12 @@ BOOL LLAvatarAppearance::setupBone(const LLAvatarBoneInfo* info, LLJoint* parent } else // collision volume { - if (volume_num >= (S32)mNumCollisionVolumes) + if (volume_num >= (S32)mCollisionVolumes.size()) { llwarns << "Too many bones" << llendl; return FALSE; } - joint = (&mCollisionVolumes[volume_num]); + joint = (mCollisionVolumes[volume_num]); joint->setName( info->mName ); } @@ -1250,12 +1247,12 @@ LLVector3 LLAvatarAppearance::getVolumePos(S32 joint_index, LLVector3& volume_of return LLVector3::zero; } - if (joint_index > mNumCollisionVolumes) + if (joint_index > (S32)mCollisionVolumes.size()) { return LLVector3::zero; } - return mCollisionVolumes[joint_index].getVolumePos(volume_offset); + return mCollisionVolumes[joint_index]->getVolumePos(volume_offset); } //----------------------------------------------------------------------------- @@ -1266,12 +1263,12 @@ LLJoint* LLAvatarAppearance::findCollisionVolume(U32 volume_id) //SNOW-488: As mNumCollisionVolumes is a S32 and we are casting from a U32 to a S32 //to compare we also need to be sure of the wrap around case producing (S32) <0 //or in terms of the U32 an out of bounds index in the array. - if ((S32)volume_id > mNumCollisionVolumes || (S32)volume_id<0) + if ((S32)volume_id > (S32)mCollisionVolumes.size() || (S32)volume_id<0) { return NULL; } - return &mCollisionVolumes[volume_id]; + return mCollisionVolumes[volume_id]; } //----------------------------------------------------------------------------- @@ -1279,9 +1276,9 @@ LLJoint* LLAvatarAppearance::findCollisionVolume(U32 volume_id) //----------------------------------------------------------------------------- S32 LLAvatarAppearance::getCollisionVolumeID(std::string &name) { - for (S32 i = 0; i < mNumCollisionVolumes; i++) + for (S32 i = 0; i < (S32)mCollisionVolumes.size(); i++) { - if (mCollisionVolumes[i].getName() == name) + if (mCollisionVolumes[i]->getName() == name) { return i; } @@ -1530,21 +1527,34 @@ LLTexLayerSet* LLAvatarAppearance::getAvatarLayerSet(EBakedTextureIndex baked_in return mBakedTextureDatas[baked_index].mTexLayerSet; } +void LLAvatarAppearance::clearCollisionVolumes() +{ + std::for_each(mCollisionVolumes.begin(), mCollisionVolumes.end(), + DeletePointer()); + mCollisionVolumes.clear(); +} + //----------------------------------------------------------------------------- // allocateCollisionVolumes() //----------------------------------------------------------------------------- BOOL LLAvatarAppearance::allocateCollisionVolumes( U32 num ) { - deleteAndClearArray(mCollisionVolumes); - mNumCollisionVolumes = 0; + mCollisionVolumes.reserve(num); - mCollisionVolumes = new LLAvatarJointCollisionVolume[num]; - if (!mCollisionVolumes) + LLAvatarJointCollisionVolume* cv; + for (U32 i = 0; i < num; ++i) { - return FALSE; + cv = new LLAvatarJointCollisionVolume(); + if (cv) + { + mCollisionVolumes.push_back(cv); + } + else + { + clearCollisionVolumes(); + return false; + } } - - mNumCollisionVolumes = num; return TRUE; } diff --git a/indra/llappearance/llavatarappearance.h b/indra/llappearance/llavatarappearance.h index b3a02e410..da4e09b42 100644 --- a/indra/llappearance/llavatarappearance.h +++ b/indra/llappearance/llavatarappearance.h @@ -337,9 +337,9 @@ protected: // Collision volumes //-------------------------------------------------------------------- public: - S32 mNumCollisionVolumes; - LLAvatarJointCollisionVolume* mCollisionVolumes; + std::vector mCollisionVolumes; protected: + void clearCollisionVolumes(); BOOL allocateCollisionVolumes(U32 num); /** Physics diff --git a/indra/llappearance/llpolymorph.cpp b/indra/llappearance/llpolymorph.cpp index aeaf79f33..669c2e5fb 100644 --- a/indra/llappearance/llpolymorph.cpp +++ b/indra/llappearance/llpolymorph.cpp @@ -647,11 +647,11 @@ BOOL LLPolyMorphTarget::setInfo(LLPolyMorphTargetInfo* info) for (iter = getInfo()->mVolumeInfoList.begin(); iter != getInfo()->mVolumeInfoList.end(); iter++) { LLPolyVolumeMorphInfo *volume_info = &(*iter); - for (S32 i = 0; i < avatarp->mNumCollisionVolumes; i++) + for (S32 i = 0; i < (S32)avatarp->mCollisionVolumes.size(); i++) { - if (avatarp->mCollisionVolumes[i].getName() == volume_info->mName) + if (avatarp->mCollisionVolumes[i]->getName() == volume_info->mName) { - mVolumeMorphs.push_back(LLPolyVolumeMorph(&avatarp->mCollisionVolumes[i], + mVolumeMorphs.push_back(LLPolyVolumeMorph(avatarp->mCollisionVolumes[i], volume_info->mScale, volume_info->mPos)); break; diff --git a/indra/newview/llfloaterperms.cpp b/indra/newview/llfloaterperms.cpp index aa6b76c87..a85abb1a6 100644 --- a/indra/newview/llfloaterperms.cpp +++ b/indra/newview/llfloaterperms.cpp @@ -1,7 +1,7 @@ /** * @file llfloaterperms.cpp * @brief Asset creation permission preferences. - * @author Jonathan Yap + * @author Coco * * $LicenseInfo:firstyear=2001&license=viewergpl$ * @@ -33,57 +33,152 @@ #include "llviewerprecompiledheaders.h" #include "lfsimfeaturehandler.h" -#include "llagent.h" #include "llcheckboxctrl.h" #include "llfloaterperms.h" #include "llnotificationsutil.h" #include "llviewercontrol.h" -#include "llviewerregion.h" #include "llviewerwindow.h" #include "lluictrlfactory.h" #include "llpermissions.h" #include "hippogridmanager.h" -extern class AIHTTPTimeoutPolicy floaterPermsResponder_timeout; - -//static -U32 LLFloaterPerms::getGroupPerms(std::string prefix) +namespace { - return gSavedSettings.getBOOL(prefix+"ShareWithGroup") ? PERM_COPY | PERM_MOVE | PERM_MODIFY : PERM_NONE; + bool everyone_export; + void handle_checkboxes(LLUICtrl* ctrl, const LLSD& value) + { + LLPanel* view = static_cast(ctrl->getParent()); + if (ctrl->getName() == "everyone_export") + { + view->childSetEnabled("next_owner_copy", !value); + view->childSetEnabled("next_owner_modify", !value); + view->childSetEnabled("next_owner_transfer", !value); + } + else + { + if (ctrl->getName() == "next_owner_copy") + { + if (!value) // Implements fair use + gSavedSettings.setBOOL("NextOwnerTransfer", true); + view->childSetEnabled("next_owner_transfer", value); + } + if (!value) // If any of these are unchecked, export can no longer be checked. + view->childSetEnabled("everyone_export", false); + else + view->childSetEnabled("everyone_export", LFSimFeatureHandler::instance().simSupportsExport() && (LLFloaterPerms::getNextOwnerPerms() & PERM_ITEM_UNRESTRICTED) == PERM_ITEM_UNRESTRICTED); + } + } } -//static +LLFloaterPerms::LLFloaterPerms(const LLSD& seed) +{ + LLUICtrlFactory::getInstance()->buildFloater(this, "floater_perm_prefs.xml"); +} + +BOOL LLFloaterPerms::postBuild() +{ + //handle_checkboxes + { + bool export_support = LFSimFeatureHandler::instance().simSupportsExport(); + const U32 next_owner_perms = getNextOwnerPerms(); + childSetEnabled("everyone_export", export_support && (next_owner_perms & PERM_ITEM_UNRESTRICTED) == PERM_ITEM_UNRESTRICTED); + if (!gHippoGridManager->getCurrentGrid()->isSecondLife()) + childSetVisible("everyone_export", false); + + if (!(next_owner_perms & PERM_COPY)) + { + childSetEnabled("next_owner_transfer", false); + } + else if (export_support) + { + bool export_off = !gSavedPerAccountSettings.getBOOL("EveryoneExport"); + childSetEnabled("next_owner_copy", export_off); + childSetEnabled("next_owner_modify", export_off); + childSetEnabled("next_owner_transfer", export_off); + } + else // Set EveryoneExport false, just in case. + gSavedPerAccountSettings.setBOOL("EveryoneExport", false); + } + childSetAction("help", onClickHelp, this); + childSetAction("ok", onClickOK, this); + childSetAction("cancel", onClickCancel, this); + getChild("next_owner_copy")->setCommitCallback(handle_checkboxes); + getChild("next_owner_modify")->setCommitCallback(handle_checkboxes); + getChild("next_owner_transfer")->setCommitCallback(handle_checkboxes); + getChild("everyone_export")->setCommitCallback(handle_checkboxes); + + refresh(); + + return TRUE; +} + +//static +void LLFloaterPerms::onClickOK(void* data) +{ + LLFloaterPerms* self = static_cast(data); + self->ok(); + self->close(); +} + +//static +void LLFloaterPerms::onClickCancel(void* data) +{ + LLFloaterPerms* self = static_cast(data); + self->cancel(); + self->close(); +} + +void LLFloaterPerms::ok() +{ + refresh(); // Changes were already applied to saved settings. Refreshing internal values makes it official. +} + +void LLFloaterPerms::cancel() +{ + gSavedSettings.setBOOL("ShareWithGroup", mShareWithGroup); + gSavedSettings.setBOOL("EveryoneCopy", mEveryoneCopy); + gSavedSettings.setBOOL("NextOwnerCopy", mNextOwnerCopy); + gSavedSettings.setBOOL("NextOwnerModify", mNextOwnerModify); + gSavedSettings.setBOOL("NextOwnerTransfer", mNextOwnerTransfer); + gSavedPerAccountSettings.setBOOL("EveryoneExport", everyone_export); +} + +void LLFloaterPerms::refresh() +{ + mShareWithGroup = gSavedSettings.getBOOL("ShareWithGroup"); + mEveryoneCopy = gSavedSettings.getBOOL("EveryoneCopy"); + mNextOwnerCopy = gSavedSettings.getBOOL("NextOwnerCopy"); + mNextOwnerModify = gSavedSettings.getBOOL("NextOwnerModify"); + mNextOwnerTransfer = gSavedSettings.getBOOL("NextOwnerTransfer"); + everyone_export = gSavedPerAccountSettings.getBOOL("EveryoneExport"); +} + +void LLFloaterPerms::onClose(bool app_quitting) +{ + // Cancel any unsaved changes before closing. + // Note: when closed due to the OK button this amounts to a no-op. + cancel(); + LLFloater::onClose(app_quitting); +} + +//static +U32 LLFloaterPerms::getGroupPerms(std::string prefix) +{ + return gSavedSettings.getBOOL(prefix+"ShareWithGroup") ? PERM_COPY : PERM_NONE; +} + +//static U32 LLFloaterPerms::getEveryonePerms(std::string prefix) { U32 flags = PERM_NONE; - if (prefix != "Bulk" && LFSimFeatureHandler::instance().simSupportsExport() && prefix.empty() && gSavedPerAccountSettings.getBOOL(prefix+"EveryoneExport")) // Singu TODO: Bulk? + if (LFSimFeatureHandler::instance().simSupportsExport() && prefix.empty() && gSavedPerAccountSettings.getBOOL("EveryoneExport")) // TODO: Bulk enable export? flags |= PERM_EXPORT; if (gSavedSettings.getBOOL(prefix+"EveryoneCopy")) flags |= PERM_COPY; return flags; } -//static -U32 LLFloaterPerms::getNextOwnerPermsInverted(std::string prefix) -{ - // Sets bits for permissions that are off - U32 flags = PERM_MOVE; - if (!gSavedSettings.getBOOL(prefix+"NextOwnerCopy")) - { - flags |= PERM_COPY; - } - if (!gSavedSettings.getBOOL(prefix+"NextOwnerModify")) - { - flags |= PERM_MODIFY; - } - if (!gSavedSettings.getBOOL(prefix+"NextOwnerTransfer")) - { - flags |= PERM_TRANSFER; - } - return flags; -} - -//static +//static U32 LLFloaterPerms::getNextOwnerPerms(std::string prefix) { U32 flags = PERM_MOVE; @@ -102,232 +197,9 @@ U32 LLFloaterPerms::getNextOwnerPerms(std::string prefix) return flags; } -namespace + +//static +void LLFloaterPerms::onClickHelp(void* data) { - void handle_checkboxes(LLView* view, const std::string& ctrl_name, const LLSD& value, const std::string& type) - { - if (ctrl_name == type+"everyone_export") - { - view->getChildView(type+"next_owner_copy")->setEnabled(!value); - view->getChildView(type+"next_owner_modify")->setEnabled(!value); - view->getChildView(type+"next_owner_transfer")->setEnabled(!value); - } - else - { - if (ctrl_name == type+"next_owner_copy") - { - if (!value) // Implements fair use - gSavedSettings.setBOOL(type+"NextOwnerTransfer", true); - view->getChildView(type+"next_owner_transfer")->setEnabled(value); - } - if (!value) // If any of these are unchecked, export can no longer be checked. - view->getChildView(type+"everyone_export")->setEnabled(false); - else - view->getChildView(type+"everyone_export")->setEnabled(LFSimFeatureHandler::instance().simSupportsExport() && (LLFloaterPerms::getNextOwnerPerms(type) & PERM_ITEM_UNRESTRICTED) == PERM_ITEM_UNRESTRICTED); - } - } -} - -static bool mCapSent = false; - -LLFloaterPermsDefault::LLFloaterPermsDefault(const LLSD& seed) - : LLFloater() -{ - mCommitCallbackRegistrar.add("PermsDefault.OK", boost::bind(&LLFloaterPermsDefault::onClickOK, this)); - mCommitCallbackRegistrar.add("PermsDefault.Cancel", boost::bind(&LLFloaterPermsDefault::onClickCancel, this)); - LLUICtrlFactory::getInstance()->buildFloater(this, "floater_perm_prefs.xml"); -} - -// String equivalents of enum Categories - initialization order must match enum order! -const std::string LLFloaterPermsDefault::sCategoryNames[CAT_LAST] = -{ - "Objects", - "Uploads", - "Scripts", - "Notecards", - "Gestures", - "Wearables" -}; - -void LLFloaterPermsDefault::initCheckboxes(bool export_support, const std::string& type) -{ - const U32 next_owner_perms = LLFloaterPerms::getNextOwnerPerms(type); - getChildView(type + "everyone_export")->setEnabled(export_support && (next_owner_perms & PERM_ITEM_UNRESTRICTED) == PERM_ITEM_UNRESTRICTED); - - if (!(next_owner_perms & PERM_COPY)) - { - getChildView(type + "next_owner_transfer")->setEnabled(false); - } - else if (export_support) - { - bool export_off = !gSavedPerAccountSettings.getBOOL(type+"EveryoneExport"); - getChildView(type + "next_owner_copy")->setEnabled(export_off); - getChildView(type + "next_owner_modify")->setEnabled(export_off); - getChildView(type + "next_owner_transfer")->setEnabled(export_off); - } - else // Set type+EveryoneExport false, just in case. - gSavedPerAccountSettings.setBOOL(type+"EveryoneExport", false); -} - -BOOL LLFloaterPermsDefault::postBuild() -{ - //handle_checkboxes - bool export_support = LFSimFeatureHandler::instance().simSupportsExport(); - bool is_sl = gHippoGridManager->getCurrentGrid()->isSecondLife(); - for (S32 i = 0; i < CAT_LAST; ++i) - { - const std::string& type(sCategoryNames[i]); - initCheckboxes(export_support, type); - commit_callback_t handle_checks(boost::bind(handle_checkboxes, this, boost::bind(&LLView::getName, _1), _2, type)); - getChild(type + "next_owner_copy")->setCommitCallback(handle_checks); - getChild(type + "next_owner_modify")->setCommitCallback(handle_checks); - getChild(type + "next_owner_transfer")->setCommitCallback(handle_checks); - if (is_sl) - getChildView(type + "everyone_export")->setVisible(false); - else - getChild(type + "everyone_export")->setCommitCallback(handle_checks); - } - if (is_sl) - { - LLView* view(getChildView("ExportationLabel")); - S32 shift(view->getRect().getWidth()); // Determine size of export area - LLRect rect(getRect()); - rect.mRight -= shift; - setRect(rect); // Cut off the export side - view->setVisible(false); // Hide label - // Move bottom buttons over so they look nice. - shift /= -2; - view = getChildView("ok"); - rect = view->getRect(); - rect.translate(shift, 0); - view->setRect(rect); - view = getChildView("cancel"); - rect = view->getRect(); - rect.translate(shift, 0); - view->setRect(rect); - } - - refresh(); - - return TRUE; -} - -void LLFloaterPermsDefault::onClickOK() -{ - ok(); - close(); -} - -void LLFloaterPermsDefault::onClickCancel() -{ - cancel(); - close(); -} - -class LLFloaterPermsResponder : public LLHTTPClient::ResponderWithResult -{ -public: - LLFloaterPermsResponder() : LLHTTPClient::ResponderWithResult() {} -private: - static std::string sPreviousReason; - - void httpFailure(void) - { - // Prevent 404s from annoying the user all the tme - if (mStatus == HTTP_NOT_FOUND) - LL_INFOS("FloaterPermsResponder") << "Failed to send default permissions to simulator. 404, reason: " << mReason << LL_ENDL; - else - // - // Do not display the same error more than once in a row - if (mReason != sPreviousReason) - { - sPreviousReason = mReason; - LLSD args; - args["REASON"] = mReason; - LLNotificationsUtil::add("DefaultObjectPermissions", args); - } - } - void httpSuccess(void) - { - // Since we have had a successful POST call be sure to display the next error message - // even if it is the same as a previous one. - sPreviousReason = ""; - mCapSent = true; - LL_INFOS("FloaterPermsResponder") << "Sent default permissions to simulator" << LL_ENDL; - } - /*virtual*/ AIHTTPTimeoutPolicy const& getHTTPTimeoutPolicy() const { return floaterPermsResponder_timeout; } - /*virtual*/ char const* getName() const { return "LLFloaterPermsResponder"; } -}; - -std::string LLFloaterPermsResponder::sPreviousReason; - -void LLFloaterPermsDefault::sendInitialPerms() -{ - if (!mCapSent) - { - updateCap(); - } -} - -void LLFloaterPermsDefault::updateCap() -{ - std::string object_url = gAgent.getRegion()->getCapability("AgentPreferences"); - - if (!object_url.empty()) - { - LLSD report = LLSD::emptyMap(); - report["default_object_perm_masks"]["Group"] = - (LLSD::Integer)LLFloaterPerms::getGroupPerms(sCategoryNames[CAT_OBJECTS]); - report["default_object_perm_masks"]["Everyone"] = - (LLSD::Integer)LLFloaterPerms::getEveryonePerms(sCategoryNames[CAT_OBJECTS]); - report["default_object_perm_masks"]["NextOwner"] = - (LLSD::Integer)LLFloaterPerms::getNextOwnerPerms(sCategoryNames[CAT_OBJECTS]); - - LLHTTPClient::post(object_url, report, new LLFloaterPermsResponder()); - } -} - -void LLFloaterPermsDefault::ok() -{ - // Changes were already applied to saved settings. - // Refreshing internal values makes it official. - refresh(); - - // We know some setting has changed but not which one. Just in case it was a setting for - // object permissions tell the server what the values are. - updateCap(); -} - -void LLFloaterPermsDefault::cancel() -{ - for (U32 iter = CAT_OBJECTS; iter < CAT_LAST; iter++) - { - gSavedSettings.setBOOL(sCategoryNames[iter]+"ShareWithGroup", mShareWithGroup[iter]); - gSavedSettings.setBOOL(sCategoryNames[iter]+"EveryoneCopy", mEveryoneCopy[iter]); - gSavedSettings.setBOOL(sCategoryNames[iter]+"NextOwnerCopy", mNextOwnerCopy[iter]); - gSavedSettings.setBOOL(sCategoryNames[iter]+"NextOwnerModify", mNextOwnerModify[iter]); - gSavedSettings.setBOOL(sCategoryNames[iter]+"NextOwnerTransfer", mNextOwnerTransfer[iter]); - gSavedPerAccountSettings.setBOOL(sCategoryNames[iter]+"EveryoneExport", mEveryoneExport[iter]); - } -} - -void LLFloaterPermsDefault::refresh() -{ - for (U32 iter = CAT_OBJECTS; iter < CAT_LAST; iter++) - { - mShareWithGroup[iter] = gSavedSettings.getBOOL(sCategoryNames[iter]+"ShareWithGroup"); - mEveryoneCopy[iter] = gSavedSettings.getBOOL(sCategoryNames[iter]+"EveryoneCopy"); - mNextOwnerCopy[iter] = gSavedSettings.getBOOL(sCategoryNames[iter]+"NextOwnerCopy"); - mNextOwnerModify[iter] = gSavedSettings.getBOOL(sCategoryNames[iter]+"NextOwnerModify"); - mNextOwnerTransfer[iter] = gSavedSettings.getBOOL(sCategoryNames[iter]+"NextOwnerTransfer"); - mEveryoneExport[iter] = gSavedPerAccountSettings.getBOOL(sCategoryNames[iter]+"EveryoneExport"); - } -} - -void LLFloaterPermsDefault::onClose(bool app_quitting) -{ - // Cancel any unsaved changes before closing. - // Note: when closed due to the OK button this amounts to a no-op. - cancel(); - LLFloater::onClose(app_quitting); + LLNotificationsUtil::add("ClickUploadHelpPermissions"); }