Commits

Merov Linden  committed 9d2b325 Merge

Pull from richard/viewer-experience

  • Participants
  • Parent commits 1bc6872, 8504f11

Comments (0)

Files changed (16)

File autobuild.xml

             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>6299f1fd01147820e05195b84a3fe1d7</string>
+              <string>e6caaeea16131e1f2343ecd7765e3147</string>
               <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-ares/rev/233053/arch/Darwin/installer/ares-1.7.4-darwin-20110616.tar.bz2</string>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/ares-1.7.1-darwin-20110217.tar.bz2</string>
             </map>
             <key>name</key>
             <string>darwin</string>
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>b62efd5a68e5dd38314f60a20e651d43</string>
+              <string>0745872db83d45f4ab3bdc697d98e264</string>
               <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-ares/rev/233053/arch/Linux/installer/ares-1.7.4-linux-20110616.tar.bz2</string>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-ares/rev/223275/arch/Linux/installer/ares-1.7.1-linux-20110310.tar.bz2</string>
             </map>
             <key>name</key>
             <string>linux</string>
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>c2f4ea23619f3d453e799d6e89ff6930</string>
+              <string>1dcec6babd249a2597114d4ac226c461</string>
               <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-ares/rev/233053/arch/CYGWIN/installer/ares-1.7.4-windows-20110616.tar.bz2</string>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-ares/rev/220963/arch/CYGWIN/installer/ares-1.7.1-windows-20110211.tar.bz2</string>
             </map>
             <key>name</key>
             <string>windows</string>
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>463e4cc99ec8659eeee518beb41f31b6</string>
+              <string>aaea644191807f51051cefa2fac11069</string>
               <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-curl/rev/236200/arch/Darwin/installer/curl-7.21.1-darwin-20110719.tar.bz2</string>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/curl-7.21.1-darwin-20110316.tar.bz2</string>
             </map>
             <key>name</key>
             <string>darwin</string>
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>23d603a7bb864d0a8b6001f19a1b7335</string>
+              <string>fea96aa2a7d513397317194f3d6c979b</string>
               <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-curl/rev/236200/arch/CYGWIN/installer/curl-7.21.1-windows-20110719.tar.bz2</string>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/curl-7.21.1-windows-20110211.tar.bz2</string>
             </map>
             <key>name</key>
             <string>windows</string>
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>c6c28da2f262b4a146a90724b635f13f</string>
+              <string>a7c80fd8516df3b879b669b2b220067f</string>
               <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llqtwebkit/rev/236284/arch/Darwin/installer/llqtwebkit-4.7.1-darwin-20110720.tar.bz2</string>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llqtwebkit/rev/232420/arch/Darwin/installer/llqtwebkit-4.7.1-darwin-20110608.tar.bz2</string>
             </map>
             <key>name</key>
             <string>darwin</string>
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>67505bb5e72ed5912c818d506e9eac22</string>
+              <string>c05a33ee8b6f253b5a744596dfc3707d</string>
               <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llqtwebkit/rev/236284/arch/Linux/installer/llqtwebkit-4.7.1-linux-20110720.tar.bz2</string>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/llqtwebkit-linux-qt4.6-20101013.tar.bz2</string>
             </map>
             <key>name</key>
             <string>linux</string>
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>433e15cbb4d59aae9be10c18d19b094e</string>
+              <string>b9cc0333cc274c9cc40256ab7146b4fc</string>
               <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llqtwebkit/rev/236284/arch/CYGWIN/installer/llqtwebkit-4.7.1-windows-20110720.tar.bz2</string>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llqtwebkit/rev/232420/arch/CYGWIN/installer/llqtwebkit-4.7.1-windows-20110608.tar.bz2</string>
             </map>
             <key>name</key>
             <string>windows</string>
           </map>
         </map>
       </map>
