svn merge -r76807:77355 svn+ssh://svn.lindenlab.com/svn/linden/branches/Branch_1-18-6-Viewer --> release

Pick up fixes made to 1.18.6 Viewer, including:

* DEV-8584 Replace "Second Life" with Channel name in viewer crash log reports
* DEV-8384 Connect button doesn't enable
* DEV-8408 Unable to edit First/last name and password fields in viewer login
* DEV-8423 VWR-3948: Underlayers no longer removable by pie menu in Windlight, release candidates
* DEV-8557 Crash on login page when using Logitech LCD Keyboard
* DEV-8507 Crash reporter has no default server to send to when crashing before agent connect
* DEV-8531 viewer_manifest.py broken for 64-bit builds
* DEV-8286 German Translation of the "Release Keys" tab is incorrect
* DEV-7419 Unable to set 'Group Access' for land that is also 'Public Access' (Was VWR-3667)
* DEV-6851 Integrate html error page with client
master
Josh Bell 2008-01-12 00:43:42 +00:00
parent dc2684fa1d
commit e7a8acadc4
13 changed files with 100 additions and 46 deletions

View File

@ -265,6 +265,7 @@ Seg Baphomet
VWR-1585
VWR-1586
VWR-3206
VWR-2488
SignpostMarv Martin
VWR-153
VWR-154

View File

@ -35,7 +35,7 @@
const S32 LL_VERSION_MAJOR = 1;
const S32 LL_VERSION_MINOR = 18;
const S32 LL_VERSION_PATCH = 6;
const S32 LL_VERSION_BUILD = 3;
const S32 LL_VERSION_BUILD = 4;
const char * const LL_CHANNEL = "Second Life Release";

View File

@ -1,4 +1,4 @@
/**
/**
* @file llcrashlogger.cpp
* @brief Crash logger implementation
*
@ -144,9 +144,18 @@ void LLCrashLogger::gatherFiles()
mCrashHost = "https://";
mCrashHost += mDebugLog["CurrentSimHost"].asString();
mCrashHost += ":12043/crash/report";
mAltCrashHost = "https://";
mAltCrashHost += mDebugLog["GridUtilHost"].asString();
mAltCrashHost += ":12043/crash/report";
// Use login servers as the alternate, since they are already load balanced and have a known name
// First, check to see if we have a valid grid name. If not, use agni.
mAltCrashHost = "https://login.";
if(mDebugLog["GridName"].asString() != "")
{
mAltCrashHost += mDebugLog["GridName"].asString();
}
else
{
mAltCrashHost += "agni";
}
mAltCrashHost += ".lindenlab.com:12043/crash/report";
mCrashInfo["DebugLog"] = mDebugLog;
mFileMap["StatsLog"] = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,"stats.log");
@ -230,9 +239,6 @@ bool LLCrashLogger::sendCrashLogs()
updateApplication("Sending logs...");
}
//util.* servers no longer have a public interface, so there's no alternate server anymore.
//leaving this in if we decide we need another alternate server for crash report receiving.
/*
if(!gSent)
{
gBreak = false;
@ -243,7 +249,7 @@ bool LLCrashLogger::sendCrashLogs()
updateApplication("Sending logs to Alternate Server...");
}
}
*/
mSentCrashLogs = gSent;

View File

@ -1,5 +1,5 @@
/* Localized versions of Info.plist keys */
CFBundleName = "Second Life";
CFBundleShortVersionString = "Second Life version 1.18.6.3";
CFBundleGetInfoString = "Second Life version 1.18.6.3, Copyright 2004-2007 Linden Research, Inc.";
CFBundleShortVersionString = "Second Life version 1.18.6.4";
CFBundleGetInfoString = "Second Life version 1.18.6.4, Copyright 2004-2007 Linden Research, Inc.";

View File

