Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 5 additions & 8 deletions indra/newview/llscriptruntimeperms.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,7 @@
* $/LicenseInfo$
*/

#ifndef LL_LLSCRIPTRUNTIME_PERMS_H
#define LL_LLSCRIPTRUNTIME_PERMS_H

#include <boost/array.hpp>
#pragma once

typedef struct _script_perm {
std::string question;
Expand All @@ -37,12 +34,12 @@ typedef struct _script_perm {
question(q), permbit(b), caution(c) {}
} script_perm_t;

const U32 NUM_SCRIPT_PERMISSIONS = 18;
const U32 NUM_SCRIPT_PERMISSIONS = 19;
const S32 SCRIPT_PERMISSION_DEBIT = 0;
const S32 SCRIPT_PERMISSION_TRIGGER_ANIMATION = 3;
const S32 SCRIPT_PERMISSION_OVERRIDE_ANIMATIONS = 14;

static const boost::array<script_perm_t, NUM_SCRIPT_PERMISSIONS> SCRIPT_PERMISSIONS = {{
static const std::array<script_perm_t, NUM_SCRIPT_PERMISSIONS> SCRIPT_PERMISSIONS = {{
_script_perm("ScriptTakeMoney", (0x1 << 1), true),
_script_perm("ActOnControlInputs", (0x1 << 2), false),
_script_perm("RemapControlInputs", (0x1 << 3), false),
Expand All @@ -60,7 +57,7 @@ static const boost::array<script_perm_t, NUM_SCRIPT_PERMISSIONS> SCRIPT_PERMISSI
_script_perm("OverrideYourAnimations", (0x1 << 15), false),
_script_perm("ScriptReturnObjects", (0x1 << 16), false),
_script_perm("ForceSitAvatar", (0x1 << 17), false),
_script_perm("ChangeEnvSettings", (0x1 << 18), false)
_script_perm("ChangeEnvSettings", (0x1 << 18), false),
_script_perm("PrivilegedLandAccess",(0x1 << 19), true)
} };

#endif // LL_LLSCRIPTRUNTIME_PERMS_H
73 changes: 63 additions & 10 deletions indra/newview/lltoastscriptquestion.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,12 @@ bool LLToastScriptQuestion::postBuild()
LLTextBox* mFooter = getChild<LLTextBox>("bottom_info_message");

mMessage->setValue(mNotification->getMessage());
mFooter->setValue(mNotification->getFooter());
std::string footer = mNotification->getFooter();
mFooter->setValue(footer);
if (footer.empty())
{
mFooter->setVisible(false);
}

snapToMessageHeight();

Expand Down Expand Up @@ -78,21 +83,69 @@ void LLToastScriptQuestion::snapToMessageHeight()

if (mMessage->getVisible() && mFooter->getVisible())
{
S32 heightDelta = 0;
S32 maxTextHeight = (mMessage->getFont()->getLineHeight() * MAX_LINES_COUNT)
S32 height_delta = 0;
S32 max_text_height = (mMessage->getFont()->getLineHeight() * MAX_LINES_COUNT)
+ (mFooter->getFont()->getLineHeight() * MAX_LINES_COUNT);

LLRect messageRect = mMessage->getRect();
LLRect footerRect = mFooter->getRect();
LLRect message_rect = mMessage->getRect();

S32 old_message_height = message_rect.getHeight();
S32 new_message_height = mMessage->getTextBoundingRect().getHeight();
S32 new_footer_height = mFooter->getTextBoundingRect().getHeight();

constexpr S32 FOOTER_PADDING = 8; // new height should include padding for newly added footer
S32 required_text_height = new_message_height + new_footer_height + FOOTER_PADDING;
S32 new_text_height = llmin(required_text_height, max_text_height);

// Footer was invisibe, so use old_message_height for old height
height_delta = new_text_height - old_message_height;

reshape( getRect().getWidth(), llmax(getRect().getHeight() + height_delta, MIN_PANEL_HEIGHT));

// Floater was resized, now resize and shift children
// Message follows top, so it's top is in a correct position, but needs to be resized down
S32 message_delta = new_message_height - old_message_height;
message_rect = mMessage->getRect(); // refresh since it might have changed after reshape
message_rect.mBottom = message_rect.mBottom - message_delta;
mMessage->setRect(message_rect);
mMessage->needsReflow();
// Button panel should stay the same size, just translate it
LLPanel* panel = getChild<LLPanel>("buttons_panel");
panel->translate(0, -message_delta);
// Footer should be both moved and resized
LLRect footer_rect = mFooter->getRect();
footer_rect.mTop = footer_rect.mTop - message_delta;
footer_rect.mBottom = footer_rect.mTop - new_footer_height;
mFooter->setRect(footer_rect);
mFooter->needsReflow();
}
else if (mMessage->getVisible())
{
S32 height_delta = 0;
S32 max_text_height = (mMessage->getFont()->getLineHeight() * MAX_LINES_COUNT);

LLRect message_rect = mMessage->getRect();

S32 old_message_height = message_rect.getHeight();
S32 new_message_height = mMessage->getTextBoundingRect().getHeight();

S32 oldTextHeight = messageRect.getHeight() + footerRect.getHeight();
S32 new_text_height = llmin(new_message_height, max_text_height);

S32 requiredTextHeight = mMessage->getTextBoundingRect().getHeight() + mFooter->getTextBoundingRect().getHeight();
S32 newTextHeight = llmin(requiredTextHeight, maxTextHeight);
// Footer was invisibe, so use old_message_height for old height
height_delta = new_text_height - old_message_height;

heightDelta = newTextHeight - oldTextHeight - heightDelta;
reshape(getRect().getWidth(), llmax(getRect().getHeight() + height_delta, MIN_PANEL_HEIGHT));

reshape( getRect().getWidth(), llmax(getRect().getHeight() + heightDelta, MIN_PANEL_HEIGHT));
// Floater was resized, now resize and shift children
// Message follows top, so it's top is in a correct position, but needs to be resized down
S32 message_delta = new_message_height - old_message_height;
message_rect = mMessage->getRect(); // refresh since it might have changed after reshape
message_rect.mBottom = message_rect.mBottom - message_delta;
mMessage->setRect(message_rect);
mMessage->needsReflow();
// Button panel should stay the same size, just translate it
LLPanel* panel = getChild<LLPanel>("buttons_panel");
panel->translate(0, -message_delta);
}
}

Expand Down
24 changes: 18 additions & 6 deletions indra/newview/llviewermessage.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5749,28 +5749,40 @@ void process_script_question(LLMessageSystem *msg, void **user_data)
args["NAME"] = clean_owner_name;
S32 known_questions = 0;
bool has_not_only_debit = questions ^ SCRIPT_PERMISSIONS[SCRIPT_PERMISSION_DEBIT].permbit;
bool caution_enabled = gSavedSettings.getBOOL("PermissionsCautionEnabled");
// check the received permission flags against each permission
std::string warning_msg;
for (const script_perm_t& script_perm : SCRIPT_PERMISSIONS)
{
if (questions & script_perm.permbit)
{
count++;
known_questions |= script_perm.permbit;
// check whether permission question should cause special caution dialog
caution |= (script_perm.caution);

if (("ScriptTakeMoney" == script_perm.question) && has_not_only_debit)
// Caustions go into top part of the dialog, questions go into the footer
if (caution_enabled && script_perm.caution)
{
warning_msg += "\n" + LLTrans::getString(script_perm.question + "Caution") + "\n";
continue;
}

if (LLTrans::getString(script_perm.question).empty())
{
continue;
}

script_question += " " + LLTrans::getString(script_perm.question) + "\n";
count++;
script_question += "\n " + LLTrans::getString(script_perm.question);
}
}

if (!warning_msg.empty())
{
LLStringUtil::format(warning_msg, args);
args["WARNINGS"] = warning_msg;
}

args["QUESTIONS"] = script_question;

if (known_questions != questions)
Expand All @@ -5795,12 +5807,12 @@ void process_script_question(LLMessageSystem *msg, void **user_data)
// check whether cautions are even enabled or not
const char* notification = "ScriptQuestion";

if(caution && gSavedSettings.getBOOL("PermissionsCautionEnabled"))
if(caution && caution_enabled)
{
args["FOOTERTEXT"] = (count > 1) ? LLTrans::getString("AdditionalPermissionsRequestHeader") + "\n\n" + script_question : "";
args["FOOTERTEXT"] = (count > 0) ? LLTrans::getString("AdditionalPermissionsRequestHeader") + "\n" + script_question : "";
notification = "ScriptQuestionCaution";
}
else if(experienceid.notNull())
else if (experienceid.notNull())
{
payload["experience"]=experienceid;
LLExperienceCache::instance().get(experienceid, boost::bind(process_script_experience_details, _1, args, payload));
Expand Down
10 changes: 4 additions & 6 deletions indra/newview/skins/default/xui/en/notifications.xml
Original file line number Diff line number Diff line change
Expand Up @@ -8585,10 +8585,10 @@ Scripts associated with this experience will be able to do the following on regi
priority="critical"
persist="true"
type="notify">
Warning: The object &apos;&lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;&apos; wants total access to your Linden Dollars account. If you allow access, it can remove funds from your account at any time, or empty your account completely, on an ongoing basis with no additional warnings.

Do not allow access if you do not fully understand why it wants access to your account.
Warning:
[WARNINGS]

Do not allow access if you do not fully understand why it wants access to your account.
<tag>confirm</tag>
<form name="form">
<button
Expand All @@ -8601,9 +8601,7 @@ Do not allow access if you do not fully understand why it wants access to your a
name="Deny"
text="Deny"/>
</form>
<footer>
[FOOTERTEXT]
</footer>
<footer>[FOOTERTEXT]</footer>
</notification>

<notification
Expand Down
8 changes: 4 additions & 4 deletions indra/newview/skins/default/xui/en/panel_notification.xml
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@
embedded_items="false"
enabled="false"
follows="left|right|top|bottom"
height="85"
height="85"
layout="topleft"
left="10"
mouse_opaque="false"
Expand All @@ -67,16 +67,16 @@
<panel
background_visible="false"
follows="left|right|bottom"
height="30"
height="30"
width="290"
label="control_panel"
layout="topleft"
left="10"
name="control_panel"
top_pad="5">
<!--
<!--
Notes:
This panel holds buttons of notification. Change of its size can affect the layout of buttons.
This panel holds buttons of notification. Change of its size can affect the layout of buttons.
-->
</panel>
</panel>
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
bg_alpha_color="PanelNotificationBackground"
bg_opaque_color="PanelNotificationBackground"
chrome="true"
height="270"
height="220"
label="script_question_panel"
layout="topleft"
left="0"
Expand Down Expand Up @@ -39,9 +39,9 @@
width="285">
</panel>
<text
follows="all"
follows="left|right|top"
font="SansSerifBold"
height="55"
height="15"
layout="topleft"
mouse_opaque="false"
name="bottom_info_message"
Expand Down
3 changes: 3 additions & 0 deletions indra/newview/skins/default/xui/en/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -518,6 +518,8 @@ http://secondlife.com/support for help fixing this problem.
<string name="reconnect_nearby">You will now be reconnected to Nearby Voice Chat</string>
<string name="ScriptQuestionCautionChatGranted">'[OBJECTNAME]', an object owned by '[OWNERNAME]', located in [REGIONNAME] at [REGIONPOS], has been granted permission to: [PERMISSIONS].</string>
<string name="ScriptQuestionCautionChatDenied">'[OBJECTNAME]', an object owned by '[OWNERNAME]', located in [REGIONNAME] at [REGIONPOS], has been denied permission to: [PERMISSIONS].</string>
<string name="ScriptTakeMoneyCaution">The object &apos;&lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;&apos; wants total access to your Linden Dollars account. If you allow access, it can remove funds from your account at any time, or empty your account completely, on an ongoing basis with no additional warnings.</string>
<string name="PrivilegedLandAccessCaution">The object &apos;&lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;&apos; wants privileged access to your land. If you allow access it may sell your land with no additional warnings.</string>
<string name="AdditionalPermissionsRequestHeader">If you allow access to your account, you will also be allowing the object to:</string>
<string name="ScriptTakeMoney">Take Linden dollars (L$) from you</string>
<string name="ActOnControlInputs">Act on your control inputs</string>
Expand All @@ -535,6 +537,7 @@ http://secondlife.com/support for help fixing this problem.
<string name="ChangeYourDefaultAnimations">Change your default animations</string>
<string name="ForceSitAvatar">Force your avatar to sit</string>
<string name="ChangeEnvSettings">Change your environment settings</string>
<string name="PrivilegedLandAccess">Sell land on your behalf.</string>

<string name="NotConnected">Not Connected</string>
<string name="AgentNameSubst">(You)</string> <!-- Substitution for agent name -->
Expand Down
Loading