diff options
author | Richard Nelson <richard@lindenlab.com> | 2011-10-06 16:48:41 -0700 |
---|---|---|
committer | Richard Nelson <richard@lindenlab.com> | 2011-10-06 16:48:41 -0700 |
commit | 0f35bbbe9a084ef70b01a551f3262d8bf58ffb42 (patch) | |
tree | 1674cb2c821809981950a51b68b89fe778d25681 | |
parent | ddcd51beac061b79268c939a4e3ed48ec87fb907 (diff) | |
parent | 740b3547d6b4685bcd89bb2781ccb423ab935799 (diff) |
Automated merge with ssh://hg.lindenlab.com/richard/viewer-experience-fui
-rw-r--r-- | indra/llui/lltoolbar.cpp | 20 | ||||
-rw-r--r-- | indra/llui/lltoolbar.h | 1 | ||||
-rw-r--r-- | indra/newview/lltooldraganddrop.cpp | 26 |
3 files changed, 34 insertions, 13 deletions
diff --git a/indra/llui/lltoolbar.cpp b/indra/llui/lltoolbar.cpp index 63a1706fe4..c34fbcd4f5 100644 --- a/indra/llui/lltoolbar.cpp +++ b/indra/llui/lltoolbar.cpp @@ -177,6 +177,7 @@ void LLToolBar::initFromParams(const LLToolBar::Params& p) center_panel_p.rect = getLocalRect(); center_panel_p.auto_resize = false; center_panel_p.user_resize = false; + center_panel_p.mouse_opaque = false; LLLayoutPanel* center_panel = LLUICtrlFactory::create<LLLayoutPanel>(center_panel_p); mCenteringStack->addChild(center_panel); @@ -557,7 +558,13 @@ void LLToolBar::draw() { if (mButtons.empty()) { - return; + mButtonPanel->setVisible(FALSE); + mButtonPanel->setMouseOpaque(FALSE); + } + else + { + mButtonPanel->setVisible(TRUE); + mButtonPanel->setMouseOpaque(TRUE); } // Update enable/disable state and highlight state for editable toolbars @@ -741,7 +748,11 @@ BOOL LLToolBarButton::handleHover(S32 x, S32 y, MASK mask) // llinfos << "Merov debug: handleHover, x = " << x << ", y = " << y << ", mouse = " << hasMouseCapture() << llendl; BOOL handled = FALSE; - if (hasMouseCapture() && mStartDragItemCallback && mHandleDragItemCallback) + S32 mouse_distance_squared = (x - mMouseDownX) * (x - mMouseDownX) + (y - mMouseDownY) * (y - mMouseDownY); + S32 drag_threshold = LLUI::sSettingGroups["config"]->getS32("DragAndDropDistanceThreshold"); + if (mouse_distance_squared > drag_threshold * drag_threshold + && hasMouseCapture() && + mStartDragItemCallback && mHandleDragItemCallback) { if (!mIsDragged) { @@ -768,3 +779,8 @@ void LLToolBarButton::onMouseEnter(S32 x, S32 y, MASK mask) // Always highlight toolbar buttons, even if they are disabled mNeedsHighlight = TRUE; } + +void LLToolBarButton::onMouseCaptureLost() +{ + mIsDragged = false; +} diff --git a/indra/llui/lltoolbar.h b/indra/llui/lltoolbar.h index 3fbe5a7703..4fac081130 100644 --- a/indra/llui/lltoolbar.h +++ b/indra/llui/lltoolbar.h @@ -68,6 +68,7 @@ public: void setHandleDragCallback(tool_handledrag_callback_t cb) { mHandleDragItemCallback = cb; } void onMouseEnter(S32 x, S32 y, MASK mask); + void onMouseCaptureLost(); private: LLCommandId mId; diff --git a/indra/newview/lltooldraganddrop.cpp b/indra/newview/lltooldraganddrop.cpp index a8014b8cde..6910b8eced 100644 --- a/indra/newview/lltooldraganddrop.cpp +++ b/indra/newview/lltooldraganddrop.cpp @@ -803,7 +803,7 @@ void LLToolDragAndDrop::pick(const LLPickInfo& pick_info) LLViewerObject* hit_obj = pick_info.getObject(); LLSelectMgr::getInstance()->unhighlightAll(); - + bool highlight_object = false; // Treat attachments as part of the avatar they are attached to. if (hit_obj != NULL) { @@ -845,16 +845,7 @@ void LLToolDragAndDrop::pick(const LLPickInfo& pick_info) { target = DT_OBJECT; hit_face = pick_info.mObjectFace; - // if any item being dragged will be applied to the object under our cursor - // highlight that object - for (S32 i = 0; i < (S32)mCargoIDs.size(); i++) - { - if (mCargoTypes[i] != DAD_OBJECT || (pick_info.mKeyMask & MASK_CONTROL)) - { - LLSelectMgr::getInstance()->highlightObjectAndFamily(hit_obj); - break; - } - } + highlight_object = true; } } else if (pick_info.mPickType == LLPickInfo::PICK_LAND) @@ -900,6 +891,19 @@ void LLToolDragAndDrop::pick(const LLPickInfo& pick_info) } } + if (highlight_object && mLastAccept > ACCEPT_NO_LOCKED) + { + // if any item being dragged will be applied to the object under our cursor + // highlight that object + for (S32 i = 0; i < (S32)mCargoIDs.size(); i++) + { + if (mCargoTypes[i] != DAD_OBJECT || (pick_info.mKeyMask & MASK_CONTROL)) + { + LLSelectMgr::getInstance()->highlightObjectAndFamily(hit_obj); + break; + } + } + } ECursorType cursor = acceptanceToCursor( mLastAccept ); gViewerWindow->getWindow()->setCursor( cursor ); |