EXP-1348 FIX -- Speak button activated when dragging and dropping between toolbars and moving back to Tool box

* Dragging and dropping the speak button will aggressively turn off the
  microphone now, regardless of the initial state of the button.

Reviewed by Richard.
meow-7.2.2
Leslie Linden 2011-10-18 17:11:05 -07:00
parent 4002820bad
commit d6be2b4904
3 changed files with 51 additions and 1 deletions

View File

@ -302,7 +302,50 @@ bool LLToolBar::enableCommand(const LLCommandId& commandId, bool enabled)
command_id_map::iterator it = mButtonMap.find(commandId.uuid());
if (it != mButtonMap.end())
{
it->second->setEnabled(enabled);
command_button = it->second;
command_button->setEnabled(enabled);
}
}
return (command_button != NULL);
}
bool LLToolBar::stopCommandInProgress(const LLCommandId& commandId)
{
//
// Note from Leslie:
//
// This implementation was largely put in place to handle EXP-1348 which is related to
// dragging and dropping the "speak" button. The "speak" button can be in one of two
// modes, i.e., either a toggle action or a push-to-talk action. Because of this it
// responds to mouse down and mouse up in different ways, based on which behavior the
// button is currently set to obey. This was the simplest way of getting the button
// to turn off the microphone for both behaviors without risking duplicate state.
//
LLToolBarButton * command_button = NULL;
if (commandId != LLCommandId::null)
{
LLCommand* command = LLCommandManager::instance().getCommand(commandId);
llassert(command);
// If this command has an explicit function for execution stop
if (command->executeStopFunctionName().length() > 0)
{
command_id_map::iterator it = mButtonMap.find(commandId.uuid());
if (it != mButtonMap.end())
{
command_button = it->second;
llassert(command_button->mIsRunningSignal);
// Check to see if it is running
if ((*command_button->mIsRunningSignal)(command_button, command->isRunningParameters()))
{
// Trigger an additional button commit, which calls mouse down, mouse up and commit
command_button->onCommit();
}
}
}
}

View File

@ -185,6 +185,7 @@ public:
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);
void setStartDragCallback(tool_startdrag_callback_t cb) { mStartDragItemCallback = cb; }
void setHandleDragCallback(tool_handledrag_callback_t cb) { mHandleDragItemCallback = cb; }

View File

@ -355,6 +355,12 @@ BOOL LLToolBarView::handleDragTool( S32 x, S32 y, const LLUUID& uuid, LLAssetTyp
LLToolDragAndDrop::ESource src = LLToolDragAndDrop::SOURCE_VIEWER;
LLUUID srcID;
LLToolDragAndDrop::getInstance()->beginMultiDrag(types, cargo_ids, src, srcID);
// Second, stop the command if it is in progress and requires stopping!
LLCommandId command_id = LLCommandId(uuid);
gToolBarView->mToolbarLeft->stopCommandInProgress(command_id);
gToolBarView->mToolbarRight->stopCommandInProgress(command_id);
gToolBarView->mToolbarBottom->stopCommandInProgress(command_id);
// Second, check if the command is present in one of the 3 toolbars
// If it is, store the command, the toolbar and the rank in the toolbar and