@ -32,7 +32,7 @@
</dict>
</array>
<key>CFBundleVersion</key>
<string>1.18.6.3</string>
<string>1.18.6.4</string>
<key>CSResourcesFileMapped</key>
<true/>
</dict>

View File

@ -2501,7 +2501,7 @@ void LLAppViewer::writeSystemInfo()
{
gDebugInfo["SLLog"] = LLError::logFileName();
gDebugInfo["ClientInfo"]["Name"] = gSecondLife;
gDebugInfo["ClientInfo"]["Name"] = gChannelName;
gDebugInfo["ClientInfo"]["MajorVersion"] = LL_VERSION_MAJOR;
gDebugInfo["ClientInfo"]["MinorVersion"] = LL_VERSION_MINOR;
gDebugInfo["ClientInfo"]["PatchVersion"] = LL_VERSION_PATCH;

View File

@ -2536,7 +2536,7 @@ LLPanelLandAccess::LLPanelLandAccess(LLParcelSelectionHandle& parcel)
BOOL LLPanelLandAccess::postBuild()
{
childSetCommitCallback("public_access", onCommitAny, this);
childSetCommitCallback("public_access", onCommitPublicAccess, this);
childSetCommitCallback("limit_payment", onCommitAny, this);
childSetCommitCallback("limit_age_verified", onCommitAny, this);
childSetCommitCallback("GroupCheck", onCommitAny, this);
@ -2580,7 +2580,7 @@ void LLPanelLandAccess::refresh()
{
BOOL use_access_list = parcel->getParcelFlag(PF_USE_ACCESS_LIST);
BOOL use_group = parcel->getParcelFlag(PF_USE_ACCESS_GROUP);
BOOL public_access = !use_access_list;
BOOL public_access = !use_access_list && !use_group;
childSetValue("public_access", public_access );
childSetValue("GroupCheck", use_group );
@ -2767,6 +2767,7 @@ void LLPanelLandAccess::refresh_ui()
{
childSetToolTip("Only Allow", LLString());
}
childSetEnabled("GroupCheck", FALSE);
childSetEnabled("PassCheck", FALSE);
childSetEnabled("pass_combo", FALSE);
childSetEnabled("AccessList", FALSE);
@ -2775,6 +2776,11 @@ void LLPanelLandAccess::refresh_ui()
{
childSetEnabled("limit_payment", FALSE);
childSetEnabled("limit_age_verified", FALSE);
char group_name[MAX_STRING]; /*Flawfinder: ignore*/
if (gCacheName->getGroupName(parcel->getGroupID(), group_name))
{
childSetEnabled("GroupCheck", can_manage_allowed);
}
BOOL group_access = childGetValue("GroupCheck").asBoolean();
BOOL sell_passes = childGetValue("PassCheck").asBoolean();
childSetEnabled("PassCheck", can_manage_allowed);
@ -2785,13 +2791,6 @@ void LLPanelLandAccess::refresh_ui()
childSetEnabled("HoursSpin", can_manage_allowed);
}
}
char group_name[MAX_STRING]; /*Flawfinder: ignore*/
if (gCacheName->getGroupName(parcel->getGroupID(), group_name))
{
childSetEnabled("GroupCheck", can_manage_allowed);
}
childSetEnabled("AccessList", can_manage_allowed);
S32 allowed_list_count = parcel->mAccessList.size();
childSetEnabled("add_allowed", can_manage_allowed && allowed_list_count < PARCEL_MAX_ACCESS_LIST);
@ -2827,6 +2826,29 @@ void LLPanelLandAccess::draw()
LLPanel::draw();
}
// static
void LLPanelLandAccess::onCommitPublicAccess(LLUICtrl *ctrl, void *userdata)
{
LLPanelLandAccess *self = (LLPanelLandAccess *)userdata;
LLParcel* parcel = self->mParcel->getParcel();
if (!parcel)
{
return;
}
// If we disabled public access, enable group access by default (if applicable)
BOOL public_access = self->childGetValue("public_access").asBoolean();
if (public_access == FALSE)
{
char group_name[MAX_STRING]; /*Flawfinder: ignore*/
if (gCacheName->getGroupName(parcel->getGroupID(), group_name))
{
self->childSetValue("GroupCheck", public_access ? FALSE : TRUE);
}
}
onCommitAny(ctrl, userdata);
}
// static
void LLPanelLandAccess::onCommitAny(LLUICtrl *ctrl, void *userdata)
@ -2841,7 +2863,6 @@ void LLPanelLandAccess::onCommitAny(LLUICtrl *ctrl, void *userdata)
// Extract data from UI
BOOL public_access = self->childGetValue("public_access").asBoolean();
BOOL use_access_group = self->childGetValue("GroupCheck").asBoolean();
if (use_access_group)
{
@ -2859,6 +2880,7 @@ void LLPanelLandAccess::onCommitAny(LLUICtrl *ctrl, void *userdata)
if (public_access)
{
use_access_list = FALSE;
use_access_group = FALSE;
limit_payment = self->childGetValue("limit_payment").asBoolean();
limit_age_verified = self->childGetValue("limit_age_verified").asBoolean();
}

View File

@ -395,6 +395,7 @@ public:
void refreshNames();
virtual void draw();
static void onCommitPublicAccess(LLUICtrl* ctrl, void *userdata);
static void onCommitAny(LLUICtrl* ctrl, void *userdata);
static void onClickAddAccess(void*);
static void callbackAvatarCBAccess(const std::vector<std::string>& names, const std::vector<LLUUID>& ids, void* userdata);

View File

@ -85,6 +85,25 @@ const S32 MAX_PASSWORD = 16;
LLPanelLogin *LLPanelLogin::sInstance = NULL;
class LLLoginRefreshHandler : public LLCommandHandler
{
public:
LLLoginRefreshHandler() : LLCommandHandler("login_refresh") { }
bool handle(const LLSD& tokens, const LLSD& queryMap)
{
#if LL_LIBXUL_ENABLED
if (LLStartUp::getStartupState() < STATE_LOGIN_CLEANUP)
{
LLPanelLogin::loadLoginPage();
}
#endif
return true;
}
};
LLLoginRefreshHandler gLoginRefreshHandler;
//parses the input url and returns true if afterwards
//a web-login-key, firstname and lastname is set
bool LLLoginHandler::parseDirectLogin(std::string url)

View File

@ -777,9 +777,6 @@ BOOL idle_startup()
gSavedSettings.setString("FirstName", firstname);
gSavedSettings.setString("LastName", lastname);
llinfos << "Attempting login as: " << firstname << " " << lastname << llendl;
gDebugInfo["LoginName"] = firstname + " " + lastname;
}
@ -899,7 +896,7 @@ BOOL idle_startup()
if(STATE_LOGIN_AUTH_INIT == LLStartUp::getStartupState())
{
//#define LL_MINIMIAL_REQUESTED_OPTIONS
gDebugInfo["GridUtilHost"] = gGridInfo[gGridChoice].mName;
gDebugInfo["GridName"] = gGridInfo[gGridChoice].mLabel;
lldebugs << "STATE_LOGIN_AUTH_INIT" << llendl;
if (!gUserAuthp)
@ -1486,6 +1483,7 @@ BOOL idle_startup()
// Finish agent initialization. (Requires gSavedSettings, builds camera)
gAgent.init();
set_underclothes_menu_options();
// Since we connected, save off the settings so the user doesn't have to
// type the name/password again if we crash.

View File

@ -607,6 +607,21 @@ void initialize_menus();
//
// Break up groups of more than 6 items with separators
//-----------------------------------------------------------------------------
void set_underclothes_menu_options()
{
if (gMenuHolder && gAgent.isTeen())
{
gMenuHolder->getChildByName("Self Underpants", TRUE)->setVisible(FALSE);
gMenuHolder->getChildByName("Self Undershirt", TRUE)->setVisible(FALSE);
}
if (gMenuBarView && gAgent.isTeen())
{
gMenuBarView->getChildByName("Menu Underpants", TRUE)->setVisible(FALSE);
gMenuBarView->getChildByName("Menu Undershirt", TRUE)->setVisible(FALSE);
}
}
void init_menus()
{
S32 top = gViewerWindow->getRootView()->getRect().getHeight();
@ -643,12 +658,6 @@ void init_menus()
gDetachScreenPieMenu = (LLPieMenu*)gMenuHolder->getChildByName("Object Detach HUD", true);
gDetachPieMenu = (LLPieMenu*)gMenuHolder->getChildByName("Object Detach", true);
if (gAgent.isTeen())
{
gMenuHolder->getChildByName("Self Underpants", TRUE)->setVisible(FALSE);
gMenuHolder->getChildByName("Self Undershirt", TRUE)->setVisible(FALSE);
}
gPieAvatar = gUICtrlFactory->buildPieMenu("menu_pie_avatar.xml", gMenuHolder);
gPieObject = gUICtrlFactory->buildPieMenu("menu_pie_object.xml", gMenuHolder);
@ -710,12 +719,6 @@ void init_menus()
gAttachSubMenu = gMenuBarView->getChildMenuByName("Attach Object", TRUE);
gDetachSubMenu = gMenuBarView->getChildMenuByName("Detach Object", TRUE);
if (gAgent.isTeen())
{
gMenuBarView->getChildByName("Menu Underpants", TRUE)->setVisible(FALSE);
gMenuBarView->getChildByName("Menu Undershirt", TRUE)->setVisible(FALSE);
}
// TomY TODO convert these two
LLMenuGL*menu;
@ -763,6 +766,8 @@ void init_menus()
}
void init_landmark_menu(LLMenuGL* menu)
{
if (!menu) return;

View File

@ -93,6 +93,7 @@ BOOL enable_god_liaison(void* user_data);
BOOL enable_god_customer_service(void* user_data);
BOOL enable_god_basic(void* user_data);
void handle_show_newest_map(void*);
void set_underclothes_menu_options();
void exchange_callingcard(const LLUUID& dest_id);

View File

@ -409,7 +409,7 @@ class DarwinManifest(ViewerManifest):
# make sure we don't have stale files laying about
self.remove(sparsename, finalname)
self.run_command('hdiutil create "%(sparse)s" -volname "%(channel)s" -fs HFS+ -type SPARSE -megabytes 300' % {
self.run_command('hdiutil create "%(sparse)s" -volname "%(channel)s" -fs HFS+ -type SPARSE -megabytes 300 -layout SPUD' % {
'sparse':sparsename,
'channel':channel_standin})
@ -523,13 +523,14 @@ class Linux_x86_64Manifest(LinuxManifest):
super(Linux_x86_64Manifest, self).construct()
self.path("secondlife-x86_64-bin-stripped","bin/do-not-directly-run-secondlife-bin")
self.path("../linux_crash_logger/linux-crash-logger-x86_64-bin-stripped","linux-crash-logger.bin")
# TODO: I get the sense that this isn't fully fleshed out
if self.prefix("../../libraries/x86_64-linux/lib_release_client", "lib"):
self.path("libkdu_v42R.so")
self.path("libxmlrpc.so.0")
# self.path("libllkdu.so", "../bin/libllkdu.so") # llkdu goes in bin for some reason
self.end_prefix("lib")
self.path("linux_tools/launch_url.sh","launch_url.sh")
if self.prefix("res-sdl"):
self.path("*")
# recurse
self.end_prefix("res-sdl")
self.path("featuretable_linux.txt")
self.path("secondlife-i686.supp")
if __name__ == "__main__":
main(srctree=viewer_dir, dsttree=os.path.join(viewer_dir, "packaged"))