Commits

Merov Linden  committed 9883ebf Merge

Pull from richard/viewer-experience

  • Participants
  • Parent commits 051dada, ad54559

Comments (0)

Files changed (20)

File autobuild.xml

             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>1b92a69f5eba7cd8b017180659076db5</string>
+              <string>7108c2443dbcf4c032305814ce65ebb7</string>
               <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/roxie_3p-llqtwebkit/rev/242182/arch/Darwin/installer/llqtwebkit-4.7.1-darwin-20111003.tar.bz2</string>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llqtwebkit/rev/244065/arch/Darwin/installer/llqtwebkit-4.7.1-darwin-20111028.tar.bz2</string>
             </map>
             <key>name</key>
             <string>darwin</string>
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>1e7f24b69b0fc751c7e86efe7c621882</string>
+              <string>24048a31d7b852774dc3117acbd4a86a</string>
               <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/roxie_3p-llqtwebkit/rev/242182/arch/CYGWIN/installer/llqtwebkit-4.7.1-windows-20111003.tar.bz2</string>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llqtwebkit/rev/244065/arch/CYGWIN/installer/llqtwebkit-4.7.1-windows-20111028.tar.bz2</string>
             </map>
             <key>name</key>
             <string>windows</string>

File indra/llplugin/llpluginclassmedia.cpp

 	sendMessage(message);
 }
 
+void LLPluginClassMedia::set_page_zoom_factor( double factor )
+{
+	LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "set_page_zoom_factor");
+
+	message.setValueReal("factor", factor);
+	sendMessage(message);
+}
+
 void LLPluginClassMedia::clear_cache()
 {
 	LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "clear_cache");

File indra/llplugin/llpluginclassmedia.h

 	bool pluginSupportsMediaBrowser(void);
 	
 	void focus(bool focused);
+	void set_page_zoom_factor( double factor );
 	void clear_cache();
 	void clear_cookies();
 	void set_cookies(const std::string &cookies);

File indra/llui/llmenugl.cpp

 	mSpilloverMenu(NULL),
 	mJumpKey(p.jump_key),
 	mCreateJumpKeys(p.create_jump_keys),
-	mNeedsArrange(FALSE), 
+	mNeedsArrange(FALSE),
+	mResetScrollPositionOnShow(true),
 	mShortcutPad(p.shortcut_pad)
 {
 	typedef boost::tokenizer<boost::char_separator<char> > tokenizer;
 	S32 mouse_x, mouse_y;
 
 	// Resetting scrolling position
-	if (menu->isScrollable())
+	if (menu->isScrollable() && menu->isScrollPositionOnShowReset())
 	{
 		menu->mFirstVisibleItem = NULL;
 	}

File indra/llui/llmenugl.h

 
 	static class LLMenuHolderGL* sMenuContainer;
 	
+	void resetScrollPositionOnShow(bool reset_scroll_pos) { mResetScrollPositionOnShow = reset_scroll_pos; }
+	bool isScrollPositionOnShowReset() { return mResetScrollPositionOnShow; }
+
 protected:
 	void createSpilloverBranch();
 	void cleanupSpilloverBranch();
 	KEY				mJumpKey;
 	BOOL			mCreateJumpKeys;
 	S32				mShortcutPad;
+	bool			mResetScrollPositionOnShow;
 }; // end class LLMenuGL
 
 

File indra/llui/lltoolbar.h

 	void reshape(S32 width, S32 height, BOOL called_from_parent = true);
 	void setEnabled(BOOL enabled);
 	void setCommandId(const LLCommandId& id) { mId = id; }
+	LLCommandId getCommandId() { return mId; }
 
 	void setStartDragCallback(tool_startdrag_callback_t cb)   { mStartDragItemCallback  = cb; }
 	void setHandleDragCallback(tool_handledrag_callback_t cb) { mHandleDragItemCallback = cb; }
 												pad_bottom,
 												pad_between,
 												min_girth;
-		// get rid of this
+
+		// default command set
 		Multiple<LLCommandId::Params>			commands;
 
 		Optional<LLPanel::Params>				button_panel;
 	// virtuals
 	void draw();
 	void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE);
