From 45adf1d6124e72be55a5764a72a58cde8b7c85fe Mon Sep 17 00:00:00 2001
From: Vadim Savchuk <vsavchuk@productengine.com>
Date: Thu, 29 Jul 2010 17:48:41 +0300
Subject: EXT-8501 FIXED Check menu items always looked as checked.

Reason:
Check menu items (instances of LLMenuItemCheckGL) had used LLUICtrl::getValue() to know whether they should draw the checkmark.
Recently this was broken when getValue() was overriden in LLMenuItemCallGL to return a string.

Fix:
Overriden getValue() in LLMenuItemCheckGL to return a boolean value, not a string.

Reviewed by Mike Antipov at https://codereview.productengine.com/secondlife/r/821/

--HG--
branch : product-engine
---
 indra/llui/llmenugl.cpp        | 9 +++++++++
 indra/llui/llmenugl.h          | 1 +
 indra/newview/llviewermenu.cpp | 2 ++
 3 files changed, 12 insertions(+)

(limited to 'indra')

diff --git a/indra/llui/llmenugl.cpp b/indra/llui/llmenugl.cpp
index 8610d79142..12007f7b52 100644
--- a/indra/llui/llmenugl.cpp
+++ b/indra/llui/llmenugl.cpp
@@ -928,6 +928,15 @@ void LLMenuItemCheckGL::setValue(const LLSD& value)
 	}
 }
 
+//virtual
+LLSD LLMenuItemCheckGL::getValue() const
+{
+	// Get our boolean value from the view model.
+	// If we don't override this method then the implementation from
+	// LLMenuItemGL will return a string. (EXT-8501)
+	return LLUICtrl::getValue();
+}
+
 // called to rebuild the draw label
 void LLMenuItemCheckGL::buildDrawLabel( void )
 {
diff --git a/indra/llui/llmenugl.h b/indra/llui/llmenugl.h
index a484405eaa..bf40163dac 100644
--- a/indra/llui/llmenugl.h
+++ b/indra/llui/llmenugl.h
@@ -322,6 +322,7 @@ public:
 	virtual void onCommit( void );
 	
 	virtual void setValue(const LLSD& value);
+	virtual LLSD getValue() const;
 
 	// called to rebuild the draw label
 	virtual void buildDrawLabel( void );
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index df8e127b1f..23e502c76f 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -2411,6 +2411,8 @@ static void init_default_item_label(const std::string& item_name)
 	boost::unordered_map<std::string, LLStringExplicit>::iterator it = sDefaultItemLabels.find(item_name);
 	if (it == sDefaultItemLabels.end())
 	{
+		// *NOTE: This will not work for items of type LLMenuItemCheckGL because they return boolean value
+		//       (doesn't seem to matter much ATM).
 		LLStringExplicit default_label = gMenuHolder->childGetValue(item_name).asString();
 		if (!default_label.empty())
 		{
-- 
cgit v1.2.3