diff options
| -rw-r--r-- | indra/newview/llinspectobject.cpp | 29 | ||||
| -rw-r--r-- | indra/newview/llviewermenu.cpp | 48 | ||||
| -rw-r--r-- | indra/newview/llviewermenu.h | 1 | 
3 files changed, 60 insertions, 18 deletions
diff --git a/indra/newview/llinspectobject.cpp b/indra/newview/llinspectobject.cpp index f78a5cc64e..cb7031971b 100644 --- a/indra/newview/llinspectobject.cpp +++ b/indra/newview/llinspectobject.cpp @@ -28,16 +28,17 @@  #include "llinspectobject.h"  // Viewer +#include "llagent.h"            // To standup  #include "llfloatersidepanelcontainer.h"  #include "llinspect.h"  #include "llmediaentry.h" -#include "llnotificationsutil.h"	// *TODO: Eliminate, add LLNotificationsUtil wrapper  #include "llselectmgr.h"  #include "llslurl.h"  #include "llviewermenu.h"		// handle_object_touch(), handle_buy()  #include "llviewermedia.h"  #include "llviewermediafocus.h"  #include "llviewerobjectlist.h"	// to select the requested object +#include "llvoavatarself.h"  // Linden libraries  #include "llbutton.h"			// setLabel(), not virtual! @@ -635,7 +636,31 @@ void LLInspectObject::onClickTouch()  void LLInspectObject::onClickSit()  { -	handle_object_sit_or_stand(); +    bool is_sitting = false; +    if (mObjectSelection) +    { +        LLSelectNode* node = mObjectSelection->getFirstRootNode(); +        if (node && node->mValid) +        { +            LLViewerObject* root_object = node->getObject(); +            if (root_object +                && isAgentAvatarValid() +                && gAgentAvatarp->isSitting() +                && gAgentAvatarp->getRoot() == root_object) +            { +                is_sitting = true; +            } +        } +    } + +    if (is_sitting) +    { +        gAgent.standUp(); +    } +    else +    { +        handle_object_sit(mObjectID); +    }  	closeFloater();  } diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 8b1d7b5e15..840089a1c2 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -4125,23 +4125,9 @@ bool is_object_sittable()  	}  } -  // only works on pie menu -void handle_object_sit_or_stand() +void handle_object_sit(LLViewerObject *object, const LLVector3 &offset)  { -	LLPickInfo pick = LLToolPie::getInstance()->getPick(); -	LLViewerObject *object = pick.getObject();; -	if (!object || pick.mPickType == LLPickInfo::PICK_FLORA) -	{ -		return; -	} - -	if (sitting_on_selection()) -	{ -		gAgent.standUp(); -		return; -	} -  	// get object selection offset   	if (object && object->getPCode() == LL_PCODE_VOLUME) @@ -4153,12 +4139,42 @@ void handle_object_sit_or_stand()  		gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());  		gMessageSystem->nextBlockFast(_PREHASH_TargetObject);  		gMessageSystem->addUUIDFast(_PREHASH_TargetID, object->mID); -		gMessageSystem->addVector3Fast(_PREHASH_Offset, pick.mObjectOffset); +		gMessageSystem->addVector3Fast(_PREHASH_Offset, offset);  		object->getRegion()->sendReliableMessage();  	}  } +void handle_object_sit_or_stand() +{ +    LLPickInfo pick = LLToolPie::getInstance()->getPick(); +    LLViewerObject *object = pick.getObject(); +    if (!object || pick.mPickType == LLPickInfo::PICK_FLORA) +    { +        return; +    } + +    if (sitting_on_selection()) +    { +        gAgent.standUp(); +        return; +    } + +    handle_object_sit(object, pick.mObjectOffset); +} + +void handle_object_sit(const LLUUID& object_id) +{ +    LLViewerObject* obj = gObjectList.findObject(object_id); +    if (!obj) +    { +        return; +    } + +    LLVector3 offset(0, 0, 0); +    handle_object_sit(obj, offset); +} +  void near_sit_down_point(BOOL success, void *)  {  	if (success) diff --git a/indra/newview/llviewermenu.h b/indra/newview/llviewermenu.h index 36b6971c81..a90b32c984 100644 --- a/indra/newview/llviewermenu.h +++ b/indra/newview/llviewermenu.h @@ -135,6 +135,7 @@ void handle_save_snapshot(void *);  void handle_toggle_flycam();  void handle_object_sit_or_stand(); +void handle_object_sit(const LLUUID& object_id);  void handle_give_money_dialog();  bool enable_pay_object();  bool enable_buy_object();  | 