-	int  getRankFromPosition(S32 x, S32 y);	
-	int  getRankFromPosition(const LLCommandId& id);	
 	BOOL handleRightMouseDown(S32 x, S32 y, MASK mask);
 	virtual BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
 								   EDragAndDropType cargo_type,
 								   std::string& tooltip_msg);
 	
 	static const int RANK_NONE = -1;
-	
 	bool addCommand(const LLCommandId& commandId, int rank = RANK_NONE);
 	int  removeCommand(const LLCommandId& commandId);		// Returns the rank the removed command was at, RANK_NONE if not found
-	bool hasCommand(const LLCommandId& commandId) const;
-	bool enableCommand(const LLCommandId& commandId, bool enabled);
-	bool stopCommandInProgress(const LLCommandId& commandId);
-	bool flashCommand(const LLCommandId& commandId, bool flash);
+	bool hasCommand(const LLCommandId& commandId) const;	// is this command bound to a button in this toolbar
+	bool enableCommand(const LLCommandId& commandId, bool enabled);	// enable/disable button bound to the specified command, if it exists in this toolbar
+	bool stopCommandInProgress(const LLCommandId& commandId);	// stop command if it is currently active
+	bool flashCommand(const LLCommandId& commandId, bool flash); // flash button associated with given command, if in this toolbar
 
-	void setStartDragCallback(tool_startdrag_callback_t cb)   { mStartDragItemCallback  = cb; }
+	void setStartDragCallback(tool_startdrag_callback_t cb)   { mStartDragItemCallback  = cb; } // connects drag and drop behavior to external logic
 	void setHandleDragCallback(tool_handledrag_callback_t cb) { mHandleDragItemCallback = cb; }
 	void setHandleDropCallback(tool_handledrop_callback_t cb) { mHandleDropCallback     = cb; }
 	bool isReadOnly() const { return mReadOnly; }
 	boost::signals2::connection setButtonLeaveCallback(const button_signal_t::slot_type& cb);
 	boost::signals2::connection setButtonRemoveCallback(const button_signal_t::slot_type& cb);
 
-	void setTooltipButtonSuffix(const std::string& suffix) { mButtonTooltipSuffix = suffix; }
+	// append the specified string to end of tooltip
+	void setTooltipButtonSuffix(const std::string& suffix) { mButtonTooltipSuffix = suffix; } 
 
 	LLToolBarEnums::SideType getSideType() const { return mSideType; }
 	bool hasButtons() const { return !mButtons.empty(); }
 	bool isModified() const { return mModified; }
 
-protected:
+	int  getRankFromPosition(S32 x, S32 y);	
+	int  getRankFromPosition(const LLCommandId& id);	
+
+	// Methods used in loading and saving toolbar settings
+	void setButtonType(LLToolBarEnums::ButtonType button_type);
+	LLToolBarEnums::ButtonType getButtonType() { return mButtonType; }
+	command_id_list_t& getCommandsList() { return mButtonCommands; }
+	void clearCommandsList();
+
+private:
 	friend class LLUICtrlFactory;
 	LLToolBar(const Params&);
 	~LLToolBar();
 
 	void initFromParams(const Params&);
+	void createContextMenu();
+	void updateLayoutAsNeeded();
+	void createButtons();
+	void resizeButtonsInRow(std::vector<LLToolBarButton*>& buttons_in_row, S32 max_row_girth);
+	BOOL isSettingChecked(const LLSD& userdata);
+	void onSettingEnable(const LLSD& userdata);
+
+private:
+	// static layout state
+	const bool						mReadOnly;
+	const LLToolBarEnums::SideType	mSideType;
+	const bool						mWrap;
+	const S32						mPadLeft,
+									mPadRight,
+									mPadTop,
+									mPadBottom,
+									mPadBetween,
+									mMinGirth;
+
+	// drag and drop state
 	tool_startdrag_callback_t		mStartDragItemCallback;
 	tool_handledrag_callback_t		mHandleDragItemCallback;
 	tool_handledrop_callback_t		mHandleDropCallback;
 									mDragy,
 									mDragGirth;
 
