diff options
| author | Eugene Mutavchi <emutavchi@productengine.com> | 2010-02-04 20:40:30 +0200 | 
|---|---|---|
| committer | Eugene Mutavchi <emutavchi@productengine.com> | 2010-02-04 20:40:30 +0200 | 
| commit | 3f0762f65ad8ba9d4f854378ca2d2dd826470f4e (patch) | |
| tree | 8b9db27705e059f485ea04ac6e10a466b43c02e0 | |
| parent | b2f0169a764119ad6b51ad0df964309ca7458278 (diff) | |
Fixed normal bug EXT-4307 (There are no text context menues for Search text field and for IM text field)
--HG--
branch : product-engine
| -rw-r--r-- | indra/llui/lllineeditor.cpp | 42 | ||||
| -rw-r--r-- | indra/llui/lllineeditor.h | 9 | ||||
| -rw-r--r-- | indra/newview/llbottomtray.cpp | 2 | ||||
| -rw-r--r-- | indra/newview/lllocationinputctrl.cpp | 1 | 
4 files changed, 52 insertions, 2 deletions
| diff --git a/indra/llui/lllineeditor.cpp b/indra/llui/lllineeditor.cpp index eb2b4f7705..00376cc4dd 100644 --- a/indra/llui/lllineeditor.cpp +++ b/indra/llui/lllineeditor.cpp @@ -55,6 +55,7 @@  #include "llui.h"  #include "lluictrlfactory.h"  #include "llclipboard.h" +#include "llmenugl.h"  //  // Imported globals @@ -164,7 +165,8 @@ LLLineEditor::LLLineEditor(const LLLineEditor::Params& p)  	mTentativeFgColor(p.text_tentative_color()),  	mHighlightColor(p.highlight_color()),  	mPreeditBgColor(p.preedit_bg_color()), -	mGLFont(p.font) +	mGLFont(p.font), +	mContextMenuHandle()  {  	llassert( mMaxLengthBytes > 0 ); @@ -191,6 +193,12 @@ LLLineEditor::LLLineEditor(const LLLineEditor::Params& p)  	setCursor(mText.length());  	setPrevalidate(p.prevalidate_callback()); + +	LLContextMenu* menu = LLUICtrlFactory::instance().createFromFile<LLContextMenu> +		("menu_text_editor.xml", +		 LLMenuGL::sMenuContainer, +		 LLMenuHolderGL::child_registry_t::instance()); +	setContextMenu(menu);  }  LLLineEditor::~LLLineEditor() @@ -663,6 +671,16 @@ BOOL LLLineEditor::handleMiddleMouseDown(S32 x, S32 y, MASK mask)  	return TRUE;  } +BOOL LLLineEditor::handleRightMouseDown(S32 x, S32 y, MASK mask) +{ +	setFocus(TRUE); +	if (!LLUICtrl::handleRightMouseDown(x, y, mask)) +	{ +		showContextMenu(x, y); +	} +	return TRUE; +} +  BOOL LLLineEditor::handleHover(S32 x, S32 y, MASK mask)  {  	BOOL handled = FALSE; @@ -2560,3 +2578,25 @@ LLWString LLLineEditor::getConvertedText() const  	}  	return text;  } + +void LLLineEditor::showContextMenu(S32 x, S32 y) +{ +	LLContextMenu* menu = static_cast<LLContextMenu*>(mContextMenuHandle.get()); + +	if (menu) +	{ +		gEditMenuHandler = this; + +		S32 screen_x, screen_y; +		localPointToScreen(x, y, &screen_x, &screen_y); +		menu->show(screen_x, screen_y); +	} +} + +void LLLineEditor::setContextMenu(LLContextMenu* new_context_menu) +{ +	if (new_context_menu) +		mContextMenuHandle = new_context_menu->getHandle(); +	else +		mContextMenuHandle.markDead(); +} diff --git a/indra/llui/lllineeditor.h b/indra/llui/lllineeditor.h index 49e9539b16..a06a317f76 100644 --- a/indra/llui/lllineeditor.h +++ b/indra/llui/lllineeditor.h @@ -56,6 +56,7 @@  class LLFontGL;  class LLLineEditorRollback;  class LLButton; +class LLContextMenu;  typedef boost::function<BOOL (const LLWString &wstr)> LLLinePrevalidateFunc; @@ -113,6 +114,7 @@ protected:  	LLLineEditor(const Params&);  	friend class LLUICtrlFactory;  	friend class LLFloaterEditUI; +	void showContextMenu(S32 x, S32 y);  public:  	virtual ~LLLineEditor(); @@ -122,6 +124,7 @@ public:  	/*virtual*/ BOOL	handleHover(S32 x, S32 y, MASK mask);  	/*virtual*/ BOOL	handleDoubleClick(S32 x,S32 y,MASK mask);  	/*virtual*/ BOOL	handleMiddleMouseDown(S32 x,S32 y,MASK mask); +	/*virtual*/ BOOL	handleRightMouseDown(S32 x, S32 y, MASK mask);  	/*virtual*/ BOOL	handleKeyHere(KEY key, MASK mask );  	/*virtual*/ BOOL	handleUnicodeCharHere(llwchar uni_char);  	/*virtual*/ void	onMouseCaptureLost(); @@ -249,7 +252,9 @@ public:  	void			updateHistory(); // stores current line in history  	void			setReplaceNewlinesWithSpaces(BOOL replace); -	 + +	void			setContextMenu(LLContextMenu* new_context_menu); +  private:  	// private helper methods @@ -348,6 +353,8 @@ protected:  	std::vector<S32> mPreeditPositions;  	LLPreeditor::standouts_t mPreeditStandouts; +	LLHandle<LLView> mContextMenuHandle; +  private:  	// Instances that by default point to the statics but can be overidden in XML.  	LLPointer<LLUIImage> mBgImage; diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp index 92c00efe99..93b708f299 100644 --- a/indra/newview/llbottomtray.cpp +++ b/indra/newview/llbottomtray.cpp @@ -441,6 +441,8 @@ BOOL LLBottomTray::postBuild()  	mObjectDefaultWidthMap[RS_BUTTON_CAMERA]   = mCamPanel->getRect().getWidth();  	mObjectDefaultWidthMap[RS_BUTTON_SPEAK]	   = mSpeakPanel->getRect().getWidth(); +	mNearbyChatBar->getChatBox()->setContextMenu(NULL); +  	return TRUE;  } diff --git a/indra/newview/lllocationinputctrl.cpp b/indra/newview/lllocationinputctrl.cpp index 4f40a0a532..1b7ad6ab7e 100644 --- a/indra/newview/lllocationinputctrl.cpp +++ b/indra/newview/lllocationinputctrl.cpp @@ -227,6 +227,7 @@ LLLocationInputCtrl::LLLocationInputCtrl(const LLLocationInputCtrl::Params& p)  	params.commit_on_focus_lost(false);  	params.follows.flags(FOLLOWS_ALL);  	mTextEntry = LLUICtrlFactory::create<LLURLLineEditor>(params); +	mTextEntry->setContextMenu(NULL);  	addChild(mTextEntry);  	// LLLineEditor is replaced with LLLocationLineEditor | 