+      <key>openSSL</key>
+      <map>
+        <key>license</key>
+        <string>openSSL</string>
+        <key>license_file</key>
+        <string>LICENSES/openssl.txt</string>
+        <key>name</key>
+        <string>openSSL</string>
+        <key>platforms</key>
+        <map>
+          <key>darwin</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>facee34b8bd57ad602157e65a5af1a49</string>
+              <key>url</key>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openssl-0.9.8q-darwin-20110211.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>darwin</string>
+          </map>
+          <key>linux</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>3d40be8566fa4b9df9a38e2a0f9ea467</string>
+              <key>url</key>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-openssl/rev/226882/arch/Linux/installer/openssl-1.0.0d-linux-20110418.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>linux</string>
+          </map>
+          <key>windows</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>774c7f0a0312bee3054757a623e227bc</string>
+              <key>url</key>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-openssl/rev/220986/arch/CYGWIN/installer/openssl-0.9.8q-windows-20110211.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>windows</string>
+          </map>
+        </map>
+      </map>
       <key>openal_soft</key>
       <map>
         <key>license</key>
           </map>
         </map>
       </map>
-      <key>openssl</key>
-      <map>
-        <key>license</key>
-        <string>openssl</string>
-        <key>license_file</key>
-        <string>LICENSES/openssl.txt</string>
-        <key>name</key>
-        <string>openssl</string>
-        <key>platforms</key>
-        <map>
-          <key>darwin</key>
-          <map>
-            <key>archive</key>
-            <map>
-              <key>hash</key>
-              <string>1aecd89fee54741f2c4fd65c082d2604</string>
-              <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-openssl/rev/227862/arch/Darwin/installer/openssl-1.0.0d-darwin-20110427.tar.bz2</string>
-            </map>
-            <key>name</key>
-            <string>darwin</string>
-          </map>
-          <key>linux</key>
-          <map>
-            <key>archive</key>
-            <map>
-              <key>hash</key>
-              <string>eab3a49d1ef77a651a3896d1d4864a78</string>
-              <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-openssl/rev/227862/arch/Linux/installer/openssl-1.0.0d-linux-20110427.tar.bz2</string>
-            </map>
-            <key>name</key>
-            <string>linux</string>
-          </map>
-          <key>windows</key>
-          <map>
-            <key>archive</key>
-            <map>
-              <key>hash</key>
-              <string>8ba049ecc76bb1adf3ab3e5bad64c39e</string>
-              <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-openssl/rev/227862/arch/CYGWIN/installer/openssl-1.0.0d-windows-20110427.tar.bz2</string>
-            </map>
-            <key>name</key>
-            <string>windows</string>
-          </map>
-        </map>
-      </map>
       <key>pcre</key>
       <map>
         <key>license</key>
             <map>
               <key>build</key>
               <map>
-                <key>command</key>
-                <string>xcodebuild</string>
                 <key>filters</key>
                 <array>
                   <string>setenv</string>
                 </array>
+                <key>command</key>
+                <string>xcodebuild</string>
                 <key>options</key>
                 <array>
                   <string>-configuration Debug</string>
             <map>
               <key>build</key>
               <map>
-                <key>command</key>
-                <string>xcodebuild</string>
                 <key>filters</key>
                 <array>
                   <string>setenv</string>
                 </array>
+                <key>command</key>
+                <string>xcodebuild</string>
                 <key>options</key>
                 <array>
                   <string>-configuration RelWithDebInfo</string>
             <map>
               <key>build</key>
               <map>
-                <key>command</key>
-                <string>xcodebuild</string>
                 <key>filters</key>
                 <array>
                   <string>setenv</string>
                 </array>
+                <key>command</key>
+                <string>xcodebuild</string>
                 <key>options</key>
                 <array>
                   <string>-configuration Release</string>

File indra/cmake/OpenSSL.cmake

 if (STANDALONE)
   include(FindOpenSSL)
 else (STANDALONE)
-  use_prebuilt_binary(openssl)
+  use_prebuilt_binary(openSSL)
   if (WINDOWS)
     set(OPENSSL_LIBRARIES ssleay32 libeay32)
   else (WINDOWS)

File indra/integration_tests/llimage_libtest/llimage_libtest.cpp

 #include "llimagetga.h"
 #include "llimagej2c.h"
 #include "lldir.h"
