aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorMcCabe Maxsted2010-04-14 00:20:56 -0700
committerMcCabe Maxsted2010-04-14 00:20:56 -0700
commit834a60163bba95d53c297c791e49a597b87144f3 (patch)
tree0dc2c00c07be28940a72011ef9291cd817a2c0d5
parentAdded prim media functions and new script functions from SL server 1.38.0 (diff)
parentfix bring help-f1 page under control of hippogridmanager (diff)
downloadmeta-impy-834a60163bba95d53c297c791e49a597b87144f3.zip
meta-impy-834a60163bba95d53c297c791e49a597b87144f3.tar.gz
meta-impy-834a60163bba95d53c297c791e49a597b87144f3.tar.bz2
meta-impy-834a60163bba95d53c297c791e49a597b87144f3.tar.xz
Merge commit 'armin/beta2-bugfixes' into 1.3-beta2bugfixes
-rw-r--r--linden/indra/lib/python/indra/util/llmanifest.py9
-rw-r--r--linden/indra/llcommon/indra_constants.h1
-rw-r--r--linden/indra/llcommon/llsecondlifeurls.cpp45
-rw-r--r--linden/indra/llcommon/llsecondlifeurls.h34
-rw-r--r--linden/indra/newview/app_settings/default_grids.xml14
-rw-r--r--linden/indra/newview/app_settings/settings.xml13
-rw-r--r--linden/indra/newview/hippoGridManager.cpp12
-rw-r--r--linden/indra/newview/hippoLimits.cpp5
-rw-r--r--linden/indra/newview/hippoLimits.h3
-rw-r--r--linden/indra/newview/llappviewer.cpp4
-rw-r--r--linden/indra/newview/llfloatergroups.cpp8
-rw-r--r--linden/indra/newview/llfloaterhtmlhelp.cpp36
-rw-r--r--linden/indra/newview/llfloatertools.cpp25
-rw-r--r--linden/indra/newview/llmanipscale.cpp30
-rw-r--r--linden/indra/newview/llmanipscale.h3
-rw-r--r--linden/indra/newview/llmaniptranslate.cpp7
-rw-r--r--linden/indra/newview/llpanellogin.cpp63
-rw-r--r--linden/indra/newview/llpanelobject.cpp20
-rw-r--r--linden/indra/newview/llstartup.cpp55
-rw-r--r--linden/indra/newview/lltoolgrab.cpp7
-rw-r--r--linden/indra/newview/llviewermenu.cpp23
-rw-r--r--linden/indra/newview/llviewermessage.cpp18
-rw-r--r--linden/indra/newview/llvoavatar.cpp15
-rw-r--r--linden/indra/newview/llvoiceclient.cpp5
-rw-r--r--linden/indra/newview/llworld.cpp5
-rw-r--r--linden/indra/newview/llworld.h3
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/notifications.xml9
-rwxr-xr-xlinden/indra/newview/viewer_manifest.py2
-rwxr-xr-xlinden/scripts/make_changelog.py59
29 files changed, 260 insertions, 273 deletions
diff --git a/linden/indra/lib/python/indra/util/llmanifest.py b/linden/indra/lib/python/indra/util/llmanifest.py
index 369cc81..7a2505d 100644
--- a/linden/indra/lib/python/indra/util/llmanifest.py
+++ b/linden/indra/lib/python/indra/util/llmanifest.py
@@ -608,7 +608,7 @@ class LLManifest(object):
608 d = src_re.sub(d_template, s.replace('\\', '/')) 608 d = src_re.sub(d_template, s.replace('\\', '/'))
609 yield os.path.normpath(s), os.path.normpath(d) 609 yield os.path.normpath(s), os.path.normpath(d)
610 610
611 def path(self, src, dst=None): 611 def path(self, src, dst=None, required=True):
612 sys.stdout.write("Processing %s => %s ... " % (src, dst)) 612 sys.stdout.write("Processing %s => %s ... " % (src, dst))
613 sys.stdout.flush() 613 sys.stdout.flush()
614 if src == None: 614 if src == None:
@@ -625,9 +625,10 @@ class LLManifest(object):
625 assert(s != d) 625 assert(s != d)
626 count += self.process_file(s, d) 626 count += self.process_file(s, d)
627 else: 627 else:
628 # if we're specifying a single path (not a glob), 628 # if we're specifying a single path (not a glob), and
629 # we should error out if it doesn't exist 629 # it's required, error out if it doesn't exist
630 self.check_file_exists(src) 630 if required:
631 self.check_file_exists(src)
631 # if it's a directory, recurse through it 632 # if it's a directory, recurse through it
632 if os.path.isdir(src): 633 if os.path.isdir(src):
633 count += self.process_directory(src, dst) 634 count += self.process_directory(src, dst)
diff --git a/linden/indra/llcommon/indra_constants.h b/linden/indra/llcommon/indra_constants.h
index ae7863d..96c0a1f 100644
--- a/linden/indra/llcommon/indra_constants.h
+++ b/linden/indra/llcommon/indra_constants.h
@@ -102,7 +102,6 @@ const F32 DEFAULT_AGENT_HEIGHT = 1.9f;
102const F32 MAX_AGENT_HEIGHT = 2.65f - 2.0f * COLLISION_TOLERANCE; 102const F32 MAX_AGENT_HEIGHT = 2.65f - 2.0f * COLLISION_TOLERANCE;
103 103
104// For linked sets 104// For linked sets
105const S32 MAX_CHILDREN_PER_TASK = 255;
106const S32 MAX_CHILDREN_PER_PHYSICAL_TASK = 32; 105const S32 MAX_CHILDREN_PER_PHYSICAL_TASK = 32;
107 106
108const S32 MAX_JOINTS_PER_OBJECT = 1; // limiting to 1 until Havok 2.x 107const S32 MAX_JOINTS_PER_OBJECT = 1; // limiting to 1 until Havok 2.x
diff --git a/linden/indra/llcommon/llsecondlifeurls.cpp b/linden/indra/llcommon/llsecondlifeurls.cpp
index d7de8d8..1669f7b 100644
--- a/linden/indra/llcommon/llsecondlifeurls.cpp
+++ b/linden/indra/llcommon/llsecondlifeurls.cpp
@@ -4,7 +4,7 @@
4 * 4 *
5 * $LicenseInfo:firstyear=2005&license=viewergpl$ 5 * $LicenseInfo:firstyear=2005&license=viewergpl$
6 * 6 *
7 * Copyright (c) 2005-2009, Linden Research, Inc. 7 * Copyright (c) 2005-2010, Linden Research, Inc.
8 * 8 *
9 * Second Life Viewer Source Code 9 * Second Life Viewer Source Code
10 * The source code in this file ("Source Code") is provided by Linden Lab 10 * The source code in this file ("Source Code") is provided by Linden Lab
@@ -33,56 +33,15 @@
33#include "linden_common.h" 33#include "linden_common.h"
34#include "llsecondlifeurls.h" 34#include "llsecondlifeurls.h"
35 35
36const std::string CREATE_ACCOUNT_URL (
37 "http://secondlife.com/registration/");
38
39const std::string MANAGE_ACCOUNT (
40 "http://secondlife.com/account/");
41
42const std::string AUCTION_URL ( 36const std::string AUCTION_URL (
43 "http://secondlife.com/auctions/auction-detail.php?id="); 37 "http://secondlife.com/auctions/auction-detail.php?id=");
44 38
45const std::string EVENTS_URL ( 39const std::string EVENTS_URL (
46 "http://secondlife.com/events/"); 40 "http://secondlife.com/events/");
47 41
48const std::string TIER_UP_URL (
49 "http://secondlife.com/app/landtier");
50
51const std::string LAND_URL (
52 "http://secondlife.com/app/landtier");
53
54const std::string UPGRADE_TO_PREMIUM_URL (
55 "http://secondlife.com/app/upgrade/");
56
57const std::string DIRECTX_9_URL (
58 "http://secondlife.com/support/");
59
60const std::string AMD_AGP_URL (
61 "http://secondlife.com/support/");
62
63const std::string VIA_URL (
64 "http://secondlife.com/support/");
65
66const std::string SUPPORT_URL (
67 "http://secondlife.com/support/");
68
69const std::string INTEL_CHIPSET_URL (
70 "http://secondlife.com/support/");
71
72const std::string SIS_CHIPSET_URL (
73 "http://secondlife.com/support/");
74
75const std::string BLOGS_URL (
76 "http://blog.secondlife.com/");
77
78const std::string BUY_CURRENCY_URL ( 42const std::string BUY_CURRENCY_URL (
79 "http://secondlife.com/app/currency/"); 43 "http://secondlife.com/app/currency/");
80 44
81const std::string LSL_DOC_URL (
82 "http://secondlife.com/app/lsldoc/");
83
84const std::string SL_KB_URL (
85 "http://secondlife.com/knowledgebase/");
86 45
87const std::string RELEASE_NOTES_BASE_URL ( 46const std::string RELEASE_NOTES_BASE_URL (
88 "http://imprudenceviewer.org/wiki/Release_Notes/"); 47 "http://imprudenceviewer.org/wiki/Release_Notes/"); \ No newline at end of file
diff --git a/linden/indra/llcommon/llsecondlifeurls.h b/linden/indra/llcommon/llsecondlifeurls.h
index 9fd75c3..9c64b57 100644
--- a/linden/indra/llcommon/llsecondlifeurls.h
+++ b/linden/indra/llcommon/llsecondlifeurls.h
@@ -4,7 +4,7 @@
4 * 4 *
5 * $LicenseInfo:firstyear=2004&license=viewergpl$ 5 * $LicenseInfo:firstyear=2004&license=viewergpl$
6 * 6 *
7 * Copyright (c) 2004-2009, Linden Research, Inc. 7 * Copyright (c) 2004-2010, Linden Research, Inc.
8 * 8 *
9 * Second Life Viewer Source Code 9 * Second Life Viewer Source Code
10 * The source code in this file ("Source Code") is provided by Linden Lab 10 * The source code in this file ("Source Code") is provided by Linden Lab
@@ -33,46 +33,14 @@
33#ifndef LL_LLSECONDLIFEURLS_H 33#ifndef LL_LLSECONDLIFEURLS_H
34#define LL_LLSECONDLIFEURLS_H 34#define LL_LLSECONDLIFEURLS_H
35 35
36// Account registration web page
37extern const std::string CREATE_ACCOUNT_URL;
38
39// Manage Account
40extern const std::string MANAGE_ACCOUNT;
41 36
42extern const std::string AUCTION_URL; 37extern const std::string AUCTION_URL;
43 38
44extern const std::string EVENTS_URL; 39extern const std::string EVENTS_URL;
45 40
46// Tier up to a new land level.
47extern const std::string TIER_UP_URL;
48
49// Tier up to a new land level.
50extern const std::string LAND_URL;
51
52// Upgrade from basic membership to premium membership
53extern const std::string UPGRADE_TO_PREMIUM_URL;
54
55// How to get DirectX 9
56extern const std::string DIRECTX_9_URL;
57
58// Out of date VIA chipset
59extern const std::string VIA_URL;
60
61// Support URL
62extern const std::string SUPPORT_URL;
63
64// Linden Blogs page
65extern const std::string BLOGS_URL;
66
67// Currency page 41// Currency page
68extern const std::string BUY_CURRENCY_URL; 42extern const std::string BUY_CURRENCY_URL;
69 43
70// LSL script wiki
71extern const std::string LSL_DOC_URL;
72
73// SL KnowledgeBase page
74extern const std::string SL_KB_URL;
75
76// Release Notes Redirect URL for Server and Viewer 44// Release Notes Redirect URL for Server and Viewer
77extern const std::string RELEASE_NOTES_BASE_URL; 45extern const std::string RELEASE_NOTES_BASE_URL;
78 46
diff --git a/linden/indra/newview/app_settings/default_grids.xml b/linden/indra/newview/app_settings/default_grids.xml
index 13293cf..f11f513 100644
--- a/linden/indra/newview/app_settings/default_grids.xml
+++ b/linden/indra/newview/app_settings/default_grids.xml
@@ -10,20 +10,6 @@
10 <key>default_grids_version</key><string>0</string> 10 <key>default_grids_version</key><string>0</string>
11 </map> 11 </map>
12 12
13 <!-- Second Life -->
14 <map>
15 <key>gridnick</key><string>secondlife</string>
16 <key>gridname</key><string>Second Life</string>
17 <key>platform</key><string>SecondLife</string>
18 <key>loginuri</key><string>https://login.agni.lindenlab.com/cgi-bin/login.cgi</string>
19 <key>loginpage</key><string>http://secondlife.com/app/login/</string>
20 <key>helperuri</key><string>https://secondlife.com/helpers/</string>
21 <key>website</key><string>http://secondlife.com/</string>
22 <key>support</key><string>http://secondlife.com/support/</string>
23 <key>register</key><string>http://secondlife.com/registration/</string>
24 <key>password</key><string>http://secondlife.com/account/request.php</string>
25 </map>
26
27 <!-- Local Host --> 13 <!-- Local Host -->
28 <map> 14 <map>
29 <key>gridnick</key><string>localhost</string> 15 <key>gridnick</key><string>localhost</string>
diff --git a/linden/indra/newview/app_settings/settings.xml b/linden/indra/newview/app_settings/settings.xml
index 9c498c2..6643e43 100644
--- a/linden/indra/newview/app_settings/settings.xml
+++ b/linden/indra/newview/app_settings/settings.xml
@@ -6063,17 +6063,6 @@
6063 <key>Value</key> 6063 <key>Value</key>
6064 <integer>0</integer> 6064 <integer>0</integer>
6065 </map> 6065 </map>
6066 <key>LoggedIntoOpenSim</key>
6067 <map>
6068 <key>Comment</key>
6069 <string>Check whether or not we're in an OpenSimulator (default 0)</string>
6070 <key>Persist</key>
6071 <integer>1</integer>
6072 <key>Type</key>
6073 <string>Boolean</string>
6074 <key>Value</key>
6075 <integer>0</integer>
6076 </map>
6077 <key>LoginAsGod</key> 6066 <key>LoginAsGod</key>
6078 <map> 6067 <map>
6079 <key>Comment</key> 6068 <key>Comment</key>
@@ -12895,7 +12884,7 @@
12895 <key>Type</key> 12884 <key>Type</key>
12896 <string>String</string> 12885 <string>String</string>
12897 <key>Value</key> 12886 <key>Value</key>
12898 <string>secondlife</string> 12887 <string>osgrid</string>
12899 </map> 12888 </map>
12900 <key>KeepAppearance</key> 12889 <key>KeepAppearance</key>
12901 <map> 12890 <map>
diff --git a/linden/indra/newview/hippoGridManager.cpp b/linden/indra/newview/hippoGridManager.cpp
index 9ff2d39..f96e3ec 100644
--- a/linden/indra/newview/hippoGridManager.cpp
+++ b/linden/indra/newview/hippoGridManager.cpp
@@ -485,13 +485,11 @@ std::string HippoGridInfo::sanitizeUri(std::string &uri)
485 485
486void HippoGridInfo::initFallback() 486void HippoGridInfo::initFallback()
487{ 487{
488 FALLBACK_GRIDINFO.mGridNick = "secondlife"; 488 FALLBACK_GRIDINFO.mGridNick = "localhost";
489 FALLBACK_GRIDINFO.setPlatform(PLATFORM_SECONDLIFE); 489 FALLBACK_GRIDINFO.setPlatform(PLATFORM_OPENSIM);
490 FALLBACK_GRIDINFO.setGridName("Second Life"); 490 FALLBACK_GRIDINFO.setGridName("Local Host");
491 FALLBACK_GRIDINFO.setLoginUri("https://login.agni.lindenlab.com/cgi-bin/login.cgi"); 491 FALLBACK_GRIDINFO.setLoginUri("http://127.0.0.1:9000/");
492 FALLBACK_GRIDINFO.setLoginPage("http://secondlife.com/app/login/"); 492 FALLBACK_GRIDINFO.setHelperUri("http://127.0.0.1:9000/");
493 FALLBACK_GRIDINFO.setHelperUri("https://secondlife.com/helpers/");
494 FALLBACK_GRIDINFO.setWebSite("http://secondlife.com/");
495} 493}
496 494
497 495
diff --git a/linden/indra/newview/hippoLimits.cpp b/linden/indra/newview/hippoLimits.cpp
index dae81a6..96b3bee 100644
--- a/linden/indra/newview/hippoLimits.cpp
+++ b/linden/indra/newview/hippoLimits.cpp
@@ -33,13 +33,15 @@ void HippoLimits::setOpenSimLimits()
33 mMaxAgentGroups = 100; 33 mMaxAgentGroups = 100;
34 mMaxPrimScale = 256.0f; 34 mMaxPrimScale = 256.0f;
35 mMaxHeight = 10000.0f; 35 mMaxHeight = 10000.0f;
36 mMaxLinkedPrims = -1;
37
36 if (gHippoGridManager->getConnectedGrid()->isRenderCompat()) { 38 if (gHippoGridManager->getConnectedGrid()->isRenderCompat()) {
37 llinfos << "Using rendering compatible OpenSim limits." << llendl; 39 llinfos << "Using rendering compatible OpenSim limits." << llendl;
38 mMinHoleSize = 0.05f; 40 mMinHoleSize = 0.05f;
39 mMaxHollow = 0.95f; 41 mMaxHollow = 0.95f;
40 } else { 42 } else {
41 llinfos << "Using Hippo OpenSim limits." << llendl; 43 llinfos << "Using Hippo OpenSim limits." << llendl;
42 mMinHoleSize = 0.01f; 44 mMinHoleSize = 0.01f;
43 mMaxHollow = 0.99f; 45 mMaxHollow = 0.99f;
44 } 46 }
45} 47}
@@ -52,5 +54,6 @@ void HippoLimits::setSecondLifeLimits()
52 mMaxHeight = 4096.0f; 54 mMaxHeight = 4096.0f;
53 mMinHoleSize = 0.05f; 55 mMinHoleSize = 0.05f;
54 mMaxHollow = 0.95f; 56 mMaxHollow = 0.95f;
57 mMaxLinkedPrims = 255;
55} 58}
56 59
diff --git a/linden/indra/newview/hippoLimits.h b/linden/indra/newview/hippoLimits.h
index 900480b..7152bcc 100644
--- a/linden/indra/newview/hippoLimits.h
+++ b/linden/indra/newview/hippoLimits.h
@@ -12,15 +12,18 @@ public:
12 float getMinHoleSize() const { return mMinHoleSize; } 12 float getMinHoleSize() const { return mMinHoleSize; }
13 float getMaxHollow() const { return mMaxHollow; } 13 float getMaxHollow() const { return mMaxHollow; }
14 float getMaxPrimScale() const { return mMaxPrimScale; } 14 float getMaxPrimScale() const { return mMaxPrimScale; }
15 S32 getMaxLinkedPrims() const { return mMaxLinkedPrims; }
15 16
16 void setLimits(); 17 void setLimits();
17 18
18private: 19private:
19 int mMaxAgentGroups; 20 int mMaxAgentGroups;
21
20 float mMaxHeight; 22 float mMaxHeight;
21 float mMinHoleSize; 23 float mMinHoleSize;
22 float mMaxHollow; 24 float mMaxHollow;
23 float mMaxPrimScale; 25 float mMaxPrimScale;
26 S32 mMaxLinkedPrims;
24 27
25 void setOpenSimLimits(); 28 void setOpenSimLimits();
26 void setSecondLifeLimits(); 29 void setSecondLifeLimits();
diff --git a/linden/indra/newview/llappviewer.cpp b/linden/indra/newview/llappviewer.cpp
index ae2c294..a0700a9 100644
--- a/linden/indra/newview/llappviewer.cpp
+++ b/linden/indra/newview/llappviewer.cpp
@@ -1901,7 +1901,9 @@ bool LLAppViewer::initConfiguration()
1901 gHippoGridManager = new HippoGridManager(); 1901 gHippoGridManager = new HippoGridManager();
1902 gHippoGridManager->init(); 1902 gHippoGridManager->init();
1903 } 1903 }
1904 1904 if (!gHippoLimits) {
1905 gHippoLimits = new HippoLimits();
1906 }
1905 1907
1906 //initGridChoice(); 1908 //initGridChoice();
1907 1909
diff --git a/linden/indra/newview/llfloatergroups.cpp b/linden/indra/newview/llfloatergroups.cpp
index 874249b..e94734d 100644
--- a/linden/indra/newview/llfloatergroups.cpp
+++ b/linden/indra/newview/llfloatergroups.cpp
@@ -58,6 +58,8 @@
58#include "llviewerwindow.h" 58#include "llviewerwindow.h"
59#include "llimview.h" 59#include "llimview.h"
60 60
61#include "hippoLimits.h"
62
61// static 63// static
62std::map<const LLUUID, LLFloaterGroupPicker*> LLFloaterGroupPicker::sInstances; 64std::map<const LLUUID, LLFloaterGroupPicker*> LLFloaterGroupPicker::sInstances;
63 65
@@ -200,7 +202,7 @@ void LLPanelGroups::reset()
200 group_list->operateOnAll(LLCtrlListInterface::OP_DELETE); 202 group_list->operateOnAll(LLCtrlListInterface::OP_DELETE);
201 } 203 }
202 childSetTextArg("groupcount", "[COUNT]", llformat("%d",gAgent.mGroups.count())); 204 childSetTextArg("groupcount", "[COUNT]", llformat("%d",gAgent.mGroups.count()));
203 childSetTextArg("groupcount", "[MAX]", llformat("%d",MAX_AGENT_GROUPS)); 205 childSetTextArg("groupcount", "[MAX]", llformat("%d", gHippoLimits->getMaxAgentGroups()));
204 206
205 const std::string none_text = getString("none"); 207 const std::string none_text = getString("none");
206 init_group_list(getChild<LLScrollListCtrl>("group list"), gAgent.getGroupID(), none_text); 208 init_group_list(getChild<LLScrollListCtrl>("group list"), gAgent.getGroupID(), none_text);
@@ -212,7 +214,7 @@ BOOL LLPanelGroups::postBuild()
212 childSetCommitCallback("group list", onGroupList, this); 214 childSetCommitCallback("group list", onGroupList, this);
213 215
214 childSetTextArg("groupcount", "[COUNT]", llformat("%d",gAgent.mGroups.count())); 216 childSetTextArg("groupcount", "[COUNT]", llformat("%d",gAgent.mGroups.count()));
215 childSetTextArg("groupcount", "[MAX]", llformat("%d",MAX_AGENT_GROUPS)); 217 childSetTextArg("groupcount", "[MAX]", llformat("%d", gHippoLimits->getMaxAgentGroups()));
216 218
217 const std::string none_text = getString("none"); 219 const std::string none_text = getString("none");
218 init_group_list(getChild<LLScrollListCtrl>("group list"), gAgent.getGroupID(), none_text); 220 init_group_list(getChild<LLScrollListCtrl>("group list"), gAgent.getGroupID(), none_text);
@@ -270,7 +272,7 @@ void LLPanelGroups::enableButtons()
270 childDisable("IM"); 272 childDisable("IM");
271 childDisable("Leave"); 273 childDisable("Leave");
272 } 274 }
273 if(gAgent.mGroups.count() < MAX_AGENT_GROUPS) 275 if(gAgent.mGroups.count() < gHippoLimits->getMaxAgentGroups())
274 { 276 {
275 childEnable("Create"); 277 childEnable("Create");
276 } 278 }
diff --git a/linden/indra/newview/llfloaterhtmlhelp.cpp b/linden/indra/newview/llfloaterhtmlhelp.cpp
index 2a22a40..ff69394 100644
--- a/linden/indra/newview/llfloaterhtmlhelp.cpp
+++ b/linden/indra/newview/llfloaterhtmlhelp.cpp
@@ -54,6 +54,7 @@
54#include "llviewerparcelmedia.h" 54#include "llviewerparcelmedia.h"
55#include "llcombobox.h" 55#include "llcombobox.h"
56 56
57#include "hippoGridManager.h"
57 58
58LLFloaterMediaBrowser::LLFloaterMediaBrowser(const LLSD& media_data) 59LLFloaterMediaBrowser::LLFloaterMediaBrowser(const LLSD& media_data)
59{ 60{
@@ -454,22 +455,18 @@ void LLFloaterHtmlHelp::show(std::string url, std::string title)
454 LLFloaterHtml* floater_html = LLFloaterHtml::getInstance(); 455 LLFloaterHtml* floater_html = LLFloaterHtml::getInstance();
455 floater_html->setVisible(FALSE); 456 floater_html->setVisible(FALSE);
456 457
457 if (url.empty()) 458 url = gHippoGridManager->getConnectedGrid()->getSupportUrl();
458 { 459 if (!url.empty()) {
459 url = floater_html->getSupportUrl(); 460 if (gSavedSettings.getBOOL("UseExternalBrowser")) {
460 } 461 LLSD payload;
461 462 payload["url"] = url;
462 if (gSavedSettings.getBOOL("UseExternalBrowser")) 463 LLNotifications::instance().add("ClickOpenF1Help", LLSD(), payload, onClickF1HelpLoadURL);
463 { 464 } else {
464 LLSD payload; 465 // don't wait, just do it
465 payload["url"] = url; 466 LLWeb::loadURL(url);
466 467 }
467 LLNotifications::instance().add("ClickOpenF1Help", LLSD(), payload, onClickF1HelpLoadURL); 468 } else {
468 } 469 LLNotifications::instance().add("NoSupportUrl");
469 else
470 {
471 // don't wait, just do it
472 LLWeb::loadURL(url);
473 } 470 }
474} 471}
475 472
@@ -479,7 +476,12 @@ bool LLFloaterHtmlHelp::onClickF1HelpLoadURL(const LLSD& notification, const LLS
479 S32 option = LLNotification::getSelectedOption(notification, response); 476 S32 option = LLNotification::getSelectedOption(notification, response);
480 if (option == 0) 477 if (option == 0)
481 { 478 {
482 LLWeb::loadURL(notification["payload"]["url"].asString()); 479 const std::string &url = notification["payload"]["url"].asString();
480 if (!url.empty()) {
481 LLWeb::loadURL(url);
482 } else {
483 llwarns << "Support URL not available." << llendl;
484 }
483 } 485 }
484 return false; 486 return false;
485} 487}
diff --git a/linden/indra/newview/llfloatertools.cpp b/linden/indra/newview/llfloatertools.cpp
index 5a7fdff..260872f 100644
--- a/linden/indra/newview/llfloatertools.cpp
+++ b/linden/indra/newview/llfloatertools.cpp
@@ -84,6 +84,8 @@
84#include "llvotree.h" 84#include "llvotree.h"
85#include "lluictrlfactory.h" 85#include "lluictrlfactory.h"
86 86
87#include "hippoLimits.h"
88
87// Globals 89// Globals
88LLFloaterTools *gFloaterTools = NULL; 90LLFloaterTools *gFloaterTools = NULL;
89 91
@@ -1146,18 +1148,21 @@ void LLFloaterTools::onClickLink(void* data)
1146 LLNotifications::instance().add("UnableToLinkWhileDownloading"); 1148 LLNotifications::instance().add("UnableToLinkWhileDownloading");
1147 return; 1149 return;
1148 } 1150 }
1149 1151
1150 S32 object_count = LLSelectMgr::getInstance()->getSelection()->getObjectCount(); 1152 S32 max_linked_prims = gHippoLimits->getMaxLinkedPrims();
1151 if (object_count > MAX_CHILDREN_PER_TASK + 1) 1153 if (max_linked_prims > -1)
1152 { 1154 {
1153 LLSD args; 1155 S32 object_count = LLSelectMgr::getInstance()->getSelection()->getObjectCount();
1154 args["COUNT"] = llformat("%d", object_count); 1156 if (object_count > max_linked_prims + 1)
1155 int max = MAX_CHILDREN_PER_TASK+1; 1157 {
1156 args["MAX"] = llformat("%d", max); 1158 LLSD args;
1157 LLNotifications::instance().add("UnableToLinkObjects", args); 1159 args["COUNT"] = llformat("%d", object_count);
1158 return; 1160 args["MAX"] = llformat("%d", max_linked_prims +1);
1161 LLNotifications::instance().add("UnableToLinkObjects", args);
1162 return;
1163 }
1159 } 1164 }
1160 1165
1161 if(LLSelectMgr::getInstance()->getSelection()->getRootObjectCount() < 2) 1166 if(LLSelectMgr::getInstance()->getSelection()->getRootObjectCount() < 2)
1162 { 1167 {
1163 LLNotifications::instance().add("CannotLinkIncompleteSet"); 1168 LLNotifications::instance().add("CannotLinkIncompleteSet");
diff --git a/linden/indra/newview/llmanipscale.cpp b/linden/indra/newview/llmanipscale.cpp
index 65f99ef..969ee43 100644
--- a/linden/indra/newview/llmanipscale.cpp
+++ b/linden/indra/newview/llmanipscale.cpp
@@ -63,6 +63,8 @@
63#include "v2math.h" 63#include "v2math.h"
64#include "llvoavatar.h" 64#include "llvoavatar.h"
65 65
66#include "hippoLimits.h"
67
66 68
67const F32 MAX_MANIP_SELECT_DISTANCE_SQUARED = 11.f * 11.f; 69const F32 MAX_MANIP_SELECT_DISTANCE_SQUARED = 11.f * 11.f;
68const F32 SNAP_GUIDE_SCREEN_OFFSET = 0.05f; 70const F32 SNAP_GUIDE_SCREEN_OFFSET = 0.05f;
@@ -70,8 +72,6 @@ const F32 SNAP_GUIDE_SCREEN_LENGTH = 0.7f;
70const F32 SELECTED_MANIPULATOR_SCALE = 1.2f; 72const F32 SELECTED_MANIPULATOR_SCALE = 1.2f;
71const F32 MANIPULATOR_SCALE_HALF_LIFE = 0.07f; 73const F32 MANIPULATOR_SCALE_HALF_LIFE = 0.07f;
72const S32 NUM_MANIPULATORS = 14; 74const S32 NUM_MANIPULATORS = 14;
73const F32 DEFAULT_LL_MAX_PRIM_SCALE = 10.f;
74const F32 DEFAULT_OPENSIM_MAX_PRIM_SCALE = 128.f;
75 75
76const LLManip::EManipPart MANIPULATOR_IDS[NUM_MANIPULATORS] = 76const LLManip::EManipPart MANIPULATOR_IDS[NUM_MANIPULATORS] =
77{ 77{
@@ -176,7 +176,6 @@ LLManipScale::LLManipScale( LLToolComposite* composite )
176 mScaledBoxHandleSize( 1.f ), 176 mScaledBoxHandleSize( 1.f ),
177 mLastMouseX( -1 ), 177 mLastMouseX( -1 ),
178 mLastMouseY( -1 ), 178 mLastMouseY( -1 ),
179 mMaxPrimSize(0.f),
180 mSendUpdateOnMouseUp( FALSE ), 179 mSendUpdateOnMouseUp( FALSE ),
181 mLastUpdateFlags( 0 ), 180 mLastUpdateFlags( 0 ),
182 mScaleSnapUnit1(1.f), 181 mScaleSnapUnit1(1.f),
@@ -205,7 +204,6 @@ void LLManipScale::render()
205 LLGLDepthTest gls_depth(GL_TRUE); 204 LLGLDepthTest gls_depth(GL_TRUE);
206 LLGLEnable gl_blend(GL_BLEND); 205 LLGLEnable gl_blend(GL_BLEND);
207 LLGLEnable gls_alpha_test(GL_ALPHA_TEST); 206 LLGLEnable gls_alpha_test(GL_ALPHA_TEST);
208 mMaxPrimSize = gSavedSettings.getBOOL("LoggedIntoOpenSim") ? DEFAULT_OPENSIM_MAX_PRIM_SCALE : DEFAULT_LL_MAX_PRIM_SCALE;
209 207
210 if( canAffectSelection() ) 208 if( canAffectSelection() )
211 { 209 {
@@ -957,8 +955,9 @@ void LLManipScale::dragCorner( S32 x, S32 y )
957 mInSnapRegime = FALSE; 955 mInSnapRegime = FALSE;
958 } 956 }
959 957
960 F32 max_scale_factor = mMaxPrimSize / MIN_PRIM_SCALE; 958 F32 maxScale = gHippoLimits->getMaxPrimScale();
961 F32 min_scale_factor = MIN_PRIM_SCALE / mMaxPrimSize; 959 F32 max_scale_factor = maxScale / MIN_PRIM_SCALE;
960 F32 min_scale_factor = MIN_PRIM_SCALE / maxScale;
962 961
963 // find max and min scale factors that will make biggest object hit max absolute scale and smallest object hit min absolute scale 962 // find max and min scale factors that will make biggest object hit max absolute scale and smallest object hit min absolute scale
964 for (LLObjectSelection::iterator iter = mObjectSelection->begin(); 963 for (LLObjectSelection::iterator iter = mObjectSelection->begin();
@@ -970,7 +969,7 @@ void LLManipScale::dragCorner( S32 x, S32 y )
970 { 969 {
971 const LLVector3& scale = selectNode->mSavedScale; 970 const LLVector3& scale = selectNode->mSavedScale;
972 971
973 F32 cur_max_scale_factor = llmin( mMaxPrimSize / scale.mV[VX], mMaxPrimSize / scale.mV[VY], mMaxPrimSize / scale.mV[VZ] ); 972 F32 cur_max_scale_factor = llmin( maxScale / scale.mV[VX], maxScale / scale.mV[VY], maxScale / scale.mV[VZ] );
974 max_scale_factor = llmin( max_scale_factor, cur_max_scale_factor ); 973 max_scale_factor = llmin( max_scale_factor, cur_max_scale_factor );
975 974
976 F32 cur_min_scale_factor = llmax( MIN_PRIM_SCALE / scale.mV[VX], MIN_PRIM_SCALE / scale.mV[VY], MIN_PRIM_SCALE / scale.mV[VZ] ); 975 F32 cur_min_scale_factor = llmax( MIN_PRIM_SCALE / scale.mV[VX], MIN_PRIM_SCALE / scale.mV[VY], MIN_PRIM_SCALE / scale.mV[VZ] );
@@ -1267,7 +1266,8 @@ void LLManipScale::stretchFace( const LLVector3& drag_start_agent, const LLVecto
1267 1266
1268 F32 denom = axis * dir_local; 1267 F32 denom = axis * dir_local;
1269 F32 desired_delta_size = is_approx_zero(denom) ? 0.f : (delta_local_mag / denom); // in meters 1268 F32 desired_delta_size = is_approx_zero(denom) ? 0.f : (delta_local_mag / denom); // in meters
1270 F32 desired_scale = llclamp(selectNode->mSavedScale.mV[axis_index] + desired_delta_size, MIN_PRIM_SCALE, mMaxPrimSize); 1269 F32 desired_scale = llclamp(selectNode->mSavedScale.mV[axis_index] + desired_delta_size, MIN_PRIM_SCALE,
1270 gHippoLimits->getMaxPrimScale());
1271 // propagate scale constraint back to position offset 1271 // propagate scale constraint back to position offset
1272 desired_delta_size = desired_scale - selectNode->mSavedScale.mV[axis_index]; // propagate constraint back to position 1272 desired_delta_size = desired_scale - selectNode->mSavedScale.mV[axis_index]; // propagate constraint back to position
1273 1273
@@ -1967,7 +1967,7 @@ F32 LLManipScale::partToMaxScale( S32 part, const LLBBox &bbox ) const
1967 max_extent = bbox_extents.mV[i]; 1967 max_extent = bbox_extents.mV[i];
1968 } 1968 }
1969 } 1969 }
1970 max_scale_factor = bbox_extents.magVec() * mMaxPrimSize / max_extent; 1970 max_scale_factor = bbox_extents.magVec() * gHippoLimits->getMaxPrimScale() / max_extent;
1971 1971
1972 if (getUniform()) 1972 if (getUniform())
1973 { 1973 {
@@ -1982,7 +1982,7 @@ F32 LLManipScale::partToMinScale( S32 part, const LLBBox &bbox ) const
1982{ 1982{
1983 LLVector3 bbox_extents = unitVectorToLocalBBoxExtent( partToUnitVector( part ), bbox ); 1983 LLVector3 bbox_extents = unitVectorToLocalBBoxExtent( partToUnitVector( part ), bbox );
1984 bbox_extents.abs(); 1984 bbox_extents.abs();
1985 F32 min_extent = mMaxPrimSize; 1985 F32 min_extent = gHippoLimits->getMaxPrimScale();
1986 for (U32 i = VX; i <= VZ; i++) 1986 for (U32 i = VX; i <= VZ; i++)
1987 { 1987 {
1988 if (bbox_extents.mV[i] > 0.f && bbox_extents.mV[i] < min_extent) 1988 if (bbox_extents.mV[i] > 0.f && bbox_extents.mV[i] < min_extent)
@@ -2057,13 +2057,3 @@ BOOL LLManipScale::canAffectSelection()
2057 } 2057 }
2058 return can_scale; 2058 return can_scale;
2059} 2059}
2060
2061//static
2062F32 LLManipScale::getMaxPrimSize()
2063{
2064 if (gSavedSettings.getBOOL("LoggedIntoOpenSim"))
2065 {
2066 return DEFAULT_OPENSIM_MAX_PRIM_SCALE;
2067 }
2068 return DEFAULT_LL_MAX_PRIM_SCALE;
2069}
diff --git a/linden/indra/newview/llmanipscale.h b/linden/indra/newview/llmanipscale.h
index c6545fd..1de0459 100644
--- a/linden/indra/newview/llmanipscale.h
+++ b/linden/indra/newview/llmanipscale.h
@@ -89,8 +89,6 @@ public:
89 static void setShowAxes( BOOL b ); 89 static void setShowAxes( BOOL b );
90 static BOOL getShowAxes(); 90 static BOOL getShowAxes();
91 91
92 static F32 getMaxPrimSize();
93
94private: 92private:
95 void renderCorners( const LLBBox& local_bbox ); 93 void renderCorners( const LLBBox& local_bbox );
96 void renderFaces( const LLBBox& local_bbox ); 94 void renderFaces( const LLBBox& local_bbox );
@@ -168,7 +166,6 @@ private:
168 F32 mScaleSnapValue; 166 F32 mScaleSnapValue;
169 BOOL mInSnapRegime; 167 BOOL mInSnapRegime;
170 F32* mManipulatorScales; 168 F32* mManipulatorScales;
171 F32 mMaxPrimSize;
172}; 169};
173 170
174#endif // LL_MANIPSCALE_H 171#endif // LL_MANIPSCALE_H
diff --git a/linden/indra/newview/llmaniptranslate.cpp b/linden/indra/newview/llmaniptranslate.cpp
index 8d23e40..1362f0a 100644
--- a/linden/indra/newview/llmaniptranslate.cpp
+++ b/linden/indra/newview/llmaniptranslate.cpp
@@ -66,6 +66,8 @@
66#include "llui.h" 66#include "llui.h"
67#include "pipeline.h" 67#include "pipeline.h"
68 68
69#include "hippoLimits.h"
70
69const S32 NUM_AXES = 3; 71const S32 NUM_AXES = 3;
70const S32 MOUSE_DRAG_SLOP = 2; // pixels 72const S32 MOUSE_DRAG_SLOP = 2; // pixels
71const F32 HANDLE_HIDE_ANGLE = 0.15f; // radians 73const F32 HANDLE_HIDE_ANGLE = 0.15f; // radians
@@ -731,9 +733,10 @@ BOOL LLManipTranslate::handleHover(S32 x, S32 y, MASK mask)
731 } 733 }
732 734
733 // For safety, cap heights where objects can be dragged 735 // For safety, cap heights where objects can be dragged
734 if (new_position_global.mdV[VZ] > MAX_OBJECT_Z) 736 float maxHeight = gHippoLimits->getMaxHeight();
737 if (new_position_global.mdV[VZ] > maxHeight)
735 { 738 {
736 new_position_global.mdV[VZ] = MAX_OBJECT_Z; 739 new_position_global.mdV[VZ] = maxHeight;
737 } 740 }
738 741
739 // Grass is always drawn on the ground, so clamp its position to the ground 742 // Grass is always drawn on the ground, so clamp its position to the ground
diff --git a/linden/indra/newview/llpanellogin.cpp b/linden/indra/newview/llpanellogin.cpp
index e0acd34..df5601a 100644
--- a/linden/indra/newview/llpanellogin.cpp
+++ b/linden/indra/newview/llpanellogin.cpp
@@ -37,6 +37,8 @@
37#include "llpanelgeneral.h" 37#include "llpanelgeneral.h"
38 38
39#include "hippoGridManager.h" 39#include "hippoGridManager.h"
40#include "hippoLimits.h"
41
40#include "floaterlogin.h" 42#include "floaterlogin.h"
41 43
42#include "indra_constants.h" // for key and mask constants 44#include "indra_constants.h" // for key and mask constants
@@ -460,7 +462,7 @@ BOOL LLPanelLogin::handleKeyHere(KEY key, MASK mask)
460 if ( KEY_F1 == key ) 462 if ( KEY_F1 == key )
461 { 463 {
462 llinfos << "Spawning HTML help window" << llendl; 464 llinfos << "Spawning HTML help window" << llendl;
463 LLFloaterMediaBrowser::helpF1(); 465 gViewerHtmlHelp.show();
464 return TRUE; 466 return TRUE;
465 } 467 }
466 468
@@ -634,7 +636,23 @@ void LLPanelLogin::addServer(const std::string& server)
634 } 636 }
635 else 637 else
636 { 638 {
637 std::string last_grid = gSavedSettings.getString("LastSelectedGrid"); 639 std::string last_grid = gSavedSettings.getString("CmdLineGridChoice");//imprudence TODO:errorcheck
640 std::string cmd_line_login_uri = gSavedSettings.getLLSD("CmdLineLoginURI").asString();
641 if (!last_grid.empty()&& cmd_line_login_uri.empty())//don't use --grid if --loginuri is also given
642 {
643 //give user chance to change their mind, even with --grid set
644 gSavedSettings.setString("CmdLineGridChoice","");
645 }
646 else if (!cmd_line_login_uri.empty())
647 {
648 last_grid = cmd_line_login_uri;
649 //also clear --grid no matter if it was given
650 gSavedSettings.setString("CmdLineGridChoice","");
651 }
652 else if (last_grid.empty())
653 {
654 last_grid = gSavedSettings.getString("LastSelectedGrid");
655 }
638 if (last_grid.empty()) last_grid = defaultGrid; 656 if (last_grid.empty()) last_grid = defaultGrid;
639 grids->setSimple(last_grid); 657 grids->setSimple(last_grid);
640 } 658 }
@@ -826,8 +844,9 @@ void LLPanelLogin::loadLoginPage()
826 } 844 }
827 845
828 // Channel and Version 846 // Channel and Version
829 std::string version = llformat("%d.%d.%d (%d)", 847 std::string version = llformat("%d.%d.%d %s",
830 LL_VERSION_MAJOR, LL_VERSION_MINOR, LL_VERSION_PATCH, LL_VIEWER_BUILD); 848 IMP_VERSION_MAJOR, IMP_VERSION_MINOR,
849 IMP_VERSION_PATCH, IMP_VERSION_TEST);
831 850
832 char* curl_channel = curl_escape(gSavedSettings.getString("VersionChannelName").c_str(), 0); 851 char* curl_channel = curl_escape(gSavedSettings.getString("VersionChannelName").c_str(), 0);
833 char* curl_version = curl_escape(version.c_str(), 0); 852 char* curl_version = curl_escape(version.c_str(), 0);
@@ -875,17 +894,17 @@ void LLPanelLogin::loadLoginPage()
875 location = "home"; 894 location = "home";
876 } 895 }
877 } 896 }
878 897
879 std::string firstname, lastname; 898 std::string firstname, lastname;
880 899
881 if(gSavedSettings.getLLSD("UserLoginInfo").size() == 3) 900 if(gSavedSettings.getLLSD("UserLoginInfo").size() == 3)
882 { 901 {
883 LLSD cmd_line_login = gSavedSettings.getLLSD("UserLoginInfo"); 902 LLSD cmd_line_login = gSavedSettings.getLLSD("UserLoginInfo");
884 firstname = cmd_line_login[0].asString(); 903 firstname = cmd_line_login[0].asString();
885 lastname = cmd_line_login[1].asString(); 904 lastname = cmd_line_login[1].asString();
886 password = cmd_line_login[2].asString(); 905 password = cmd_line_login[2].asString();
887 } 906 }
888 907
889 if (firstname.empty()) 908 if (firstname.empty())
890 { 909 {
891 firstname = gSavedSettings.getString("FirstName"); 910 firstname = gSavedSettings.getString("FirstName");
@@ -998,8 +1017,7 @@ bool LLPanelLogin::newAccountAlertCallback(const LLSD& notification, const LLSD&
998 S32 option = LLNotification::getSelectedOption(notification, response); 1017 S32 option = LLNotification::getSelectedOption(notification, response);
999 if (0 == option) 1018 if (0 == option)
1000 { 1019 {
1001 llinfos << "Going to account creation URL" << llendl; 1020 onClickNewAccount(0);
1002 LLWeb::loadURLExternal( CREATE_ACCOUNT_URL );
1003 } 1021 }
1004 else 1022 else
1005 { 1023 {
@@ -1012,7 +1030,14 @@ bool LLPanelLogin::newAccountAlertCallback(const LLSD& notification, const LLSD&
1012// static 1030// static
1013void LLPanelLogin::onClickNewAccount(void*) 1031void LLPanelLogin::onClickNewAccount(void*)
1014{ 1032{
1015 LLWeb::loadURLExternal( CREATE_ACCOUNT_URL ); 1033 const std::string &url = gHippoGridManager->getConnectedGrid()->getRegisterUrl();
1034 if (!url.empty()) {
1035 llinfos << "Going to account creation URL." << llendl;
1036 LLWeb::loadURLExternal(url);
1037 } else {
1038 llinfos << "Account creation URL is empty." << llendl;
1039 sInstance->setFocus(TRUE);
1040 }
1016} 1041}
1017 1042
1018 1043
@@ -1043,7 +1068,12 @@ void LLPanelLogin::onClickForgotPassword(void*)
1043{ 1068{
1044 if (sInstance ) 1069 if (sInstance )
1045 { 1070 {
1046 LLWeb::loadURLExternal(sInstance->getString( "forgot_password_url" )); 1071 const std::string &url = gHippoGridManager->getConnectedGrid()->getPasswordUrl();
1072 if (!url.empty()) {
1073 LLWeb::loadURLExternal(url);
1074 } else {
1075 llwarns << "Link for 'forgotton password' not set." << llendl;
1076 }
1047 } 1077 }
1048} 1078}
1049 1079
@@ -1082,7 +1112,8 @@ void LLPanelLogin::onSelectServer(LLUICtrl* ctrl, void*)
1082 // //childSetText("gridname", gridInfo->getGridName()); 1112 // //childSetText("gridname", gridInfo->getGridName());
1083 // LLPanelLogin::setFields( gridInfo->getFirstName(), gridInfo->getLastName(), gridInfo->getAvatarPassword(), 1 ); 1113 // LLPanelLogin::setFields( gridInfo->getFirstName(), gridInfo->getLastName(), gridInfo->getAvatarPassword(), 1 );
1084 // } 1114 // }
1085 1115 if (mCurGrid == gHippoGridManager->getConnectedGrid()->getGridNick())
1116 gHippoLimits->setLimits();
1086 1117
1087 llwarns << "current grid = " << mCurGrid << llendl; 1118 llwarns << "current grid = " << mCurGrid << llendl;
1088 1119
diff --git a/linden/indra/newview/llpanelobject.cpp b/linden/indra/newview/llpanelobject.cpp
index 40dc211..460611a 100644
--- a/linden/indra/newview/llpanelobject.cpp
+++ b/linden/indra/newview/llpanelobject.cpp
@@ -79,7 +79,7 @@
79// [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g) 79// [RLVa:KB] - Checked: 2009-07-10 (RLVa-1.0.0g)
80#include "llvoavatar.h" 80#include "llvoavatar.h"
81// [/RLVa:KB] 81// [/RLVa:KB]
82 82#include "hippoLimits.h"
83// 83//
84// Constants 84// Constants
85// 85//
@@ -426,6 +426,8 @@ void LLPanelObject::getState( )
426 mCtrlPosY->setEnabled(enable_move); 426 mCtrlPosY->setEnabled(enable_move);
427 mCtrlPosZ->setEnabled(enable_move); 427 mCtrlPosZ->setEnabled(enable_move);
428 428
429 mCtrlPosZ->setMaxValue(gHippoLimits->getMaxHeight());
430
429 if (enable_scale) 431 if (enable_scale)
430 { 432 {
431 vec = objectp->getScale(); 433 vec = objectp->getScale();
@@ -632,9 +634,9 @@ void LLPanelObject::getState( )
632 } 634 }
633 else 635 else
634 { 636 {
635 mCtrlScaleX->setMaxValue(LLManipScale::getMaxPrimSize()); 637 mCtrlScaleX->setMaxValue(gHippoLimits->getMaxPrimScale());
636 mCtrlScaleY->setMaxValue(LLManipScale::getMaxPrimSize()); 638 mCtrlScaleY->setMaxValue(gHippoLimits->getMaxPrimScale());
637 mCtrlScaleZ->setMaxValue(LLManipScale::getMaxPrimSize()); 639 mCtrlScaleZ->setMaxValue(gHippoLimits->getMaxPrimScale());
638 640
639 // Only allowed to change these parameters for objects 641 // Only allowed to change these parameters for objects
640 // that you have permissions on AND are not attachments. 642 // that you have permissions on AND are not attachments.
@@ -993,9 +995,9 @@ void LLPanelObject::getState( )
993 mSpinScaleY->set( scale_y ); 995 mSpinScaleY->set( scale_y );
994 calcp->setVar(LLCalc::X_HOLE, scale_x); 996 calcp->setVar(LLCalc::X_HOLE, scale_x);
995 calcp->setVar(LLCalc::Y_HOLE, scale_y); 997 calcp->setVar(LLCalc::Y_HOLE, scale_y);
996 mSpinScaleX->setMinValue(OBJECT_MIN_HOLE_SIZE); 998 mSpinScaleX->setMinValue(gHippoLimits->getMinHoleSize());
997 mSpinScaleX->setMaxValue(OBJECT_MAX_HOLE_SIZE_X); 999 mSpinScaleX->setMaxValue(OBJECT_MAX_HOLE_SIZE_X);
998 mSpinScaleY->setMinValue(OBJECT_MIN_HOLE_SIZE); 1000 mSpinScaleY->setMinValue(gHippoLimits->getMinHoleSize());
999 mSpinScaleY->setMaxValue(OBJECT_MAX_HOLE_SIZE_Y); 1001 mSpinScaleY->setMaxValue(OBJECT_MAX_HOLE_SIZE_Y);
1000 break; 1002 break;
1001 default: 1003 default:
@@ -1031,7 +1033,7 @@ void LLPanelObject::getState( )
1031 else 1033 else
1032 { 1034 {
1033 mSpinHollow->setMinValue(0.f); 1035 mSpinHollow->setMinValue(0.f);
1034 mSpinHollow->setMaxValue(95.f); 1036 mSpinHollow->setMaxValue(gHippoLimits->getMaxHollow() * 100.0f);
1035 } 1037 }
1036 1038
1037 // Update field enablement 1039 // Update field enablement
@@ -1583,11 +1585,11 @@ void LLPanelObject::getVolumeParams(LLVolumeParams& volume_params)
1583 { 1585 {
1584 scale_x = llclamp( 1586 scale_x = llclamp(
1585 scale_x, 1587 scale_x,
1586 OBJECT_MIN_HOLE_SIZE, 1588 gHippoLimits->getMinHoleSize(),
1587 OBJECT_MAX_HOLE_SIZE_X); 1589 OBJECT_MAX_HOLE_SIZE_X);
1588 scale_y = llclamp( 1590 scale_y = llclamp(
1589 scale_y, 1591 scale_y,
1590 OBJECT_MIN_HOLE_SIZE, 1592 gHippoLimits->getMinHoleSize(),
1591 OBJECT_MAX_HOLE_SIZE_Y); 1593 OBJECT_MAX_HOLE_SIZE_Y);
1592 1594
1593 // Limit radius offset, based on taper and hole size y. 1595 // Limit radius offset, based on taper and hole size y.
diff --git a/linden/indra/newview/llstartup.cpp b/linden/indra/newview/llstartup.cpp
index 20b14af..9073874 100644
--- a/linden/indra/newview/llstartup.cpp
+++ b/linden/indra/newview/llstartup.cpp
@@ -491,7 +491,10 @@ bool idle_startup()
491 491
492 // TODO parameterize 492 // TODO parameterize
493 const F32 circuit_heartbeat_interval = 5; 493 const F32 circuit_heartbeat_interval = 5;
494 const F32 circuit_timeout = 100; 494 const F32 circuit_timeout = 180; //seconds until llcircuit decides
495 //it isn't alive.
496 //Since we are on OpenSim we need to
497 //relax about 'bad' ping. Was for SL: 100;
495 498
496 const LLUseCircuitCodeResponder* responder = NULL; 499 const LLUseCircuitCodeResponder* responder = NULL;
497 bool failure_is_fatal = true; 500 bool failure_is_fatal = true;
@@ -683,9 +686,9 @@ bool idle_startup()
683 show_connect_box = 686 show_connect_box =
684 firstname.empty() || lastname.empty() || web_login_key.isNull(); 687 firstname.empty() || lastname.empty() || web_login_key.isNull();
685 } 688 }
686 else if((gSavedSettings.getLLSD("UserLoginInfo").size() == 3) && !LLStartUp::shouldAutoLogin()) 689 else if((gSavedSettings.getLLSD("UserLoginInfo").size() == 3) && !LLStartUp::shouldAutoLogin())
687 { 690 {
688 LLSD cmd_line_login = gSavedSettings.getLLSD("UserLoginInfo"); 691 LLSD cmd_line_login = gSavedSettings.getLLSD("UserLoginInfo");
689 firstname = cmd_line_login[0].asString(); 692 firstname = cmd_line_login[0].asString();
690 lastname = cmd_line_login[1].asString(); 693 lastname = cmd_line_login[1].asString();
691 694
@@ -700,7 +703,7 @@ bool idle_startup()
700 show_connect_box = false; 703 show_connect_box = false;
701#endif 704#endif
702 gSavedSettings.setBOOL("AutoLogin", TRUE); 705 gSavedSettings.setBOOL("AutoLogin", TRUE);
703 } 706 }
704 else if (gSavedSettings.getBOOL("AutoLogin")) 707 else if (gSavedSettings.getBOOL("AutoLogin"))
705 { 708 {
706 firstname = gSavedSettings.getString("FirstName"); 709 firstname = gSavedSettings.getString("FirstName");
@@ -877,13 +880,21 @@ bool idle_startup()
877 gDebugInfo["LoginName"] = firstname + " " + lastname; 880 gDebugInfo["LoginName"] = firstname + " " + lastname;
878 } 881 }
879 882
880 gHippoGridManager->setCurrentGridAsConnected(); 883 std::string cmd_line_grid_choice = gSavedSettings.getString("CmdLineGridChoice");
884 std::string cmd_line_login_uri = gSavedSettings.getLLSD("CmdLineLoginURI").asString();
885 if(!cmd_line_grid_choice.empty() && cmd_line_login_uri.empty())
886 {
887 gHippoGridManager->setCurrentGrid(cmd_line_grid_choice);
888 }
889
890 gHippoGridManager->setCurrentGridAsConnected();
891 gHippoLimits->setLimits();
881 // create necessary directories 892 // create necessary directories
882 // *FIX: these mkdir's should error check 893 // *FIX: these mkdir's should error check
883 gDirUtilp->setLindenUserDir(gHippoGridManager->getCurrentGridNick(), firstname, lastname); 894 gDirUtilp->setLindenUserDir(gHippoGridManager->getCurrentGridNick(), firstname, lastname);
884 LLFile::mkdir(gDirUtilp->getLindenUserDir()); 895 LLFile::mkdir(gDirUtilp->getLindenUserDir());
885 896
886 // Set PerAccountSettingsFile to the default value. 897 // Set PerAccountSettingsFile to the default value.
887 gSavedSettings.setString("PerAccountSettingsFile", 898 gSavedSettings.setString("PerAccountSettingsFile",
888 gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, 899 gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT,
889 LLAppViewer::instance()->getSettingsFilename("Default", "PerAccount") 900 LLAppViewer::instance()->getSettingsFilename("Default", "PerAccount")
@@ -1643,13 +1654,14 @@ bool idle_startup()
1643 if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setPasswordUrl(tmp); 1654 if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setPasswordUrl(tmp);
1644 tmp = LLUserAuth::getInstance()->getResponse("search"); 1655 tmp = LLUserAuth::getInstance()->getResponse("search");
1645 if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setSearchUrl(tmp); 1656 if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setSearchUrl(tmp);
1646 tmp = LLUserAuth::getInstance()->getResponse("currency"); 1657 tmp = LLUserAuth::getInstance()->getResponse("currency");
1647 if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setCurrencySymbol(tmp); 1658 if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setCurrencySymbol(tmp);
1648 tmp = LLUserAuth::getInstance()->getResponse("real_currency"); 1659 tmp = LLUserAuth::getInstance()->getResponse("real_currency");
1649 if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setRealCurrencySymbol(tmp); 1660 if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setRealCurrencySymbol(tmp);
1650 tmp = LLUserAuth::getInstance()->getResponse("directory_fee"); 1661 tmp = LLUserAuth::getInstance()->getResponse("directory_fee");
1651 if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setDirectoryFee(atoi(tmp.c_str())); 1662 if (!tmp.empty()) gHippoGridManager->getConnectedGrid()->setDirectoryFee(atoi(tmp.c_str()));
1652 gHippoGridManager->saveFile(); 1663 gHippoGridManager->saveFile();
1664 gHippoLimits->setLimits();
1653 1665
1654 // JC: gesture loading done below, when we have an asset system 1666 // JC: gesture loading done below, when we have an asset system
1655 // in place. Don't delete/clear user_credentials until then. 1667 // in place. Don't delete/clear user_credentials until then.
@@ -2902,7 +2914,12 @@ bool first_run_dialog_callback(const LLSD& notification, const LLSD& response)
2902 if (0 == option) 2914 if (0 == option)
2903 { 2915 {
2904 LL_DEBUGS("AppInit") << "First run dialog cancelling" << LL_ENDL; 2916 LL_DEBUGS("AppInit") << "First run dialog cancelling" << LL_ENDL;
2905 LLWeb::loadURL( CREATE_ACCOUNT_URL ); 2917 const std::string &url = gHippoGridManager->getConnectedGrid()->getRegisterUrl();
2918 if (!url.empty()) {
2919 LLWeb::loadURL(url);
2920 } else {
2921 llwarns << "Account creation URL is empty" << llendl;
2922 }
2906 } 2923 }
2907 2924
2908 LLPanelLogin::giveFocus(); 2925 LLPanelLogin::giveFocus();
@@ -2948,9 +2965,11 @@ bool login_alert_status(const LLSD& notification, const LLSD& response)
2948 { 2965 {
2949 case 0: // OK 2966 case 0: // OK
2950 break; 2967 break;
2951 case 1: // Help 2968 case 1: { // Help
2952 LLWeb::loadURL( SUPPORT_URL ); 2969 const std::string &url = gHippoGridManager->getConnectedGrid()->getSupportUrl();
2970 if (!url.empty()) LLWeb::loadURL(url);
2953 break; 2971 break;
2972 }
2954 case 2: // Teleport 2973 case 2: // Teleport
2955 // Restart the login process, starting at our home locaton 2974 // Restart the login process, starting at our home locaton
2956 LLURLSimString::setString(LLURLSimString::sLocationStringHome); 2975 LLURLSimString::setString(LLURLSimString::sLocationStringHome);
diff --git a/linden/indra/newview/lltoolgrab.cpp b/linden/indra/newview/lltoolgrab.cpp
index 3437193..260d533 100644
--- a/linden/indra/newview/lltoolgrab.cpp
+++ b/linden/indra/newview/lltoolgrab.cpp
@@ -64,6 +64,8 @@
64#include "llvoavatar.h" 64#include "llvoavatar.h"
65#include "llworld.h" 65#include "llworld.h"
66 66
67#include "hippoLimits.h"
68
67const S32 SLOP_DIST_SQ = 4; 69const S32 SLOP_DIST_SQ = 4;
68 70
69// Override modifier key behavior with these buttons 71// Override modifier key behavior with these buttons
@@ -635,9 +637,10 @@ void LLToolGrab::handleHoverActive(S32 x, S32 y, MASK mask)
635 } 637 }
636 638
637 // For safety, cap heights where objects can be dragged 639 // For safety, cap heights where objects can be dragged
638 if (grab_point_global.mdV[VZ] > MAX_OBJECT_Z) 640 float maxHeight = gHippoLimits->getMaxHeight();
641 if (grab_point_global.mdV[VZ] > maxHeight)
639 { 642 {
640 grab_point_global.mdV[VZ] = MAX_OBJECT_Z; 643 grab_point_global.mdV[VZ] = maxHeight;
641 } 644 }
642 645
643 grab_point_global = LLWorld::getInstance()->clipToVisibleRegions(mDragStartPointGlobal, grab_point_global); 646 grab_point_global = LLWorld::getInstance()->clipToVisibleRegions(mDragStartPointGlobal, grab_point_global);
diff --git a/linden/indra/newview/llviewermenu.cpp b/linden/indra/newview/llviewermenu.cpp
index 7697f77..9d06853 100644
--- a/linden/indra/newview/llviewermenu.cpp
+++ b/linden/indra/newview/llviewermenu.cpp
@@ -225,6 +225,8 @@
225#include "jcfloater_animation_list.h" 225#include "jcfloater_animation_list.h"
226#include "llfloaterassetbrowser.h" 226#include "llfloaterassetbrowser.h"
227 227
228#include "hippoLimits.h"
229
228using namespace LLVOAvatarDefines; 230using namespace LLVOAvatarDefines;
229void init_client_menu(LLMenuGL* menu); 231void init_client_menu(LLMenuGL* menu);
230void init_server_menu(LLMenuGL* menu); 232void init_server_menu(LLMenuGL* menu);
@@ -4669,15 +4671,18 @@ class LLToolsLink : public view_listener_t
4669 return true; 4671 return true;
4670 } 4672 }
4671 4673
4672 S32 object_count = LLSelectMgr::getInstance()->getSelection()->getObjectCount(); 4674 S32 max_linked_prims = gHippoLimits->getMaxLinkedPrims();
4673 if (object_count > MAX_CHILDREN_PER_TASK + 1) 4675 if (max_linked_prims > -1)
4674 { 4676 {
4675 LLSD args; 4677 S32 object_count = LLSelectMgr::getInstance()->getSelection()->getObjectCount();
4676 args["COUNT"] = llformat("%d", object_count); 4678 if (object_count > max_linked_prims + 1)
4677 int max = MAX_CHILDREN_PER_TASK+1; 4679 {
4678 args["MAX"] = llformat("%d", max); 4680 LLSD args;
4679 LLNotifications::instance().add("UnableToLinkObjects", args); 4681 args["COUNT"] = llformat("%d", object_count);
4680 return true; 4682 args["MAX"] = llformat("%d", max_linked_prims+1);
4683 LLNotifications::instance().add("UnableToLinkObjects", args);
4684 return true;
4685 }
4681 } 4686 }
4682 4687
4683 if(LLSelectMgr::getInstance()->getSelection()->getRootObjectCount() < 2) 4688 if(LLSelectMgr::getInstance()->getSelection()->getRootObjectCount() < 2)
@@ -5861,7 +5866,7 @@ class LLShowFloater : public view_listener_t
5861 } 5866 }
5862 else if (floater_name == "help f1") 5867 else if (floater_name == "help f1")
5863 { 5868 {
5864 LLFloaterMediaBrowser::helpF1(); 5869 gViewerHtmlHelp.show();
5865 } 5870 }
5866 else if (floater_name == "help tutorial") 5871 else if (floater_name == "help tutorial")
5867 { 5872 {
diff --git a/linden/indra/newview/llviewermessage.cpp b/linden/indra/newview/llviewermessage.cpp
index eb11acb..6dfd9fb 100644
--- a/linden/indra/newview/llviewermessage.cpp
+++ b/linden/indra/newview/llviewermessage.cpp
@@ -138,6 +138,8 @@
138#include "llviewerdisplay.h" 138#include "llviewerdisplay.h"
139#include "llkeythrottle.h" 139#include "llkeythrottle.h"
140 140
141#include "hippoLimits.h"
142
141#include <boost/tokenizer.hpp> 143#include <boost/tokenizer.hpp>
142#include <boost/regex.hpp> // Boost Reg Expresions 144#include <boost/regex.hpp> // Boost Reg Expresions
143 145
@@ -654,7 +656,7 @@ bool join_group_response(const LLSD& notification, const LLSD& response)
654 if(option == 0 && !group_id.isNull()) 656 if(option == 0 && !group_id.isNull())
655 { 657 {
656 // check for promotion or demotion. 658 // check for promotion or demotion.
657 S32 max_groups = MAX_AGENT_GROUPS; 659 S32 max_groups = gHippoLimits->getMaxAgentGroups();
658 if(gAgent.isInGroup(group_id)) ++max_groups; 660 if(gAgent.isInGroup(group_id)) ++max_groups;
659 661
660 if(gAgent.mGroups.count() < max_groups) 662 if(gAgent.mGroups.count() < max_groups)
@@ -3313,10 +3315,6 @@ void process_agent_movement_complete(LLMessageSystem* msg, void**)
3313 // appropriate. 3315 // appropriate.
3314 LLVector3 shift_vector = regionp->getPosRegionFromGlobal( 3316 LLVector3 shift_vector = regionp->getPosRegionFromGlobal(
3315 gAgent.getRegion()->getOriginGlobal()); 3317 gAgent.getRegion()->getOriginGlobal());
3316 // don't shift objects, if teleporting more than about 1000 sims, as
3317 // for long teleports shifting objects garbles the view at the target region
3318 if (shift_vector.lengthSquared() > 6.5e10f)
3319 shift_vector = LLVector3::zero;
3320 gAgent.setRegion(regionp); 3318 gAgent.setRegion(regionp);
3321 gObjectList.shiftObjects(shift_vector); 3319 gObjectList.shiftObjects(shift_vector);
3322 gAssetStorage->setUpstream(msg->getSender()); 3320 gAssetStorage->setUpstream(msg->getSender());
@@ -3442,15 +3440,7 @@ void process_agent_movement_complete(LLMessageSystem* msg, void**)
3442 LLSD payload; 3440 LLSD payload;
3443 payload["message"] = version_channel; 3441 payload["message"] = version_channel;
3444 LLNotifications::instance().add("ServerVersionChanged", LLSD(), payload); 3442 LLNotifications::instance().add("ServerVersionChanged", LLSD(), payload);
3445 } 3443 gHippoLimits->setLimits();
3446
3447 if (version_channel.find("OpenSim") != std::string::npos)
3448 {
3449 gSavedSettings.setBOOL("LoggedIntoOpenSim", TRUE);
3450 }
3451 else
3452 {
3453 gSavedSettings.setBOOL("LoggedIntoOpenSim", FALSE);
3454 } 3444 }
3455 3445
3456 gLastVersionChannel = version_channel; 3446 gLastVersionChannel = version_channel;
diff --git a/linden/indra/newview/llvoavatar.cpp b/linden/indra/newview/llvoavatar.cpp
index 3e83ff5..0f1e2a3 100644
--- a/linden/indra/newview/llvoavatar.cpp
+++ b/linden/indra/newview/llvoavatar.cpp
@@ -55,7 +55,6 @@
55#include "llkeyframefallmotion.h" 55#include "llkeyframefallmotion.h"
56#include "llkeyframestandmotion.h" 56#include "llkeyframestandmotion.h"
57#include "llkeyframewalkmotion.h" 57#include "llkeyframewalkmotion.h"
58#include "llmanipscale.h" // getMaxPrimSize()
59#include "llmutelist.h" 58#include "llmutelist.h"
60#include "llnotify.h" 59#include "llnotify.h"
61#include "llquantize.h" 60#include "llquantize.h"
@@ -97,7 +96,7 @@
97// [RLVa:KB] 96// [RLVa:KB]
98#include "llstartup.h" 97#include "llstartup.h"
99// [/RLVa:KB] 98// [/RLVa:KB]
100 99#include "hippoLimits.h"// getMaxPrimScale
101using namespace LLVOAvatarDefines; 100using namespace LLVOAvatarDefines;
102 101
103//----------------------------------------------------------------------------- 102//-----------------------------------------------------------------------------
@@ -1536,7 +1535,7 @@ void LLVOAvatar::getSpatialExtents(LLVector3& newMin, LLVector3& newMax)
1536 LLVector3 pos = getRenderPosition(); 1535 LLVector3 pos = getRenderPosition();
1537 newMin = pos - buffer; 1536 newMin = pos - buffer;
1538 newMax = pos + buffer; 1537 newMax = pos + buffer;
1539 float max_attachment_span = LLManipScale::getMaxPrimSize() * 5.0f; 1538 float max_attachment_span = gHippoLimits->getMaxPrimScale() * 5.0f;
1540 1539
1541 //stretch bounding box by joint positions 1540 //stretch bounding box by joint positions
1542 for (polymesh_map_t::iterator i = mMeshes.begin(); i != mMeshes.end(); ++i) 1541 for (polymesh_map_t::iterator i = mMeshes.begin(); i != mMeshes.end(); ++i)
@@ -2528,15 +2527,15 @@ S32 LLVOAvatar::setTETexture(const U8 te, const LLUUID& uuid)
2528{ 2527{
2529 // The core setTETexture() method requests images, so we need 2528 // The core setTETexture() method requests images, so we need
2530 // to redirect certain avatar texture requests to different sims. 2529 // to redirect certain avatar texture requests to different sims.
2531 /* if (isIndexBakedTexture((ETextureIndex)te)) 2530 if (isIndexBakedTexture((ETextureIndex)te))
2532 {*/ 2531 {
2533 LLHost target_host = getObjectHost(); 2532 LLHost target_host = getObjectHost();
2534 return setTETextureCore(te, uuid, target_host); 2533 return setTETextureCore(te, uuid, target_host);
2535 /*} 2534 }
2536 else 2535 else
2537 { 2536 {
2538 return setTETextureCore(te, uuid, LLHost::invalid); 2537 return setTETextureCore(te, uuid, LLHost::invalid);
2539 }*/ 2538 }
2540} 2539}
2541 2540
2542 2541
@@ -8608,7 +8607,7 @@ void LLVOAvatar::onBakedTextureMasksLoaded( BOOL success, LLViewerImage *src_vi,
8608 { 8607 {
8609 if (!aux_src->getData()) 8608 if (!aux_src->getData())
8610 { 8609 {
8611 llerrs << "No auxiliary source data for onBakedTextureMasksLoaded" << llendl; 8610 llwarns << "No auxiliary source data for onBakedTextureMasksLoaded" << llendl;
8612 return; 8611 return;
8613 } 8612 }
8614 8613
diff --git a/linden/indra/newview/llvoiceclient.cpp b/linden/indra/newview/llvoiceclient.cpp
index 7a41510..67e4075 100644
--- a/linden/indra/newview/llvoiceclient.cpp
+++ b/linden/indra/newview/llvoiceclient.cpp
@@ -1753,6 +1753,7 @@ void LLVoiceClient::stateMachine()
1753 else 1753 else
1754 { 1754 {
1755 LL_INFOS("Voice") << exe_path << " not found." << LL_ENDL; 1755 LL_INFOS("Voice") << exe_path << " not found." << LL_ENDL;
1756 mVoiceEnabled = false;
1756 } 1757 }
1757 } 1758 }
1758 else 1759 else
@@ -1856,7 +1857,7 @@ void LLVoiceClient::stateMachine()
1856 // We never started up the connector. This will shut down the daemon. 1857 // We never started up the connector. This will shut down the daemon.
1857 setState(stateConnectorStopped); 1858 setState(stateConnectorStopped);
1858 } 1859 }
1859 else if(!mAccountName.empty()) 1860 else if(!mAccountName.empty() && mVoiceEnabled)
1860 { 1861 {
1861 LLViewerRegion *region = gAgent.getRegion(); 1862 LLViewerRegion *region = gAgent.getRegion();
1862 1863
@@ -1872,7 +1873,7 @@ void LLVoiceClient::stateMachine()
1872 } 1873 }
1873 else 1874 else
1874 { 1875 {
1875 LL_WARNS("Voice") << "region doesn't have ProvisionVoiceAccountRequest capability!" << LL_ENDL; 1876 LL_DEBUGS("Voice") << "region doesn't have ProvisionVoiceAccountRequest capability!" << LL_ENDL;
1876 } 1877 }
1877 } 1878 }
1878 } 1879 }
diff --git a/linden/indra/newview/llworld.cpp b/linden/indra/newview/llworld.cpp
index 02c7be3..90ab49b 100644
--- a/linden/indra/newview/llworld.cpp
+++ b/linden/indra/newview/llworld.cpp
@@ -60,6 +60,7 @@
60#include "pipeline.h" 60#include "pipeline.h"
61#include "llappviewer.h" // for do_disconnect() 61#include "llappviewer.h" // for do_disconnect()
62 62
63#include "hippoLimits.h"
63// 64//
64// Globals 65// Globals
65// 66//
@@ -128,6 +129,10 @@ void LLWorld::destroyClass()
128 LLViewerPartSim::getInstance()->destroyClass(); 129 LLViewerPartSim::getInstance()->destroyClass();
129} 130}
130 131
132F32 LLWorld::getRegionMaxHeight() const
133{
134 return gHippoLimits->getMaxHeight();
135}
131 136
132LLViewerRegion* LLWorld::addRegion(const U64 &region_handle, const LLHost &host) 137LLViewerRegion* LLWorld::addRegion(const U64 &region_handle, const LLHost &host)
133{ 138{
diff --git a/linden/indra/newview/llworld.h b/linden/indra/newview/llworld.h
index ce83cbd..46aefd9 100644
--- a/linden/indra/newview/llworld.h
+++ b/linden/indra/newview/llworld.h
@@ -119,8 +119,7 @@ public:
119 // region X and Y size in meters 119 // region X and Y size in meters
120 F32 getRegionWidthInMeters() const { return mWidthInMeters; } 120 F32 getRegionWidthInMeters() const { return mWidthInMeters; }
121 F32 getRegionMinHeight() const { return -mWidthInMeters; } 121 F32 getRegionMinHeight() const { return -mWidthInMeters; }
122 F32 getRegionMaxHeight() const { return MAX_OBJECT_Z; } 122 F32 getRegionMaxHeight() const;
123
124 void updateRegions(F32 max_update_time); 123 void updateRegions(F32 max_update_time);
125 void updateVisibilities(); 124 void updateVisibilities();
126 void updateParticles(); 125 void updateParticles();
diff --git a/linden/indra/newview/skins/default/xui/en-us/notifications.xml b/linden/indra/newview/skins/default/xui/en-us/notifications.xml
index 9390fb5..df277ad 100644
--- a/linden/indra/newview/skins/default/xui/en-us/notifications.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/notifications.xml
@@ -4130,7 +4130,7 @@ Add this Ability to &apos;[ROLE_NAME]&apos;?
4130 icon="alertmodal.tga" 4130 icon="alertmodal.tga"
4131 name="ClickOpenF1Help" 4131 name="ClickOpenF1Help"
4132 type="alertmodal"> 4132 type="alertmodal">
4133 Visit the [SECOND_LIFE] Support Website? (note: this is not an Imprudence Help site) 4133Visit the [GRID] Support Web site?
4134 <usetemplate 4134 <usetemplate
4135 ignoretext="When visiting the Support Website." 4135 ignoretext="When visiting the Support Website."
4136 name="okcancelignore" 4136 name="okcancelignore"
@@ -4140,6 +4140,13 @@ Add this Ability to &apos;[ROLE_NAME]&apos;?
4140 4140
4141 <notification 4141 <notification
4142 icon="alertmodal.tga" 4142 icon="alertmodal.tga"
4143 name="NoSupportUrl"
4144 type="alertmodal">
4145[GRID] has no link for support.
4146 </notification>
4147
4148 <notification
4149 icon="alertmodal.tga"
4143 name="ConfirmQuit" 4150 name="ConfirmQuit"
4144 type="alertmodal"> 4151 type="alertmodal">
4145 Are you sure you want to quit? 4152 Are you sure you want to quit?
diff --git a/linden/indra/newview/viewer_manifest.py b/linden/indra/newview/viewer_manifest.py
index 204bd1f..8c907a3 100755
--- a/linden/indra/newview/viewer_manifest.py
+++ b/linden/indra/newview/viewer_manifest.py
@@ -118,7 +118,7 @@ class ViewerManifest(LLManifest):
118 self.path("MANIFESTO.txt") 118 self.path("MANIFESTO.txt")
119 self.path("CONTRIBUTE.txt") 119 self.path("CONTRIBUTE.txt")
120 self.path("RELEASE_NOTES.txt") 120 self.path("RELEASE_NOTES.txt")
121 self.path("ChangeLog.txt") 121 self.path("ChangeLog.txt", required=False)
122 self.end_prefix("../../..") 122 self.end_prefix("../../..")
123 123
124 # From the linden directory 124 # From the linden directory
diff --git a/linden/scripts/make_changelog.py b/linden/scripts/make_changelog.py
index 43745a4..713adc1 100755
--- a/linden/scripts/make_changelog.py
+++ b/linden/scripts/make_changelog.py
@@ -50,9 +50,7 @@
50# 50#
51 51
52 52
53 53import re, os, sys, subprocess
54import commands, re, os, sys
55from string import Template
56 54
57 55
58SCRIPT_DIR = os.path.abspath( os.path.dirname( sys.argv[0] ) ) 56SCRIPT_DIR = os.path.abspath( os.path.dirname( sys.argv[0] ) )
@@ -316,8 +314,9 @@ Author: %(an)s <%(ae)s>""" % { "ad" : self.author_date,
316 "id" : self.id[0:7] }) 314 "id" : self.id[0:7] })
317 315
318 if self.commit_name != self.author_name: 316 if self.commit_name != self.author_name:
319 texts.append("Committer: %(cn)s <%(ce)s>" % { "cn" : self.commit_name, 317 texts.append("Committer: %(cn)s <%(ce)s>" % \
320 "ce" : self.commit_mail }) 318 { "cn" : self.commit_name,
319 "ce" : self.commit_mail })
321 320
322 texts.append("\n") 321 texts.append("\n")
323 322
@@ -360,32 +359,52 @@ Author: %(an)s <%(ae)s>""" % { "ad" : self.author_date,
360 359
361 360
362 361
362def fail( reason, abort=False ):
363 """Prints a message that the ChangeLog couldn't be generated, then
364 exits the script. If abort is True, exit with status code 1 (to
365 indicate that Make/VisualStudio/Xcode/etc. should abort),
366 otherwise exit with status code 0."""
367
368 if abort:
369 print "Error: Could not generate ChangeLog.txt: " + reason
370 exit(1)
371 else:
372 print "Warning: Could not generate ChangeLog.txt: " + reason
373 exit(0)
374
375
363 376
364def main(): 377def main():
365 commits = sys.argv[1:] 378 commits = sys.argv[1:]
366 if commits: 379 if not commits:
367 commits = " ".join(commits) 380 commits = ["HEAD"]
368 else:
369 commits = "HEAD"
370 381
371 382
372 # Set PATH to help find the git executable on Mac OS X. 383 # Set PATH to help find the git executable on Mac OS X.
373 if sys.platform == "darwin": 384 if sys.platform == "darwin":
374 os.environ["PATH"] += ":/usr/local/bin:/usr/local/git/bin:/sw/bin:/opt/bin:~/bin" 385 os.environ["PATH"] += ":/usr/local/bin:/usr/local/git/bin:/sw/bin:/opt/bin:~/bin"
375 386
376 # Fetch the log entries from git in one big chunk.
377 cmd = "git log --pretty=fuller --name-status --date=short --date-order " + commits
378 status, output = commands.getstatusoutput(cmd)
379
380 387
381 # If the git command failed, write a placeholder ChangeLog.txt and exit. 388 # Fetch the log entries from git in one big chunk.
389 cmd = ["git", "log", "--pretty=fuller", "--name-status",
390 "--date=short", "--date-order"] + commits
391
392 try:
393 proc = subprocess.Popen(cmd,
394 cwd = ROOT_DIR,
395 stdout = subprocess.PIPE,
396 stderr = subprocess.STDOUT,
397 shell = True)
398 except OSError:
399 fail("The 'git' command is not available.")
400
401 output = proc.communicate()[0]
402 status = proc.returncode
403
404
405 # If the git command failed, print the reason and exit.
382 if status != 0: 406 if status != 0:
383 print "Could not generate ChangeLog.txt: " + output 407 fail(output)
384 changelog = open(CHANGELOG, "w")
385 changelog.write( output + "\n (Imprudence must be compiled from a Git repository to generate a ChangeLog.)\n\n")
386 changelog.close()
387 exit(0)
388
389 408
390 # Split it up into individual commits. 409 # Split it up into individual commits.
391 logs = re.compile("^commit ", re.MULTILINE).split(output)[1:] 410 logs = re.compile("^commit ", re.MULTILINE).split(output)[1:]