-public:
-	// Methods used in loading and saving toolbar settings
-	void setButtonType(LLToolBarEnums::ButtonType button_type);
-	LLToolBarEnums::ButtonType getButtonType() { return mButtonType; }
-	command_id_list_t& getCommandsList() { return mButtonCommands; }
-	void clearCommandsList();
-					   
-private:
-	void createContextMenu();
-	void updateLayoutAsNeeded();
-	void createButtons();
-	void resizeButtonsInRow(std::vector<LLToolBarButton*>& buttons_in_row, S32 max_row_girth);
-	BOOL isSettingChecked(const LLSD& userdata);
-	void onSettingEnable(const LLSD& userdata);
-
-	const bool						mReadOnly;
-
 	typedef std::list<LLToolBarButton*> toolbar_button_list;
+	typedef std::map<LLUUID, LLToolBarButton*> command_id_map;
 	toolbar_button_list				mButtons;
 	command_id_list_t				mButtonCommands;
-	typedef std::map<LLUUID, LLToolBarButton*> command_id_map;
 	command_id_map					mButtonMap;
 
 	LLToolBarEnums::ButtonType		mButtonType;
+	LLToolBarButton::Params			mButtonParams[LLToolBarEnums::BTNTYPE_COUNT];
+
+	// related widgets
 	LLLayoutStack*					mCenteringStack;
-	LLLayoutStack*					mWrapStack;
 	LLPanel*						mButtonPanel;
-	LLToolBarEnums::SideType		mSideType;
-	
-	bool							mWrap;
+	LLHandle<class LLContextMenu>	mPopupMenuHandle;
+
 	bool							mNeedsLayout;
 	bool							mModified;
-	S32								mPadLeft,
-									mPadRight,
-									mPadTop,
-									mPadBottom,
-									mPadBetween,
-									mMinGirth;
-
-	LLToolBarButton::Params			mButtonParams[LLToolBarEnums::BTNTYPE_COUNT];
-
-	LLHandle<class LLContextMenu>	mPopupMenuHandle;
 
 	button_signal_t*				mButtonAddSignal;
 	button_signal_t*				mButtonEnterSignal;

File indra/media_plugins/webkit/media_plugin_webkit.cpp

  * $/LicenseInfo$
  * @endcond
  */
-
 #include "llqtwebkit.h"
-
 #include "linden_common.h"
 #include "indra_constants.h" // for indra keyboard codes
 
+#include "lltimer.h"
 #include "llgl.h"
 
 #include "llplugininstance.h"
 	F32 mBackgroundG;
 	F32 mBackgroundB;
 	std::string mTarget;
-	
+	LLTimer mElapsedTime;
+		
 	VolumeCatcher mVolumeCatcher;
 
 	void postDebugMessage( const std::string& msg )
 	{
 		if ( mEnableMediaPluginDebugging )
 		{
+			std::stringstream str;
+			str << "@Media Msg> " << "[" << (double)mElapsedTime.getElapsedTimeF32()  << "] -- " << msg;
+
 			LLPluginMessage debug_message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "debug_message");
-			debug_message.setValue("message_text", "Media> " + msg);
+			debug_message.setValue("message_text", str.str());
 			debug_message.setValue("message_level", "info");
 			sendMessage(debug_message);
 		}
 		LLQtWebKit::getInstance()->enablePlugins( mPluginsEnabled );
 
 		// turn on/off Javascript based on what host app tells us
+#if LLQTWEBKIT_API_VERSION >= 11
+		LLQtWebKit::getInstance()->enableJavaScript( mJavascriptEnabled );
+#else
 		LLQtWebKit::getInstance()->enableJavascript( mJavascriptEnabled );
+#endif
 
 		std::stringstream str;
 		str << "Cookies enabled = " << mCookiesEnabled << ", plugins enabled = " << mPluginsEnabled << ", Javascript enabled = " << mJavascriptEnabled;
 		// append details to agent string
 		LLQtWebKit::getInstance()->setBrowserAgentId( mUserAgent );
 		postDebugMessage( "Updating user agent with " + mUserAgent );
-		
+
 #if !LL_QTWEBKIT_USES_PIXMAPS
 		// don't flip bitmap
 		LLQtWebKit::getInstance()->flipWindow( mBrowserWindowId, true );
 		url << "%22%3E%3C/body%3E%3C/html%3E";
 		
 		//lldebugs << "data url is: " << url.str() << llendl;
