From 44aecbf4eca7c2d94ed88f11dedd237e93b01010 Mon Sep 17 00:00:00 2001
From: RevolutionSmythe
Date: Fri, 18 Mar 2011 19:26:19 -0500
Subject: Fix setting the viewer offset time from OpenRegionSettings, and also
 have it show what UTC offset it is representing in the time bar.

---
 linden/indra/llcommon/lltimer.cpp              |  6 +++---
 linden/indra/newview/kowopenregionsettings.cpp |  6 +++++-
 linden/indra/newview/viewertime.cpp            | 18 ++++++++++++++----
 3 files changed, 22 insertions(+), 8 deletions(-)

(limited to 'linden/indra')

diff --git a/linden/indra/llcommon/lltimer.cpp b/linden/indra/llcommon/lltimer.cpp
index 2d283ec..b825c1e 100644
--- a/linden/indra/llcommon/lltimer.cpp
+++ b/linden/indra/llcommon/lltimer.cpp
@@ -529,14 +529,14 @@ struct tm* utc_to_offset_time(time_t utc_time, S32 offset, BOOL DST)
 {
 	if (DST)
 	{
-		//Subtract one then
-		offset--;
+		//Add one then
+		offset++;
 	}
 
 	// We subtract off the PST/PDT offset _before_ getting
 	// "UTC" time, because this will handle wrapping around
 	// for 5 AM UTC -> 10 PM PDT of the previous day.
-	utc_time -= offset * MIN_PER_HOUR * SEC_PER_MIN;
+	utc_time -= (-1 * offset) * MIN_PER_HOUR * SEC_PER_MIN;
  
 	// Internal buffer to PST/PDT (see above)
 	struct tm* internal_time = gmtime(&utc_time);
diff --git a/linden/indra/newview/kowopenregionsettings.cpp b/linden/indra/newview/kowopenregionsettings.cpp
index ef14d2a..0c4bb38 100644
--- a/linden/indra/newview/kowopenregionsettings.cpp
+++ b/linden/indra/newview/kowopenregionsettings.cpp
@@ -37,6 +37,7 @@
 #include "llfloaterregioninfo.h"
 #include "llfloaterworldmap.h"
 #include "llvoiceclient.h"
+#include "viewertime.h"
 
 //DEBUG includes
 //#include "llsdserialize.h" //LLSDNotationStreamer - for dumping LLSD to string
@@ -150,12 +151,15 @@ class OpenRegionInfoUpdate : public LLHTTPNode
 		}
 		if ( body.has("OffsetOfUTC") )
 		{
-			gSavedSettings.setS32("TimeOffset", body["OffsetOfUTC"].asReal());
+			gSavedSettings.setS32("TimeOffset", body["OffsetOfUTC"].asInteger());
 			gSavedSettings.setBOOL("UseTimeOffset", true);
+			ViewerTime::sUseTimeOffset = true;
+			ViewerTime::sTimeOffset = gSavedSettings.getS32("TimeOffset");
 		}
 		if ( body.has("OffsetOfUTCDST") )
 		{
 			gSavedSettings.setBOOL("TimeOffsetDST", body["OffsetOfUTCDST"].asInteger() == 1 ? TRUE : FALSE);
+			ViewerTime::sTimeOffsetDST = gSavedSettings.getBOOL("TimeOffsetDST");
 		}
 		if ( body.has("RenderWater") )
 		{
diff --git a/linden/indra/newview/viewertime.cpp b/linden/indra/newview/viewertime.cpp
index 06436b6..8a65a23 100644
--- a/linden/indra/newview/viewertime.cpp
+++ b/linden/indra/newview/viewertime.cpp
@@ -27,7 +27,8 @@
 * COMPLETENESS OR PERFORMANCE.
 * $/LicenseInfo$
 */
-
+
+#include <sstream> 
 #include "llviewerprecompiledheaders.h"
 
 #include "llappviewer.h" // for gPacificDaylightTime
@@ -129,10 +130,19 @@ void ViewerTime::refresh()
 			if (hour == 0) hour = 12;
 		}
 
-		mTZ = "PST";
-		if (gPacificDaylightTime)
+		if (sUseTimeOffset)
+		{
+			std::stringstream myString;
+			myString << "UTC " << sTimeOffset;
+			mTZ = myString.str();
+		}
+		else
 		{
-			mTZ = "PDT";
+			mTZ = "PST";
+			if (gPacificDaylightTime)
+			{
+				mTZ = "PDT";
+			}
 		}
 	}
 	else // just UTC
-- 
cgit v1.1