+#include "lldiriterator.h"
 
 // system libraries
 #include <iostream>
 	{
 		// If file name is a pattern, iterate to get each file name and store
 		std::string next_name;
-		while (gDirUtilp->getNextFileInDir(dir,name,next_name))
+		LLDirIterator iter(dir, name);
+		while (iter.next(next_name))
 		{
 			std::string file_name = dir + gDirUtilp->getDirDelimiter() + next_name;
 			input_filenames.push_back(file_name);

File indra/llcommon/llinstancetracker.h

 	class instance_iter : public boost::iterator_facade<instance_iter, T, boost::forward_traversal_tag>
 	{
 	public:
-		instance_iter(typename InstanceMap::iterator& it)
+		typedef boost::iterator_facade<instance_iter, T, boost::forward_traversal_tag> super_t;
+		
+		instance_iter(const typename InstanceMap::iterator& it)
 		:	mIterator(it)
 		{
 			++sIterationNestDepth;
 			--sIterationNestDepth;
 		}
 
+
 	private:
 		friend class boost::iterator_core_access;
 
 	class key_iter : public boost::iterator_facade<key_iter, KEY, boost::forward_traversal_tag>
 	{
 	public:
+		typedef boost::iterator_facade<key_iter, KEY, boost::forward_traversal_tag> super_t;
+
 		key_iter(typename InstanceMap::iterator& it)
 			:	mIterator(it)
 		{
 			++sIterationNestDepth;
 		}
 
+		key_iter(const key_iter& other)
+			:	mIterator(other.mIterator)
+		{
+			++sIterationNestDepth;
+		}
+
 		~key_iter()
 		{
 			--sIterationNestDepth;
 		}
 
+
 	private:
 		friend class boost::iterator_core_access;
 
 	class instance_iter : public boost::iterator_facade<instance_iter, T, boost::forward_traversal_tag>
 	{
 	public:
-		instance_iter(typename InstanceSet::iterator& it)
+		instance_iter(const typename InstanceSet::iterator& it)
 		:	mIterator(it)
 		{
 			++sIterationNestDepth;

File indra/llcommon/tests/llinstancetracker_test.cpp

         ensure_equals(Keyed::instanceCount(), 0);
     }
 
-    template<> template<>
-    void object::test<2>()
-    {
-        ensure_equals(Unkeyed::instanceCount(), 0);
-        {
-            Unkeyed one;
-            ensure_equals(Unkeyed::instanceCount(), 1);
-            Unkeyed* found = Unkeyed::getInstance(&one);
-            ensure_equals(found, &one);
-            {
-                boost::scoped_ptr<Unkeyed> two(new Unkeyed);
-                ensure_equals(Unkeyed::instanceCount(), 2);
-                Unkeyed* found = Unkeyed::getInstance(two.get());
-                ensure_equals(found, two.get());
-            }
-            ensure_equals(Unkeyed::instanceCount(), 1);
-        }
-        ensure_equals(Unkeyed::instanceCount(), 0);
-    }
+  //  template<> template<>
+  //  void object::test<2>()
+  //  {
+  //      ensure_equals(Unkeyed::instanceCount(), 0);
+  //      {
+  //          Unkeyed one;
+  //          ensure_equals(Unkeyed::instanceCount(), 1);
+  //          Unkeyed* found = Unkeyed::getInstance(&one);
+  //          ensure_equals(found, &one);
+  //          {
+  //              boost::scoped_ptr<Unkeyed> two(new Unkeyed);
+  //              ensure_equals(Unkeyed::instanceCount(), 2);
+  //              Unkeyed* found = Unkeyed::getInstance(two.get());
+  //              ensure_equals(found, two.get());
+  //          }
+  //          ensure_equals(Unkeyed::instanceCount(), 1);
+  //      }
+  //      ensure_equals(Unkeyed::instanceCount(), 0);
+  //  }
 
-    template<> template<>
-    void object::test<3>()
-    {
-        Keyed one("one"), two("two"), three("three");
-        // We don't want to rely on the underlying container delivering keys
-        // in any particular order. That allows us the flexibility to
-        // reimplement LLInstanceTracker using, say, a hash map instead of a
-        // std::map. We DO insist that every key appear exactly once.
-        typedef std::vector<std::string> StringVector;
-        StringVector keys(Keyed::beginKeys(), Keyed::endKeys());
-        std::sort(keys.begin(), keys.end());
-        StringVector::const_iterator ki(keys.begin());
-        ensure_equals(*ki++, "one");
-        ensure_equals(*ki++, "three");
-        ensure_equals(*ki++, "two");
-        // Use ensure() here because ensure_equals would want to display
-        // mismatched values, and frankly that wouldn't help much.
-        ensure("didn't reach end", ki == keys.end());
+  //  template<> template<>
+  //  void object::test<3>()
+  //  {
+  //      Keyed one("one"), two("two"), three("three");
+  //      // We don't want to rely on the underlying container delivering keys
+  //      // in any particular order. That allows us the flexibility to
+  //      // reimplement LLInstanceTracker using, say, a hash map instead of a
+  //      // std::map. We DO insist that every key appear exactly once.
+  //      typedef std::vector<std::string> StringVector;
+  //      StringVector keys(Keyed::beginKeys(), Keyed::endKeys());
+  //      std::sort(keys.begin(), keys.end());
+  //      StringVector::const_iterator ki(keys.begin());
+  //      ensure_equals(*ki++, "one");
+  //      ensure_equals(*ki++, "three");
+  //      ensure_equals(*ki++, "two");
+  //      // Use ensure() here because ensure_equals would want to display
+  //      // mismatched values, and frankly that wouldn't help much.
+  //      ensure("didn't reach end", ki == keys.end());
 
-        // Use a somewhat different approach to order independence with
-        // beginInstances(): explicitly capture the instances we know in a
-        // set, and delete them as we iterate through.
-        typedef std::set<Keyed*> InstanceSet;
-        InstanceSet instances;
-        instances.insert(&one);
-        instances.insert(&two);
-        instances.insert(&three);
-        for (Keyed::instance_iter ii(Keyed::beginInstances()), iend(Keyed::endInstances());
-             ii != iend; ++ii)
-        {
-            Keyed& ref = *ii;
-            ensure_equals("spurious instance", instances.erase(&ref), 1);
-        }
-        ensure_equals("unreported instance", instances.size(), 0);
-    }
+  //      // Use a somewhat different approach to order independence with
+  //      // beginInstances(): explicitly capture the instances we know in a
+  //      // set, and delete them as we iterate through.
+  //      typedef std::set<Keyed*> InstanceSet;
+  //      InstanceSet instances;
+  //      instances.insert(&one);
+  //      instances.insert(&two);
+  //      instances.insert(&three);
+  //      for (Keyed::instance_iter ii(Keyed::beginInstances()), iend(Keyed::endInstances());
+  //           ii != iend; ++ii)
+  //      {
+  //          Keyed& ref = *ii;
+  //          ensure_equals("spurious instance", instances.erase(&ref), 1);
+  //      }
+  //      ensure_equals("unreported instance", instances.size(), 0);
+  //  }
 
-    template<> template<>
-    void object::test<4>()
-    {
-        Unkeyed one, two, three;
-        typedef std::set<Unkeyed*> KeySet;
-    
-        KeySet instances;
-        instances.insert(&one);
-        instances.insert(&two);
-        instances.insert(&three);
-	{
-		for (Unkeyed::instance_iter ii(Unkeyed::beginInstances()), iend(Unkeyed::endInstances()); ii != iend; ++ii)
-		{
-			Unkeyed& ref = *ii;
-			ensure_equals("spurious instance", instances.erase(&ref), 1);
-		}
-	}
-        ensure_equals("unreported instance", instances.size(), 0);
-    }
+  //  template<> template<>
+  //  void object::test<4>()
+  //  {
+  //      Unkeyed one, two, three;
+  //      typedef std::set<Unkeyed*> KeySet;
+  //  
+  //      KeySet instances;
+  //      instances.insert(&one);
+  //      instances.insert(&two);
+  //      instances.insert(&three);
+	
+		//for (Unkeyed::instance_iter ii(Unkeyed::beginInstances()), iend(Unkeyed::endInstances()); ii != iend; ++ii)
+		//{
+		//	Unkeyed& ref = *ii;
+		//	ensure_equals("spurious instance", instances.erase(&ref), 1);
+		//}
+	
+  //      ensure_equals("unreported instance", instances.size(), 0);
+  //  }
 } // namespace tut

File indra/llui/llcombobox.cpp

 			return FALSE;
 		}
 		// if selection has changed, pop open list
-		else if (mList->getLastSelectedItem() != last_selected_item ||
-				(key == KEY_DOWN || key == KEY_UP) && !mList->isEmpty())
+		else if (mList->getLastSelectedItem() != last_selected_item 
+					|| ((key == KEY_DOWN || key == KEY_UP)
+						&& mList->getCanSelect()
+						&& !mList->isEmpty()))
 		{
 			showList();
 		}

File indra/llui/llfloater.cpp

 	
 	mRectControl.clear(); // don't save rect of stacked floaters
 	setShape(next_rect);
-}
+}
+

File indra/llui/llfloaterreg.cpp

 	LLFloater* instance = getInstance(name, key); 
 	if (instance) 
 	{
-		instance->openFloater(instance->mKey);
+		instance->openFloater(key);
 		if (focus)
 			instance->setFocus(TRUE);
 	}

File indra/newview/llavataractions.cpp

 	static LLCachedControl<LLRect> profile_rect(gSavedSettings, "WebProfileRect");
 	LLFloaterWebContent::create(LLFloaterWebContent::Params().
 							url(url).
-							id(agent_id).
+							id(agent_id.asString()).
 							show_chrome(show_chrome).
 							window_class("profile").
 							preferred_media_size(profile_rect));
 {
 	LLSD sd;
 	sd["id"] = id;
-	LLFloaterWebContent *browser = dynamic_cast<LLFloaterWebContent*> (LLFloaterReg::findInstance("web_content", sd));
+	LLFloaterWebContent *browser = dynamic_cast<LLFloaterWebContent*> (LLFloaterReg::findInstance("profile", sd));
 	return browser && browser->isShown();
 }
 
 {
 	LLSD sd;
 	sd["id"] = id;
-	LLFloaterWebContent *browser = dynamic_cast<LLFloaterWebContent*> (LLFloaterReg::findInstance("web_content", sd));
+	LLFloaterWebContent *browser = dynamic_cast<LLFloaterWebContent*> (LLFloaterReg::findInstance("profile", sd));
 	if (browser)
 	{
 		browser->closeFloater();

File indra/newview/llfloatersearch.cpp

 
 		// create the LLSD arguments for the search floater
 		LLFloaterSearch::Params p;
-		p.category = category;
-		p.query = LLURI::unescape(search_text);
+		p.search.category = category;
+		p.search.query = LLURI::unescape(search_text);
 
 		// open the search floater and perform the requested search
 		LLFloaterReg::showInstance("search", p);
 };
 LLSearchHandler gSearchHandler;
 
-LLFloaterSearch::_Params::_Params()
+LLFloaterSearch::SearchQuery::SearchQuery()
 :	category("category", ""),
 	query("query")
-{
-	trusted_content = true;
-	allow_address_entry = false;
-}
-
+{}
 
 LLFloaterSearch::LLFloaterSearch(const Params& key) :
 	LLFloaterWebContent(key),
 
 void LLFloaterSearch::onOpen(const LLSD& key)
 {
-	LLFloaterWebContent::onOpen(key);
-	search(key);
+	Params p(key);
+	p.trusted_content = true;
+	p.allow_address_entry = false;
+
+	LLFloaterWebContent::onOpen(p);
+	search(p.search);
 }
 
 void LLFloaterSearch::onClose(bool app_quitting)
 	//getChildView("refresh_search")->setVisible( (godlevel != mSearchGodLevel));
 }
 
-void LLFloaterSearch::search(const LLSD &key)
+void LLFloaterSearch::search(const SearchQuery &p)
 {
-	Params p(key);
-	
 	if (! mWebBrowser || !p.validateBlock())
 	{
 		return;

File indra/newview/llfloatersearch.h

 	public LLFloaterWebContent
 {
 public:
-	struct _Params : public LLInitParam::Block<_Params, LLFloaterWebContent::Params>
+	struct SearchQuery : public LLInitParam::Block<SearchQuery>
 	{
 		Optional<std::string> category;
 		Optional<std::string> query;
 
-		_Params();
+		SearchQuery();
+	};
+
+	struct _Params : public LLInitParam::Block<_Params, LLFloaterWebContent::Params>
+	{
+		Optional<SearchQuery> search;
 	};
 
 	typedef LLSDParamAdapter<_Params> Params;
 	///  - "id": specifies the text phrase to search for
 	///  - "category": one of "all" (default), "people", "places",
 	///    "events", "groups", "wiki", "destinations", "classifieds"
-	void search(const LLSD &key);
+	void search(const SearchQuery &query);
 
 	/// changing godmode can affect the search results that are
 	/// returned by the search website - use this method to tell the

File indra/newview/llfloaterwebcontent.cpp

 
 LLFloaterWebContent::LLFloaterWebContent( const Params& params )
 :	LLFloater( params ),
-	LLInstanceTracker(params.id()),
-	mUUID(params.id().asString())
+	LLInstanceTracker<LLFloaterWebContent, std::string>(params.id()),
+	mUUID(params.id())
 {
 	mCommitCallbackRegistrar.add( "WebContent.Back", boost::bind( &LLFloaterWebContent::onClickBack, this ));
 	mCommitCallbackRegistrar.add( "WebContent.Forward", boost::bind( &LLFloaterWebContent::onClickForward, this ));
 //static
 LLFloater* LLFloaterWebContent::create( Params p)
 {
-	lldebugs << "url = " << p.url() << ", target = " << p.target() << ", uuid = " << p.id().asString() << llendl;
+	lldebugs << "url = " << p.url() << ", target = " << p.target() << ", uuid = " << p.id() << llendl;
 
 	if (!p.id.isProvided())
 	{
-		p.id = LLUUID::generateNewID();
+		p.id = LLUUID::generateNewID().asString();
 	}
 
-	if(!p.target.isProvided() || p.target() == "_blank")
+	if(p.target().empty() || p.target() == "_blank")
 	{
-		p.target = p.id().asString();
+		p.target = p.id();
 	}
 
 	S32 browser_window_limit = gSavedSettings.getS32("WebContentWindowLimit");
 //static
 void LLFloaterWebContent::closeRequest(const std::string &uuid)
 {
-	LLFloaterWebContent* floaterp = getInstance(LLUUID(uuid));
+	LLFloaterWebContent* floaterp = getInstance(uuid);
 	if (floaterp)
 	{
 		floaterp->closeFloater(false);
 //static
 void LLFloaterWebContent::geometryChanged(const std::string &uuid, S32 x, S32 y, S32 width, S32 height)
 {
-	LLFloaterWebContent* floaterp = getInstance(LLUUID(uuid));
+	LLFloaterWebContent* floaterp = getInstance(uuid);
 	if (floaterp)
 	{
 		floaterp->geometryChanged(x, y, width, height);
 void LLFloaterWebContent::open_media(const Params& p)
 {
 	// Specifying a mime type of text/html here causes the plugin system to skip the MIME type probe and just open a browser plugin.
-	LLViewerMedia::proxyWindowOpened(p.target(), p.id().asString());
+	LLViewerMedia::proxyWindowOpened(p.target(), p.id());
 	mWebBrowser->setHomePageUrl(p.url, "text/html");
 	mWebBrowser->setTarget(p.target);
 	mWebBrowser->navigateTo(p.url, "text/html");
-
+	
 	set_current_url(p.url);
 
 	getChild<LLLayoutPanel>("status_bar")->setVisible(p.show_chrome);
 	getChild<LLLayoutPanel>("nav_controls")->setVisible(p.show_chrome);
-	getChild<LLUICtrl>("address")->setEnabled(p.allow_address_entry && !p.trusted_content);
+	bool address_entry_enabled = p.allow_address_entry && !p.trusted_content;
+	// disable components of combo box so that we can still select and copy text from address bar (a disabled line editor still allows this, but not if its parent is disabled)
+	getChildView("address")->getChildView("Combo Text Entry")->setEnabled(address_entry_enabled);
+	getChildView("address")->getChildView("Combobox Button")->setEnabled(address_entry_enabled);
+	getChildView("address")->getChildView("ComboBox")->setEnabled(address_entry_enabled);
+
+	if (!address_entry_enabled)
+	{
+		mWebBrowser->setFocus(TRUE);
+	}
 
 	if (!p.show_chrome)
 	{

File indra/newview/llfloaterwebcontent.h

 class LLFloaterWebContent :
 	public LLFloater,
 	public LLViewerMediaObserver,
-	public LLInstanceTracker<LLFloaterWebContent, LLUUID>
+	public LLInstanceTracker<LLFloaterWebContent, std::string>
 {
 public:
     LOG_CLASS(LLFloaterWebContent);
 	{
 		Optional<std::string>	url,
 								target,
-								window_class;
-		Optional<LLUUID>		id;
+								window_class,
+								id;
 		Optional<bool>			show_chrome,
 								allow_address_entry,
 								trusted_content;

File indra/newview/llinventorymodel.cpp

 }
 
 // 	static
-void LLInventoryModel::removeInventoryItem(LLUUID agent_id, LLMessageSystem* msg)
+void LLInventoryModel::removeInventoryItem(LLUUID agent_id, LLMessageSystem* msg, const char* msg_label)
 {
 	LLUUID item_id;
-	S32 count = msg->getNumberOfBlocksFast(_PREHASH_InventoryData);
+	S32 count = msg->getNumberOfBlocksFast(msg_label);
+	lldebugs << "Message has " << count << " item blocks" << llendl;
 	uuid_vec_t item_ids;
 	update_map_t update;
 	for(S32 i = 0; i < count; ++i)
 	{
-		msg->getUUIDFast(_PREHASH_InventoryData, _PREHASH_ItemID, item_id, i);
+		msg->getUUIDFast(msg_label, _PREHASH_ItemID, item_id, i);
+		lldebugs << "Checking for item-to-be-removed " << item_id << llendl;
 		LLViewerInventoryItem* itemp = gInventory.getItem(item_id);
 		if(itemp)
 		{
+		lldebugs << "Item will be removed " << item_id << llendl;
 			// we only bother with the delete and account if we found
 			// the item - this is usually a back-up for permissions,
 			// so frequently the item will already be gone.
 	gInventory.accountForUpdate(update);
 	for(uuid_vec_t::iterator it = item_ids.begin(); it != item_ids.end(); ++it)
 	{
+		lldebugs << "Calling deleteObject " << *it << llendl;
 		gInventory.deleteObject(*it);
 	}
 }
 				<< llendl;
 		return;
 	}
-	LLInventoryModel::removeInventoryItem(agent_id, msg);
+	LLInventoryModel::removeInventoryItem(agent_id, msg, _PREHASH_InventoryData);
 	gInventory.notifyObservers();
 }
 
 		return;
 	}
 	LLInventoryModel::removeInventoryFolder( agent_id, msg );
-	LLInventoryModel::removeInventoryItem( agent_id, msg );
+	LLInventoryModel::removeInventoryItem( agent_id, msg, _PREHASH_ItemData );
 	gInventory.notifyObservers();
 }
 

File indra/newview/llinventorymodel.h

 	//--------------------------------------------------------------------
 public:
 	static void processUpdateCreateInventoryItem(LLMessageSystem* msg, void**);
-	static void removeInventoryItem(LLUUID agent_id, LLMessageSystem* msg);
+	static void removeInventoryItem(LLUUID agent_id, LLMessageSystem* msg, const char* msg_label);
 	static void processRemoveInventoryItem(LLMessageSystem* msg, void**);
 	static void processUpdateInventoryFolder(LLMessageSystem* msg, void**);
 	static void removeInventoryFolder(LLUUID agent_id, LLMessageSystem* msg);

File indra/newview/llweb.cpp

 // Explicitly open a Web URL using the Web content floater
 void LLWeb::loadWebURLInternal(const std::string &url, const std::string& target, const std::string& uuid)
 {
-	LLFloaterWebContent::create(LLFloaterWebContent::Params().url(url).target(target).id(LLUUID(uuid)));
+	LLFloaterWebContent::create(LLFloaterWebContent::Params().url(url).target(target).id(uuid));
 }
 
 // static