-					
+
+		// loading overlay debug screen follows media debugging flag from client for now.
+		LLQtWebKit::getInstance()->enableLoadingOverlay(mBrowserWindowId, mEnableMediaPluginDebugging);
+
+		str.clear();
+		str << "Loading overlay enabled = " << mEnableMediaPluginDebugging << " for mBrowserWindowId = " << mBrowserWindowId;
+		postDebugMessage( str.str() );
+
 		LLQtWebKit::getInstance()->navigateTo( mBrowserWindowId, url.str() );
 //		LLQtWebKit::getInstance()->navigateTo( mBrowserWindowId, "about:blank" );
 
 		// These could be passed through as well, but aren't really needed.
 //		message.setValue("uri", event.getEventUri());
 //		message.setValueBoolean("dead", (event.getIntValue() != 0))
+
+		// debug spam
+		postDebugMessage( "Sending cookie_set message from plugin: " + event.getStringValue() );
+
 		sendMessage(message);
 	}
 
 	mPluginsEnabled = true;		// default to on
 	mEnableMediaPluginDebugging = false;
 	mUserAgent = "LLPluginMedia Web Browser";
+
+	mElapsedTime.reset();
 }
 
 MediaPluginWebKit::~MediaPluginWebKit()
 			{
 				mEnableMediaPluginDebugging = message_in.getValueBoolean( "enable" );
 			}
-
 			else
 			if(message_name == "js_enable_object")
 			{
 					mFirstFocus = false;
 				}
 			}
+			else if(message_name == "set_page_zoom_factor")
+			{
+#if LLQTWEBKIT_API_VERSION >= 15
+				F32 factor = message_in.getValueReal("factor");
+				LLQtWebKit::getInstance()->setPageZoomFactor(factor);
+#else
+				llwarns << "Ignoring setPageZoomFactor message (llqtwebkit version is too old)." << llendl;
+#endif
+			}
 			else if(message_name == "clear_cache")
 			{
 				LLQtWebKit::getInstance()->clearCache();
 			else if(message_name == "set_cookies")
 			{
 				LLQtWebKit::getInstance()->setCookies(message_in.getValue("cookies"));
+
+				// debug spam
+				postDebugMessage( "Plugin setting cookie: " + message_in.getValue("cookies") );
 			}
 			else if(message_name == "proxy_setup")
 			{

File indra/newview/app_settings/settings_per_account.xml

     <key>DisplayDestinationsOnInitialRun</key>
         <map>
         <key>Comment</key>
-          <string>Display the destinations guide when a user first launches FUI.</string>
+          <string>Display the destinations guide when a user first launches Second Life.</string>
         <key>Persist</key>
           <integer>1</integer>
         <key>Type</key>

File indra/newview/llfavoritesbar.cpp

 	LLToggleableMenu* menu = (LLToggleableMenu*) mOverflowMenuHandle.get();
 	if (mRestoreOverflowMenu && menu && !menu->getVisible())
 	{
+		menu->resetScrollPositionOnShow(false);
 		showDropDownMenu();
+		menu->resetScrollPositionOnShow(true);
 	}
 }
 

File indra/newview/llmediactrl.cpp

 LLMediaCtrl::Params::Params()
 :	start_url("start_url"),
 	border_visible("border_visible", true),
-	ignore_ui_scale("ignore_ui_scale", true),
 	decouple_texture_size("decouple_texture_size", false),
 	texture_width("texture_width", 1024),
 	texture_height("texture_height", 1024),
 	mFrequentUpdates( true ),
 	mForceUpdate( false ),
 	mHomePageUrl( "" ),
-	mIgnoreUIScale( true ),
 	mAlwaysRefresh( false ),
 	mMediaSource( 0 ),
 	mTakeFocusOnClick( p.focus_on_click ),
 		setCaretColor( (unsigned int)color.mV[0], (unsigned int)color.mV[1], (unsigned int)color.mV[2] );
 	}
 
