From e7a8acadc46c4466f088dfca05c15f854321d69d Mon Sep 17 00:00:00 2001
From: Josh Bell <josh@lindenlab.com>
Date: Sat, 12 Jan 2008 00:43:42 +0000
Subject: [PATCH] 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
---
 doc/contributions.txt                         |  1 +
 indra/llcommon/llversionviewer.h              |  2 +-
 indra/llcrashlogger/llcrashlogger.cpp         | 22 ++++++----
 indra/newview/English.lproj/InfoPlist.strings |  4 +-
 indra/newview/Info-SecondLife.plist           |  2 +-
 indra/newview/llappviewer.cpp                 |  2 +-
 indra/newview/llfloaterland.cpp               | 42 ++++++++++++++-----
 indra/newview/llfloaterland.h                 |  1 +
 indra/newview/llpanellogin.cpp                | 19 +++++++++
 indra/newview/llstartup.cpp                   |  6 +--
 indra/newview/llviewermenu.cpp                | 29 +++++++------
 indra/newview/llviewermenu.h                  |  1 +
 indra/newview/viewer_manifest.py              | 15 +++----
 13 files changed, 100 insertions(+), 46 deletions(-)

diff --git a/doc/contributions.txt b/doc/contributions.txt
index 74b316b3ec0..9292d1ba401 100644
--- a/doc/contributions.txt
+++ b/doc/contributions.txt
@@ -265,6 +265,7 @@ Seg Baphomet
 	VWR-1585
 	VWR-1586
 	VWR-3206
+	VWR-2488
 SignpostMarv Martin
 	VWR-153
 	VWR-154
diff --git a/indra/llcommon/llversionviewer.h b/indra/llcommon/llversionviewer.h
index d051fa6043d..c82a9b788b0 100644
--- a/indra/llcommon/llversionviewer.h
+++ b/indra/llcommon/llversionviewer.h
@@ -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";
 
diff --git a/indra/llcrashlogger/llcrashlogger.cpp b/indra/llcrashlogger/llcrashlogger.cpp
index df446a7239c..df939a9c99b 100755
--- a/indra/llcrashlogger/llcrashlogger.cpp
+++ b/indra/llcrashlogger/llcrashlogger.cpp
@@ -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;
 
diff --git a/indra/newview/English.lproj/InfoPlist.strings b/indra/newview/English.lproj/InfoPlist.strings
index dff6ab4cbbe..81d40ac4842 100644
--- a/indra/newview/English.lproj/InfoPlist.strings
+++ b/indra/newview/English.lproj/InfoPlist.strings
@@ -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.";
diff --git a/indra/newview/Info-SecondLife.plist b/indra/newview/Info-SecondLife.plist
index 73117e1e066..44e9a47438e 100644
--- a/indra/newview/Info-SecondLife.plist
+++ b/indra/newview/Info-SecondLife.plist
@@ -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>
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 96d9670ac95..28496dc9101 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -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;
diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp
index abde6ccfcba..2167e1f2ca3 100644
--- a/indra/newview/llfloaterland.cpp
+++ b/indra/newview/llfloaterland.cpp
@@ -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();
 	}
diff --git a/indra/newview/llfloaterland.h b/indra/newview/llfloaterland.h
index 4bb88aa127a..4407e0b5b44 100644
--- a/indra/newview/llfloaterland.h
+++ b/indra/newview/llfloaterland.h
@@ -395,6 +395,7 @@ class LLPanelLandAccess
 	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);
diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp
index 2cac860423c..cf8fff8543d 100644
--- a/indra/newview/llpanellogin.cpp
+++ b/indra/newview/llpanellogin.cpp
@@ -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)
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 96af7d2bd2d..675a447dc48 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -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.
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 4c7229b0d9f..ab82fef6cc6 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -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;
diff --git a/indra/newview/llviewermenu.h b/indra/newview/llviewermenu.h
index 6814c31eb80..003e3efe429 100644
--- a/indra/newview/llviewermenu.h
+++ b/indra/newview/llviewermenu.h
@@ -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);
 
diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py
index abd3b269f6c..c7d2cb73186 100755
--- a/indra/newview/viewer_manifest.py
+++ b/indra/newview/viewer_manifest.py
@@ -409,7 +409,7 @@ def package_finish(self):
                 # 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 @@ def construct(self):
                 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"))
-- 
GitLab