From d6be2b49041c3ea51205bdd5a0ea7890afb9a5e5 Mon Sep 17 00:00:00 2001 From: Leslie Linden Date: Tue, 18 Oct 2011 17:11:05 -0700 Subject: 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. --- indra/llui/lltoolbar.cpp | 45 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) (limited to 'indra/llui/lltoolbar.cpp') diff --git a/indra/llui/lltoolbar.cpp b/indra/llui/lltoolbar.cpp index 629c7d9bc7..c559a2bf1d 100644 --- a/indra/llui/lltoolbar.cpp +++ b/indra/llui/lltoolbar.cpp @@ -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(); + } + } } } -- cgit v1.2.3 From f3a4a48d8ed20b4bbd65d7cdb9b191c9faf2544b Mon Sep 17 00:00:00 2001 From: Leslie Linden Date: Wed, 19 Oct 2011 17:33:10 -0700 Subject: * Fixed issue where dragging disabled buttons from the toybox to the toybox would remove them from the surrounding toolbars. * Removed dead drag & drop code * Fixed issue where saving didn't necessarily work because toolbar populated with command id's that didn't have associated names. --- indra/llui/lltoolbar.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'indra/llui/lltoolbar.cpp') diff --git a/indra/llui/lltoolbar.cpp b/indra/llui/lltoolbar.cpp index c559a2bf1d..bceda9bf54 100644 --- a/indra/llui/lltoolbar.cpp +++ b/indra/llui/lltoolbar.cpp @@ -217,7 +217,7 @@ bool LLToolBar::addCommand(const LLCommandId& commandId, int rank) if ((rank >= mButtonCommands.size()) || (rank == RANK_NONE)) { // In that case, back load - mButtonCommands.push_back(commandId); + mButtonCommands.push_back(command->id()); mButtons.push_back(button); } else @@ -232,7 +232,7 @@ bool LLToolBar::addCommand(const LLCommandId& commandId, int rank) rank--; } // ...then insert - mButtonCommands.insert(it_command,commandId); + mButtonCommands.insert(it_command, command->id()); mButtons.insert(it_button,button); } @@ -821,7 +821,7 @@ LLToolBarButton* LLToolBar::createButton(const LLCommandId& id) if (!commandp) return NULL; LLToolBarButton::Params button_p; - button_p.name = id.name(); + button_p.name = commandp->id().name(); // Make sure to retrieve the name from the command itself, not the passed in id button_p.label = LLTrans::getString(commandp->labelRef()); button_p.tool_tip = LLTrans::getString(commandp->tooltipRef()); button_p.image_overlay = LLUI::getUIImage(commandp->icon()); @@ -999,13 +999,13 @@ BOOL LLToolBarButton::handleHover(S32 x, S32 y, MASK mask) { if (!mIsDragged) { - mStartDragItemCallback(x,y,mId.uuid()); + mStartDragItemCallback(x, y, this); mIsDragged = true; handled = TRUE; } else { - handled = mHandleDragItemCallback(x,y,mId.uuid(),LLAssetType::AT_WIDGET); + handled = mHandleDragItemCallback(x, y, mId.uuid(), LLAssetType::AT_WIDGET); } } else -- cgit v1.2.3 From 4a90d9f3d6d4491aab8b17bc8dc7f3c8ac90de49 Mon Sep 17 00:00:00 2001 From: Leslie Linden Date: Thu, 20 Oct 2011 12:40:02 -0700 Subject: * Moved the name storage on the LLCommandId back to the LLCommand itself. Reviewed by Merov. --- indra/llui/lltoolbar.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indra/llui/lltoolbar.cpp') diff --git a/indra/llui/lltoolbar.cpp b/indra/llui/lltoolbar.cpp index bceda9bf54..515605200e 100644 --- a/indra/llui/lltoolbar.cpp +++ b/indra/llui/lltoolbar.cpp @@ -821,7 +821,7 @@ LLToolBarButton* LLToolBar::createButton(const LLCommandId& id) if (!commandp) return NULL; LLToolBarButton::Params button_p; - button_p.name = commandp->id().name(); // Make sure to retrieve the name from the command itself, not the passed in id + button_p.name = commandp->name(); button_p.label = LLTrans::getString(commandp->labelRef()); button_p.tool_tip = LLTrans::getString(commandp->tooltipRef()); button_p.image_overlay = LLUI::getUIImage(commandp->icon()); -- cgit v1.2.3