-	setIgnoreUIScale(p.ignore_ui_scale);
-	
 	setHomePageUrl(p.start_url, p.initial_mime_type);
 	
 	setBorderVisible(p.border_visible);
 
 	if(!getDecoupleTextureSize())
 	{
-		S32 screen_width = mIgnoreUIScale ? 
-			llround((F32)getRect().getWidth() * LLUI::sGLScaleFactor.mV[VX]) : getRect().getWidth();
-		S32 screen_height = mIgnoreUIScale ? 
-			llround((F32)getRect().getHeight() * LLUI::sGLScaleFactor.mV[VY]) : getRect().getHeight();
+		S32 screen_width = llround((F32)getRect().getWidth() * LLUI::sGLScaleFactor.mV[VX]);
+		S32 screen_height = llround((F32)getRect().getHeight() * LLUI::sGLScaleFactor.mV[VY]);
 			
 		setTextureSize(screen_width, screen_height);
 	}
 {
 	if(!getDecoupleTextureSize())
 	{
-		S32 screen_width = mIgnoreUIScale ? llround((F32)width * LLUI::sGLScaleFactor.mV[VX]) : width;
-		S32 screen_height = mIgnoreUIScale ? llround((F32)height * LLUI::sGLScaleFactor.mV[VY]) : height;
+		S32 screen_width = llround((F32)width * LLUI::sGLScaleFactor.mV[VX]);
+		S32 screen_height = llround((F32)height * LLUI::sGLScaleFactor.mV[VY]);
 
 		// when floater is minimized, these sizes are negative
 		if ( screen_height > 0 && screen_width > 0 )
 			mMediaSource->addObserver( this );
 			mMediaSource->setBackgroundColor( getBackgroundColor() );
 			mMediaSource->setTrustedBrowser(mTrusted);
+			mMediaSource->setPageZoomFactor( LLUI::sGLScaleFactor.mV[ VX ] );
+
 			if(mClearCache)
 			{
 				mMediaSource->clearCache();
 	{
 		gGL.pushUIMatrix();
 		{
-			if (mIgnoreUIScale)
-			{
-				gGL.loadUIIdentity();
-				// font system stores true screen origin, need to scale this by UI scale factor
-				// to get render origin for this view (with unit scale)
-				gGL.translateUI(floorf(LLFontGL::sCurOrigin.mX * LLUI::sGLScaleFactor.mV[VX]), 
-							floorf(LLFontGL::sCurOrigin.mY * LLUI::sGLScaleFactor.mV[VY]), 
-							LLFontGL::sCurOrigin.mZ);
-			}
+			mMediaSource->setPageZoomFactor( LLUI::sGLScaleFactor.mV[ VX ] );
 
 			// scale texture to fit the space using texture coords
 			gGL.getTexUnit(0)->bind(media_texture);
 			x_offset = (r.getWidth() - width) / 2;
 			y_offset = (r.getHeight() - height) / 2;		
 
-			if(mIgnoreUIScale)
-			{
-				x_offset = llround((F32)x_offset * LLUI::sGLScaleFactor.mV[VX]);
-				y_offset = llround((F32)y_offset * LLUI::sGLScaleFactor.mV[VY]);
-				width = llround((F32)width * LLUI::sGLScaleFactor.mV[VX]);
-				height = llround((F32)height * LLUI::sGLScaleFactor.mV[VY]);
-			}
-
 			// draw the browser
 			gGL.begin( LLRender::QUADS );
 			if (! media_plugin->getTextureCoordsOpenGL())
 		coords_opengl = mMediaSource->getMediaPlugin()->getTextureCoordsOpenGL();
 	}
 	
-	x = mIgnoreUIScale ? llround((F32)x * LLUI::sGLScaleFactor.mV[VX]) : x;
+	x = llround((F32)x * LLUI::sGLScaleFactor.mV[VX]);
 	if ( ! coords_opengl )
 	{
-		y = mIgnoreUIScale ? llround((F32)(y) * LLUI::sGLScaleFactor.mV[VY]) : y;
+		y = llround((F32)(y) * LLUI::sGLScaleFactor.mV[VY]);
 	}
 	else
 	{
-		y = mIgnoreUIScale ? llround((F32)(getRect().getHeight() - y) * LLUI::sGLScaleFactor.mV[VY]) : getRect().getHeight() - y;
+		y = llround((F32)(getRect().getHeight() - y) * LLUI::sGLScaleFactor.mV[VY]);
 	};
 }
 

File indra/newview/llmediactrl.h

 		Optional<std::string>	start_url;
 		
 		Optional<bool>			border_visible,
-								ignore_ui_scale,
 								hide_loading,
 								decouple_texture_size,
 								trusted_content,
 		bool getFrequentUpdates() { return mFrequentUpdates; };
 		void setFrequentUpdates( bool frequentUpdatesIn ) {  mFrequentUpdates = frequentUpdatesIn; };
 
-		void setIgnoreUIScale(bool ignore) { mIgnoreUIScale = ignore; }
-		bool getIgnoreUIScale() { return mIgnoreUIScale; }
-
 		void setAlwaysRefresh(bool refresh) { mAlwaysRefresh = refresh; }
 		bool getAlwaysRefresh() { return mAlwaysRefresh; }
 		
 		const S32 mTextureDepthBytes;
 		LLUUID mMediaTextureID;
 		LLViewBorder* mBorder;
-		bool mFrequentUpdates;
-		bool mForceUpdate;
-		bool mTrusted;
-		std::string mHomePageUrl;
-		std::string mHomePageMimeType;
-		std::string mCurrentNavUrl;
-		std::string mErrorPageURL;
-		std::string mTarget;
-		bool mIgnoreUIScale;
-		bool mAlwaysRefresh;
+		bool	mFrequentUpdates,
+				mForceUpdate,
+				mTrusted,
+				mAlwaysRefresh,
+				mTakeFocusOnClick,
+				mStretchToFill,
+				mMaintainAspectRatio,
+				mHideLoading,
+				mHidingInitialLoad,
+				mClearCache,
+				mHoverTextChanged,
+				mDecoupleTextureSize;
+
+		std::string mHomePageUrl,
+					mHomePageMimeType,
+					mCurrentNavUrl,
+					mErrorPageURL,
+					mTarget;
 		viewer_media_t mMediaSource;
-		bool mTakeFocusOnClick;
-		bool mStretchToFill;
-		bool mMaintainAspectRatio;
-		bool mHideLoading;
-		bool mHidingInitialLoad;
-		bool mDecoupleTextureSize;
-		S32 mTextureWidth;
-		S32 mTextureHeight;
-		bool mClearCache;
+		S32 mTextureWidth,
+			mTextureHeight;
+
 		class LLWindowShade* mWindowShade;
-		bool mHoverTextChanged;
 		LLContextMenu* mContextMenu;
 };
 

File indra/newview/llnearbychatbar.cpp

 	{
 		nearby_chat->removeScreenChat();
 	}
-	LLFloater::setMinimized(b);
+		LLFloater::setMinimized(b);
 }
 
 void LLNearbyChatBar::onChatBoxCommit()

File indra/newview/llnotificationtiphandler.cpp

 
 #include "llfloaterreg.h"
 #include "llnearbychat.h"
+#include "llnearbychatbar.h"
 #include "llnotificationhandler.h"
 #include "llnotifications.h"
 #include "lltoastnotifypanel.h"
 
 			// don't show toast if Nearby Chat is opened
 			LLNearbyChat* nearby_chat = LLNearbyChat::getInstance();
-			if (nearby_chat->getVisible())
+			LLNearbyChatBar* nearby_chat_bar = LLNearbyChatBar::getInstance();
+			if (nearby_chat_bar->getVisible() && nearby_chat->getVisible())
 			{
 				return false;
 			}

File indra/newview/llpanelpicks.cpp

 
 	void createPick()
 	{
-		LLSD params;
-		params["id"] = gAgent.getID();
-		params["open_tab_name"] = "panel_picks";
-		params["show_tab_panel"] = "create_pick";
-		LLFloaterSidePanelContainer::showPanel("my_profile", params);
+		// open the new pick panel on the Picks floater
+		LLFloater* picks_floater = LLFloaterReg::showInstance("picks");
+
+		LLPanelPicks* picks = picks_floater->findChild<LLPanelPicks>("panel_picks");
+		picks->createNewPick();
 	}
 
 	void editPick(LLPickData* pick_info)
 
 	void createClassified()
 	{
-		// open the new classified panel on the Me > Picks sidetray
-		LLSD params;
-		params["id"] = gAgent.getID();
-		params["open_tab_name"] = "panel_picks";
-		params["show_tab_panel"] = "create_classified";
-		LLFloaterSidePanelContainer::showPanel("my_profile", params);
+		// open the new classified panel on the Picks floater
+		LLFloater* picks_floater = LLFloaterReg::showInstance("picks");
+
+		LLPanelPicks* picks = picks_floater->findChild<LLPanelPicks>("panel_picks");
+		picks->createNewClassified();
 	}
 
 	void openClassified(LLAvatarClassifiedInfo* c_info)

File indra/newview/llpanelpicks.h

 	// parent panels failed to work (picks related code was in my profile panel)
 	void setProfilePanel(LLPanelProfile* profile_panel);
 
+	void createNewPick();
+	void createNewClassified();
+
 protected:
 	/*virtual*/void updateButtons();
 
 
 	bool onEnableMenuItem(const LLSD& user_data);
 
-	void createNewPick();
-	void createNewClassified();
-
 	void openPickInfo();
 	void openClassifiedInfo();
 	void openClassifiedInfo(const LLSD& params);

File indra/newview/llviewermedia.cpp

 	mNavigateSuspended(false),
 	mNavigateSuspendedDeferred(false),
 	mIsUpdated(false),
-	mTrustedBrowser(false)
+	mTrustedBrowser(false),
+	mZoomFactor(1.0)
 { 
 
 	// Set up the mute list observer if it hasn't been set up already.
 	}
 }
 
