EXP-1303 FIX Drag and dropping button over viewer area can select objects inworld
fixed close button not working on floaters against right edge of window fixed drag and drop only working once per toolbar button reimplemented drag and drop thresholdmeow-7.2.2
parent
adeaf71e33
commit
740b3547d6
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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 );
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue