diff options
| author | Richard Nelson <richard@lindenlab.com> | 2011-10-10 19:17:38 -0700 | 
|---|---|---|
| committer | Richard Nelson <richard@lindenlab.com> | 2011-10-10 19:17:38 -0700 | 
| commit | ec23ec68ea8835e4155e083ec5570245b0aef1ec (patch) | |
| tree | 157ff142523382a6756ebc508a98362891a850e7 /indra/newview | |
| parent | 7e13856df2c60a7e011df01459a3a085a3a4a82a (diff) | |
EXP-1310 FIX Profile button should open Web Profile floater
removed unused LLWeb functions for opening non-web media
moved logic inside floaters and away from auxiliary functions
Diffstat (limited to 'indra/newview')
| -rw-r--r-- | indra/newview/app_settings/commands.xml | 6 | ||||
| -rwxr-xr-x | indra/newview/llavataractions.cpp | 19 | ||||
| -rw-r--r-- | indra/newview/llavataractions.h | 3 | ||||
| -rw-r--r-- | indra/newview/llfloaterhelpbrowser.cpp | 17 | ||||
| -rw-r--r-- | indra/newview/llfloaterhelpbrowser.h | 2 | ||||
| -rw-r--r-- | indra/newview/llfloaterwebcontent.cpp | 39 | ||||
| -rw-r--r-- | indra/newview/llmediactrl.cpp | 11 | ||||
| -rwxr-xr-x | indra/newview/llpanelprofile.cpp | 2 | ||||
| -rw-r--r-- | indra/newview/llviewerfloaterreg.cpp | 4 | ||||
| -rw-r--r-- | indra/newview/llviewerhelp.cpp | 37 | ||||
| -rw-r--r-- | indra/newview/llviewerhelp.h | 6 | ||||
| -rw-r--r-- | indra/newview/llviewermenu.cpp | 32 | ||||
| -rw-r--r-- | indra/newview/llweb.cpp | 4 | ||||
| -rw-r--r-- | indra/newview/llweb.h | 10 | 
14 files changed, 97 insertions, 95 deletions
| diff --git a/indra/newview/app_settings/commands.xml b/indra/newview/app_settings/commands.xml index 881bc22144..d758647d3a 100644 --- a/indra/newview/app_settings/commands.xml +++ b/indra/newview/app_settings/commands.xml @@ -187,10 +187,8 @@             icon="Command_Profile_Icon"             label_ref="Command_Profile_Label"             tooltip_ref="Command_Profile_Tooltip" -           execute_function="Floater.ToolbarToggle" -           execute_parameters="my_profile" -           is_running_function="Floater.IsOpen" -           is_running_parameters="my_profile" +           execute_function="Avatar.ToggleMyProfile" +           is_running_function="Avatar.IsMyProfileOpen"             />    <command name="search"             available_in_toybox="true" diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp index b14c02a5d6..b54f622986 100755 --- a/indra/newview/llavataractions.cpp +++ b/indra/newview/llavataractions.cpp @@ -316,12 +316,13 @@ static void on_avatar_name_show_profile(const LLUUID& agent_id, const LLAvatarNa  	// PROFILES: open in webkit window  	const bool show_chrome = false;  	static LLCachedControl<LLRect> profile_rect(gSavedSettings, "WebProfileRect"); -	LLFloaterWebContent::create(LLFloaterWebContent::Params(). -							url(url). -							id(agent_id.asString()). -							show_chrome(show_chrome). -							window_class("profile"). -							preferred_media_size(profile_rect)); +	LLFloaterWebContent::Params p; +	p.url(url). +		id(agent_id.asString()). +		show_chrome(show_chrome). +		window_class("profile"). +		preferred_media_size(profile_rect); +	LLFloaterReg::showInstance("profile", p);  }  // static @@ -342,6 +343,12 @@ bool LLAvatarActions::profileVisible(const LLUUID& id)  	return browser && browser->isShown();  } +//static +LLFloater* LLAvatarActions::getProfileFloater(const LLUUID& id) +{ +	LLFloaterWebContent *browser = dynamic_cast<LLFloaterWebContent*> (LLFloaterReg::findInstance("profile", LLSD().with("id", id))); +	return browser; +}  //static   void LLAvatarActions::hideProfile(const LLUUID& id) diff --git a/indra/newview/llavataractions.h b/indra/newview/llavataractions.h index fbfd815f41..748b7cb3d1 100644 --- a/indra/newview/llavataractions.h +++ b/indra/newview/llavataractions.h @@ -35,7 +35,7 @@  #include <vector>  class LLInventoryPanel; - +class LLFloater;  /**   * Friend-related actions (add, remove, offer teleport, etc) @@ -96,6 +96,7 @@ public:  	static void showProfile(const LLUUID& id);  	static void hideProfile(const LLUUID& id);  	static bool profileVisible(const LLUUID& id); +	static LLFloater* getProfileFloater(const LLUUID& id);  	/**  	 * Show avatar on world map. diff --git a/indra/newview/llfloaterhelpbrowser.cpp b/indra/newview/llfloaterhelpbrowser.cpp index 3012638d44..fd9c37ae73 100644 --- a/indra/newview/llfloaterhelpbrowser.cpp +++ b/indra/newview/llfloaterhelpbrowser.cpp @@ -39,6 +39,7 @@  #include "llurlhistory.h"  #include "llmediactrl.h"  #include "llviewermedia.h" +#include "llviewerhelp.h"  LLFloaterHelpBrowser::LLFloaterHelpBrowser(const LLSD& key) @@ -74,6 +75,17 @@ void LLFloaterHelpBrowser::buildURLHistory()  void LLFloaterHelpBrowser::onOpen(const LLSD& key)  {  	gSavedSettings.setBOOL("HelpFloaterOpen", TRUE); + +	std::string topic = key.asString(); + +	if (topic == "__local") +	{ +		mBrowser->navigateToLocalPage( "help-offline" , "index.html" ); +	} +	else +	{ +		mBrowser->navigateTo(LLViewerHelp::instance().getURL(topic)); +	}  }  //virtual @@ -148,8 +160,3 @@ void LLFloaterHelpBrowser::openMedia(const std::string& media_url)  	mBrowser->navigateTo(media_url, "text/html");  	setCurrentURL(media_url);  } - -void LLFloaterHelpBrowser::navigateToLocalPage( const std::string& subdir, const std::string& filename_in ) -{ -	mBrowser->navigateToLocalPage(subdir, filename_in); -} diff --git a/indra/newview/llfloaterhelpbrowser.h b/indra/newview/llfloaterhelpbrowser.h index afe0f4df69..80b0ecc06b 100644 --- a/indra/newview/llfloaterhelpbrowser.h +++ b/indra/newview/llfloaterhelpbrowser.h @@ -48,8 +48,6 @@ class LLFloaterHelpBrowser :  	/*virtual*/ void handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event);  	void openMedia(const std::string& media_url); - -	void navigateToLocalPage( const std::string& subdir, const std::string& filename_in );   private:  	void buildURLHistory(); diff --git a/indra/newview/llfloaterwebcontent.cpp b/indra/newview/llfloaterwebcontent.cpp index 2c9a736aff..c76aeb0498 100644 --- a/indra/newview/llfloaterwebcontent.cpp +++ b/indra/newview/llfloaterwebcontent.cpp @@ -88,20 +88,6 @@ BOOL LLFloaterWebContent::postBuild()  	return TRUE;  } -bool LLFloaterWebContent::matchesKey(const LLSD& key) -{ -	LLUUID id = key["id"]; -	if (id.notNull()) -	{ -		return id == mKey["id"].asUUID(); -	} -	else -	{ -		return key["target"].asString() == mKey["target"].asString(); -	} -} - -  void LLFloaterWebContent::initializeURLHistory()  {  	// start with an empty list @@ -123,6 +109,20 @@ void LLFloaterWebContent::initializeURLHistory()  	}  } +bool LLFloaterWebContent::matchesKey(const LLSD& key) +{ +	Params p(mKey); +	Params other_p(key); +	if (!other_p.target().empty() && other_p.target() != "_blank") +	{ +		return other_p.target() == p.target(); +	} +	else +	{ +		return other_p.id() == p.id(); +	} +} +  //static  LLFloater* LLFloaterWebContent::create( Params p)  { @@ -139,14 +139,7 @@ LLFloater* LLFloaterWebContent::create( Params p)  	}  	S32 browser_window_limit = gSavedSettings.getS32("WebContentWindowLimit"); - -	LLSD sd; -	sd["target"] = p.target; -	if(LLFloaterReg::findInstance(p.window_class, sd) != NULL) -	{ -		// There's already a web browser for this tag, so we won't be opening a new window. -	} -	else if(browser_window_limit != 0) +	if(browser_window_limit != 0)  	{  		// showInstance will open a new window.  Figure out how many web browsers are already open,  		// and close the least recently opened one if this will put us over the limit. @@ -166,7 +159,7 @@ LLFloater* LLFloaterWebContent::create( Params p)  		}  	} -	return LLFloaterReg::showInstance(p.window_class, p); +	return new LLFloaterWebContent(p);  }  //static diff --git a/indra/newview/llmediactrl.cpp b/indra/newview/llmediactrl.cpp index 0bdeb114f5..1f1e49726d 100644 --- a/indra/newview/llmediactrl.cpp +++ b/indra/newview/llmediactrl.cpp @@ -1122,16 +1122,7 @@ void LLMediaCtrl::onPopup(const LLSD& notification, const LLSD& response)  			lldebugs << "No gFloaterView for onPopuup()" << llendl;  		}; -		// (for now) open web content floater if that's our parent, otherwise, open the current media floater -		// (this will change soon) -		if ( floater_name == "web_content" ) -		{ -			LLWeb::loadWebURL(notification["payload"]["url"], notification["payload"]["target"], notification["payload"]["uuid"]); -		} -		else -		{ -			LLWeb::loadURL(notification["payload"]["url"], notification["payload"]["target"], notification["payload"]["uuid"]); -		} +		LLWeb::loadURL(notification["payload"]["url"], notification["payload"]["target"], notification["payload"]["uuid"]);  	}  	else  	{ diff --git a/indra/newview/llpanelprofile.cpp b/indra/newview/llpanelprofile.cpp index fd5c3362bb..27390fca78 100755 --- a/indra/newview/llpanelprofile.cpp +++ b/indra/newview/llpanelprofile.cpp @@ -72,7 +72,7 @@ public:  		std::string agent_name = params[0];  		llinfos << "Profile, agent_name " << agent_name << llendl;  		std::string url = getProfileURL(agent_name); -		LLWeb::loadWebURLInternal(url); +		LLWeb::loadURLInternal(url);  		return true;  	} diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp index 619d74e7ac..3463eec5d8 100644 --- a/indra/newview/llviewerfloaterreg.cpp +++ b/indra/newview/llviewerfloaterreg.cpp @@ -288,7 +288,7 @@ void LLViewerFloaterReg::registerFloaters()  	LLFloaterReg::add("stop_queue", "floater_script_queue.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterNotRunQueue>);  	LLFloaterReg::add("snapshot", "floater_snapshot.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSnapshot>);  	LLFloaterReg::add("search", "floater_search.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSearch>); -	LLFloaterReg::add("profile", "floater_web_content.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterWebContent>);	 +	LLFloaterReg::add("profile", "floater_web_content.xml", (LLFloaterBuildFunc)&LLFloaterWebContent::create);	  	LLFloaterUIPreviewUtil::registerFloater(); @@ -301,7 +301,7 @@ void LLViewerFloaterReg::registerFloaters()  	LLFloaterReg::add("voice_controls", "floater_voice_controls.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLCallFloater>);  	LLFloaterReg::add("voice_effect", "floater_voice_effect.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterVoiceEffect>); -	LLFloaterReg::add("web_content", "floater_web_content.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterWebContent>);	 +	LLFloaterReg::add("web_content", "floater_web_content.xml", (LLFloaterBuildFunc)&LLFloaterWebContent::create);	  	LLFloaterReg::add("whitelist_entry", "floater_whitelist_entry.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterWhiteListEntry>);	  	LLFloaterWindowSizeUtil::registerFloater();  	LLFloaterReg::add("world_map", "floater_world_map.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterWorldMap>);	 diff --git a/indra/newview/llviewerhelp.cpp b/indra/newview/llviewerhelp.cpp index 3a3d4f3881..d1120b6269 100644 --- a/indra/newview/llviewerhelp.cpp +++ b/indra/newview/llviewerhelp.cpp @@ -69,15 +69,12 @@ LLHelpHandler gHelpHandler;  //////////////////////////////  // implement LLHelp interface -void LLViewerHelp::showTopic(const std::string &topic) +std::string LLViewerHelp::getURL(const std::string &topic)  {  	// allow overriding the help server with a local help file  	if( gSavedSettings.getBOOL("HelpUseLocal") )  	{ -		showHelp(); -		LLFloaterHelpBrowser* helpbrowser = dynamic_cast<LLFloaterHelpBrowser*>(LLFloaterReg::getInstance("help_browser")); -		helpbrowser->navigateToLocalPage( "help-offline" , "index.html" ); -		return; +		return "__local";  	}  	// if the help topic is empty, use the default topic @@ -99,11 +96,12 @@ void LLViewerHelp::showTopic(const std::string &topic)  		}  	} -	// work out the URL for this topic and display it  -	showHelp(); -	 -	std::string helpURL = LLViewerHelpUtil::buildHelpURL( help_topic ); -	setRawURL(helpURL); +	return LLViewerHelpUtil::buildHelpURL( help_topic ); +} + +void LLViewerHelp::showTopic(const std::string& topic) +{ +	LLFloaterReg::showInstance("help_browser", topic);  }  std::string LLViewerHelp::defaultTopic() @@ -146,23 +144,4 @@ std::string LLViewerHelp::getTopicFromFocus()  	return defaultTopic();  } -// static  -void LLViewerHelp::showHelp() -{ -	LLFloaterReg::showInstance("help_browser"); -} - -// static -void LLViewerHelp::setRawURL(std::string url) -{ -	LLFloaterHelpBrowser* helpbrowser = dynamic_cast<LLFloaterHelpBrowser*>(LLFloaterReg::getInstance("help_browser")); -	if (helpbrowser) -	{ -		helpbrowser->openMedia(url);	 -	} -	else -	{ -		llwarns << "Eep, help_browser floater not found" << llendl; -	} -} diff --git a/indra/newview/llviewerhelp.h b/indra/newview/llviewerhelp.h index 7612986227..a983012e2e 100644 --- a/indra/newview/llviewerhelp.h +++ b/indra/newview/llviewerhelp.h @@ -45,6 +45,8 @@ class LLViewerHelp : public LLHelp, public LLSingleton<LLViewerHelp>  	/// display the specified help topic in the help viewer  	/*virtual*/ void showTopic(const std::string &topic); +	std::string getURL(const std::string& topic); +  	// return topic derived from viewer UI focus, else default topic  	std::string getTopicFromFocus(); @@ -56,10 +58,6 @@ class LLViewerHelp : public LLHelp, public LLSingleton<LLViewerHelp>  	// return topic to use for the top-level help, invoked by F1  	/*virtual*/ std::string f1HelpTopic(); - - private: -	static void showHelp(); // make sure help UI is visible & raised -	static void setRawURL(std::string url); // send URL to help UI  };  #endif // header guard diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index fbfde711a9..bc0f38dd77 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -5370,6 +5370,34 @@ class LLAvatarAddFriend : public view_listener_t  	}  }; + +class LLAvatarToggleMyProfile : public view_listener_t +{ +	bool handleEvent(const LLSD& userdata) +	{ +		LLFloater* instance = LLAvatarActions::getProfileFloater(gAgent.getID()); +		if (LLFloater::isMinimized(instance)) +		{ +			instance->setMinimized(FALSE); +			instance->setFocus(TRUE); +		} +		else if (!LLFloater::isShown(instance)) +		{ +			LLAvatarActions::showProfile(gAgent.getID()); +		} +		else if (!instance->hasFocus() && !instance->getIsChrome()) +		{ +			instance->setFocus(TRUE); +		} +		else +		{ +			instance->closeFloater(); +		} +		return true; +	} +}; + +  class LLAvatarAddContact : public view_listener_t  {  	bool handleEvent(const LLSD& userdata) @@ -7229,7 +7257,7 @@ void handle_web_browser_test(const LLSD& param)  void handle_web_content_test(const LLSD& param)  {  	std::string url = param.asString(); -	LLWeb::loadWebURLInternal(url); +	LLWeb::loadURLInternal(url);  }  void handle_buy_currency_test(void*) @@ -8165,6 +8193,8 @@ void initialize_menus()  	view_listener_t::addMenu(new LLAvatarCall(), "Avatar.Call");  	enable.add("Avatar.EnableCall", boost::bind(&LLAvatarActions::canCall));  	view_listener_t::addMenu(new LLAvatarReportAbuse(), "Avatar.ReportAbuse"); +	view_listener_t::addMenu(new LLAvatarToggleMyProfile(), "Avatar.ToggleMyProfile"); +	enable.add("Avatar.IsMyProfileOpen", boost::bind(&LLAvatarActions::profileVisible, gAgent.getID()));  	view_listener_t::addMenu(new LLAvatarEnableAddFriend(), "Avatar.EnableAddFriend");  	enable.add("Avatar.EnableFreezeEject", boost::bind(&enable_freeze_eject, _2)); diff --git a/indra/newview/llweb.cpp b/indra/newview/llweb.cpp index 6f7115ff6d..7bc5453688 100644 --- a/indra/newview/llweb.cpp +++ b/indra/newview/llweb.cpp @@ -125,7 +125,9 @@ void LLWeb::loadURLInternal(const std::string &url, const std::string& target, c  // 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(uuid)); +	LLFloaterWebContent::Params p; +	p.url(url).target(target).id(uuid); +	LLFloaterReg::showInstance("web_content", p);  }  // static diff --git a/indra/newview/llweb.h b/indra/newview/llweb.h index dc5958e57f..376abc0ece 100644 --- a/indra/newview/llweb.h +++ b/indra/newview/llweb.h @@ -46,21 +46,19 @@ public:  	static void loadURL(const std::string& url, const std::string& target, const std::string& uuid = LLStringUtil::null);  	static void loadURL(const std::string& url) { loadURL(url, LLStringUtil::null); }  	/// Load the given url in the user's preferred web browser	 -	static void loadURL(const char* url, const std::string& target) { loadURL( ll_safe_string(url), target); } -	static void loadURL(const char* url) { loadURL( ll_safe_string(url), LLStringUtil::null ); } +	static void loadURL(const char* url, const std::string& target = LLStringUtil::null) { loadURL( ll_safe_string(url), target); }  	/// Load the given url in the Second Life internal web browser  	static void loadURLInternal(const std::string &url, const std::string& target, const std::string& uuid = LLStringUtil::null); -	static void loadURLInternal(const std::string &url) { loadURLInternal(url, LLStringUtil::null); } +	static void loadURLInternal(const std::string &url) { loadURLInternal(url, LLStringUtil::null, LLStringUtil::null);}  	/// Load the given url in the operating system's web browser, async if we want to return immediately  	/// before browser has spawned -	static void loadURLExternal(const std::string& url) { loadURLExternal(url,  LLStringUtil::null); }; +	static void loadURLExternal(const std::string& url) {loadURLExternal(url, LLStringUtil::null);}  	static void loadURLExternal(const std::string& url, const std::string& uuid);  	static void loadURLExternal(const std::string& url, bool async, const std::string& uuid = LLStringUtil::null);  	// Explicitly open a Web URL using the Web content floater vs. the more general media browser  	static void loadWebURL(const std::string& url, const std::string& target, const std::string& uuid); -	static void loadWebURLInternal(const std::string &url, const std::string& target, const std::string& uuid); -	static void loadWebURLInternal(const std::string &url) { loadWebURLInternal(url, LLStringUtil::null, LLStringUtil::null); } +	static void loadWebURLInternal(const std::string &url, const std::string& target = LLStringUtil::null, const std::string& uuid = LLStringUtil::null);  	/// Returns escaped url (eg, " " to "%20") - used by all loadURL methods  	static std::string escapeURL(const std::string& url); | 