+
+//////////////////////////////////////////////////////////////////////////////////////////
+void LLViewerMediaImpl::setPageZoomFactor( double factor )
+{
+	if(mMediaSource && factor != mZoomFactor)
+	{
+		mZoomFactor = factor;
+		mMediaSource->set_page_zoom_factor( factor );
+	}
+}
+
 //////////////////////////////////////////////////////////////////////////////////////////
 void LLViewerMediaImpl::mouseDown(S32 x, S32 y, MASK mask, S32 button)
 {

File indra/newview/llviewermedia.h

 	std::string getMediaEntryURL() { return mMediaEntryURL; }
 	void setHomeURL(const std::string& home_url, const std::string& mime_type = LLStringUtil::null) { mHomeURL = home_url; mHomeMimeType = mime_type;};
 	void clearCache();
+	void setPageZoomFactor( double factor );
 	std::string getMimeType() { return mMimeType; }
 	void scaleMouse(S32 *mouse_x, S32 *mouse_y);
 	void scaleTextureCoords(const LLVector2& texture_coords, S32 *x, S32 *y);
 private:
 	// a single media url with some data and an impl.
 	LLPluginClassMedia* mMediaSource;
+	F64		mZoomFactor;
 	LLUUID mTextureId;
 	bool  mMovieImageHasMips;
 	std::string mMediaURL;			// The last media url set with NavigateTo

File indra/newview/skins/default/xui/en/floater_avatar.xml

  save_rect="true"
  save_visibility="true"
  title="AVATAR PICKER"
- width="635">
+ width="700">
     <web_browser
       top="25"
       height="200"
-      width="635"
+      width="700"
       follows="all"
       name="avatar_picker_contents"
       trusted_content="true"/>

File indra/newview/skins/default/xui/en/floater_buy_currency_html.xml

     right="-1" 
     top="1"
     bottom="-1" 
-    ignore_ui_scale="false"
     name="browser"/>
 </floater>

File indra/newview/skins/default/xui/en/panel_login.xml

 <!-- *NOTE: Custom resize logic for login_html in llpanellogin.cpp -->
 <web_browser
   tab_stop="false" 
-trusted_content="true" 
-bg_opaque_color="Black"
-border_visible="false"
-bottom="600"
-follows="all"
-left="0"
-name="login_html"
-start_url=""
-top="0"
-height="600"
-     width="980" />
+  trusted_content="true" 
+  bg_opaque_color="Black"
+  border_visible="false"
+  bottom="600"
+  follows="all"
+  left="0"
+  name="login_html"
+  start_url=""
+  top="0"
+  height="600"
+  width="980"/>
 <layout_stack
 follows="left|bottom|right"
 name="login_widgets"