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/newview/lltoolbarview.cpp | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'indra/newview/lltoolbarview.cpp') diff --git a/indra/newview/lltoolbarview.cpp b/indra/newview/lltoolbarview.cpp index 21e682f072..c7c8268eb9 100644 --- a/indra/newview/lltoolbarview.cpp +++ b/indra/newview/lltoolbarview.cpp @@ -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 -- 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/newview/lltoolbarview.cpp | 115 +++++++++++++--------------------------- 1 file changed, 38 insertions(+), 77 deletions(-) (limited to 'indra/newview/lltoolbarview.cpp') diff --git a/indra/newview/lltoolbarview.cpp b/indra/newview/lltoolbarview.cpp index c7c8268eb9..75bec15082 100644 --- a/indra/newview/lltoolbarview.cpp +++ b/indra/newview/lltoolbarview.cpp @@ -63,7 +63,9 @@ LLToolBarView::LLToolBarView(const LLToolBarView::Params& p) : LLUICtrl(p), mToolbarLeft(NULL), mToolbarRight(NULL), - mToolbarBottom(NULL) + mToolbarBottom(NULL), + mDragStarted(false), + mDragToolbarButton(NULL) { } @@ -278,13 +280,19 @@ void LLToolBarView::saveToolbars() const // Enumerate the commands in command_list and add them as Params to the toolbar void LLToolBarView::addToToolset(command_id_list_t& command_list, Toolbar& toolbar) const { + LLCommandManager& mgr = LLCommandManager::instance(); + for (command_id_list_t::const_iterator it = command_list.begin(); it != command_list.end(); ++it) { - LLCommandId::Params command; - command.name = it->name(); - toolbar.commands.add(command); + LLCommand* command = mgr.getCommand(*it); + if (command) + { + LLCommandId::Params commandParams; + commandParams.name = command->id().name(); + toolbar.commands.add(commandParams); + } } } @@ -328,13 +336,11 @@ void LLToolBarView::draw() // ---------------------------------------- -void LLToolBarView::startDragTool( S32 x, S32 y, const LLUUID& uuid) +void LLToolBarView::startDragTool(S32 x, S32 y, LLToolBarButton* button) { + resetDragTool(button); + // Flag the tool dragging but don't start it yet - gToolBarView->mDragStarted = false; - gToolBarView->mDragCommand = LLCommandId::null; - gToolBarView->mDragRank = LLToolBar::RANK_NONE; - gToolBarView->mDragToolbar = NULL; LLToolDragAndDrop::getInstance()->setDragStart( x, y ); } @@ -361,30 +367,6 @@ BOOL LLToolBarView::handleDragTool( S32 x, S32 y, const LLUUID& uuid, LLAssetTyp 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 - // set a callback on end drag so that we reinsert the command if no drop happened - /* - gToolBarView->mDragCommand = LLCommandId(uuid); - if ((gToolBarView->mDragRank = gToolBarView->mToolbarLeft->removeCommand(gToolBarView->mDragCommand)) != LLToolBar::RANK_NONE) - { - gToolBarView->mDragToolbar = gToolBarView->mToolbarLeft; - } - else if ((gToolBarView->mDragRank = gToolBarView->mToolbarRight->removeCommand(gToolBarView->mDragCommand)) != LLToolBar::RANK_NONE) - { - gToolBarView->mDragToolbar = gToolBarView->mToolbarRight; - } - else if ((gToolBarView->mDragRank = gToolBarView->mToolbarBottom->removeCommand(gToolBarView->mDragCommand)) != LLToolBar::RANK_NONE) - { - gToolBarView->mDragToolbar = gToolBarView->mToolbarBottom; - } - if (gToolBarView->mDragRank != LLToolBar::RANK_NONE) - { - llinfos << "Merov debug: rank of dragged tool = " << gToolBarView->mDragRank << llendl; - LLToolDragAndDrop::getInstance()->setEndDragCallback(boost::bind(&LLToolBarView::onEndDrag, gToolBarView)); - } - */ gToolBarView->mDragStarted = true; return TRUE; @@ -413,42 +395,32 @@ BOOL LLToolBarView::handleDropTool( void* cargo_data, S32 x, S32 y, LLToolBar* t LLCommand* command = mgr.getCommand(command_id); if (command) { - // Convert the (x,y) position in rank in toolbar - int new_rank = LLToolBar::RANK_NONE; - if (!toolbar->isReadOnly()) - { - new_rank = toolbar->getRankFromPosition(x,y); - } // Suppress the command from the toolbars (including the one it's dropped in, // this will handle move position). - int old_rank = LLToolBar::RANK_NONE; + bool command_present = gToolBarView->hasCommand(command_id); LLToolBar* old_toolbar = NULL; - int rank; - if ((rank = gToolBarView->mToolbarLeft->removeCommand(command_id)) != LLToolBar::RANK_NONE) - { - old_rank = rank; - old_toolbar = gToolBarView->mToolbarLeft; - } - if ((rank = gToolBarView->mToolbarRight->removeCommand(command_id)) != LLToolBar::RANK_NONE) - { - old_rank = rank; - old_toolbar = gToolBarView->mToolbarRight; - } - if ((rank = gToolBarView->mToolbarBottom->removeCommand(command_id)) != LLToolBar::RANK_NONE) + + if (command_present) { - old_rank = rank; - old_toolbar = gToolBarView->mToolbarBottom; + llassert(gToolBarView->mDragToolbarButton); + old_toolbar = gToolBarView->mDragToolbarButton->getParentByType(); + if (old_toolbar->isReadOnly() && toolbar->isReadOnly()) + { + // do nothing + } + else + { + gToolBarView->mToolbarBottom->removeCommand(command_id); + gToolBarView->mToolbarLeft->removeCommand(command_id); + gToolBarView->mToolbarRight->removeCommand(command_id); + } } - // Now insert it in the toolbar at the detected rank + + // Convert the (x,y) position in rank in toolbar if (!toolbar->isReadOnly()) { - if ((old_toolbar == toolbar) && (old_rank != LLToolBar::RANK_NONE) && (old_rank < new_rank)) - { - // If we just removed the command from the same toolbar, we need to consider that it might - // change the target rank. - new_rank -= 1; - } - toolbar->addCommand(command->id(),new_rank); + int new_rank = toolbar->getRankFromPosition(x,y); + toolbar->addCommand(command_id, new_rank); } } else @@ -456,27 +428,16 @@ BOOL LLToolBarView::handleDropTool( void* cargo_data, S32 x, S32 y, LLToolBar* t llwarns << "Command couldn't be found in command manager" << llendl; } } - stopDragTool(); + + resetDragTool(NULL); return handled; } -void LLToolBarView::stopDragTool() +void LLToolBarView::resetDragTool(LLToolBarButton* button) { // Clear the saved command, toolbar and rank gToolBarView->mDragStarted = false; - gToolBarView->mDragCommand = LLCommandId::null; - gToolBarView->mDragRank = LLToolBar::RANK_NONE; - gToolBarView->mDragToolbar = NULL; -} - -void LLToolBarView::onEndDrag() -{ - // If there's a saved command, reinsert it in the saved toolbar - if (gToolBarView->mDragRank != LLToolBar::RANK_NONE) - { - gToolBarView->mDragToolbar->addCommand(gToolBarView->mDragCommand,gToolBarView->mDragRank); - } - stopDragTool(); + gToolBarView->mDragToolbarButton = button; } void LLToolBarView::setToolBarsVisible(bool visible) -- 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/newview/lltoolbarview.cpp | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) (limited to 'indra/newview/lltoolbarview.cpp') diff --git a/indra/newview/lltoolbarview.cpp b/indra/newview/lltoolbarview.cpp index 75bec15082..67ac081581 100644 --- a/indra/newview/lltoolbarview.cpp +++ b/indra/newview/lltoolbarview.cpp @@ -128,7 +128,7 @@ bool LLToolBarView::addCommand(const LLCommandId& command, LLToolBar* toolbar) } else { - llwarns << "Toolbars creation : the command " << command.name() << " cannot be found in the command manager" << llendl; + llwarns << "Toolbars creation : the command with id " << command.uuid().asString() << " cannot be found in the command manager" << llendl; return false; } return true; @@ -193,9 +193,12 @@ bool LLToolBarView::loadToolbars(bool force_default) LLToolBarEnums::ButtonType button_type = toolbar_set.left_toolbar.button_display_mode; mToolbarLeft->setButtonType(button_type); } - BOOST_FOREACH(LLCommandId::Params& command, toolbar_set.left_toolbar.commands) + BOOST_FOREACH(const LLCommandId::Params& command_name_param, toolbar_set.left_toolbar.commands) { - addCommand(LLCommandId(command),mToolbarLeft); + if (addCommand(LLCommandId(command_name_param), mToolbarLeft) == false) + { + llwarns << "Error adding command '" << command_name_param.name() << "' to left toolbar." << llendl; + } } } if (toolbar_set.right_toolbar.isProvided() && mToolbarRight) @@ -205,9 +208,12 @@ bool LLToolBarView::loadToolbars(bool force_default) LLToolBarEnums::ButtonType button_type = toolbar_set.right_toolbar.button_display_mode; mToolbarRight->setButtonType(button_type); } - BOOST_FOREACH(LLCommandId::Params& command, toolbar_set.right_toolbar.commands) + BOOST_FOREACH(const LLCommandId::Params& command_name_param, toolbar_set.right_toolbar.commands) { - addCommand(LLCommandId(command),mToolbarRight); + if (addCommand(LLCommandId(command_name_param), mToolbarRight) == false) + { + llwarns << "Error adding command '" << command_name_param.name() << "' to right toolbar." << llendl; + } } } if (toolbar_set.bottom_toolbar.isProvided() && mToolbarBottom) @@ -217,9 +223,12 @@ bool LLToolBarView::loadToolbars(bool force_default) LLToolBarEnums::ButtonType button_type = toolbar_set.bottom_toolbar.button_display_mode; mToolbarBottom->setButtonType(button_type); } - BOOST_FOREACH(LLCommandId::Params& command, toolbar_set.bottom_toolbar.commands) + BOOST_FOREACH(const LLCommandId::Params& command_name_param, toolbar_set.bottom_toolbar.commands) { - addCommand(LLCommandId(command),mToolbarBottom); + if (addCommand(LLCommandId(command_name_param), mToolbarBottom) == false) + { + llwarns << "Error adding command '" << command_name_param.name() << "' to bottom toolbar." << llendl; + } } } return true; @@ -289,9 +298,9 @@ void LLToolBarView::addToToolset(command_id_list_t& command_list, Toolbar& toolb LLCommand* command = mgr.getCommand(*it); if (command) { - LLCommandId::Params commandParams; - commandParams.name = command->id().name(); - toolbar.commands.add(commandParams); + LLCommandId::Params command_name_param; + command_name_param.name = command->name(); + toolbar.commands.add(command_name_param); } } } -- cgit v1.2.3 From b65ad565c9f3a702408e1bd12e7df2ccaf3dd03e Mon Sep 17 00:00:00 2001 From: Leslie Linden Date: Thu, 20 Oct 2011 15:48:25 -0700 Subject: * Changed destination guide to open by default in the top left on first login * Made the avatar pickers and destinations guide properly stack and position themselves. Reviewed by Richard. --- indra/newview/lltoolbarview.cpp | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'indra/newview/lltoolbarview.cpp') diff --git a/indra/newview/lltoolbarview.cpp b/indra/newview/lltoolbarview.cpp index 67ac081581..619d17efad 100644 --- a/indra/newview/lltoolbarview.cpp +++ b/indra/newview/lltoolbarview.cpp @@ -29,6 +29,7 @@ #include "lltoolbarview.h" +#include "llappviewer.h" #include "lldir.h" #include "llxmlnode.h" #include "lltoolbar.h" @@ -36,12 +37,18 @@ #include "lltooldraganddrop.h" #include "llclipboard.h" +#include "llagent.h" // HACK for destinations guide on startup +#include "llfloaterreg.h" // HACK for destinations guide on startup +#include "llviewercontrol.h" // HACK for destinations guide on startup + #include LLToolBarView* gToolBarView = NULL; static LLDefaultChildRegistry::Register r("toolbar_view"); +void handleLoginToolbarSetup(); + bool isToolDragged() { return (LLToolDragAndDrop::getInstance()->getSource() == LLToolDragAndDrop::SOURCE_VIEWER); @@ -97,6 +104,8 @@ BOOL LLToolBarView::postBuild() mToolbarBottom->setStartDragCallback(boost::bind(LLToolBarView::startDragTool,_1,_2,_3)); mToolbarBottom->setHandleDragCallback(boost::bind(LLToolBarView::handleDragTool,_1,_2,_3,_4)); mToolbarBottom->setHandleDropCallback(boost::bind(LLToolBarView::handleDropTool,_1,_2,_3,_4)); + + LLAppViewer::instance()->setOnLoginCompletedCallback(boost::bind(&handleLoginToolbarSetup)); return TRUE; } @@ -466,3 +475,18 @@ bool LLToolBarView::isModified() const return modified; } + + +// +// HACK to bring up destinations guide at startup +// + +void handleLoginToolbarSetup() +{ + // Open the destinations guide by default on first login, per Rhett + if (gSavedSettings.getBOOL("FirstLoginThisInstall") || gAgent.isFirstLogin()) + { + LLFloaterReg::showInstance("destinations"); + } +} + -- cgit v1.2.3