Fix/Update Inspect Tool

Solves Issue 1131: Inspect Window while open prevents camming
Possibly fixes Issue 928: Have to Click a second time to Inspect an object, I couldn't reproduce, but maybe you still can?

Fixes a bug in the name cache connection setting of llfloaterinspect.cpp from upstream.
This commit is contained in:
Inusaito Sayori
2015-01-20 04:59:46 -05:00
parent 51aaa9f26b
commit 18b7f6925a
7 changed files with 187 additions and 73 deletions

View File

@@ -239,54 +239,57 @@ void LLFloaterInspect::refresh()
// actual name and set a placeholder. // actual name and set a placeholder.
if (LLAvatarNameCache::get(idOwner, &av_name)) if (LLAvatarNameCache::get(idOwner, &av_name))
{ {
// owner_name = av_name.getCompleteName(); // owner_name = av_name.getNSName();
// [RLVa:KB] - Checked: 2010-11-01 (RLVa-1.2.2a) | Modified: RLVa-1.2.2a // [RLVa:KB] - Checked: 2010-11-01 (RLVa-1.2.2a) | Modified: RLVa-1.2.2a
bool fRlvFilterOwner = (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) && (idOwner != gAgent.getID()) && bool fRlvFilterOwner = (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) && (idOwner != gAgent.getID()) &&
(!obj->mPermissions->isGroupOwned()); (!obj->mPermissions->isGroupOwned());
owner_name = (!fRlvFilterOwner) ? av_name.getCompleteName() : RlvStrings::getAnonym(av_name); owner_name = (!fRlvFilterOwner) ? av_name.getNSName() : RlvStrings::getAnonym(av_name);
// [/RLVa:KB] // [/RLVa:KB]
} }
else else
{ {
owner_name = LLTrans::getString("RetrievingData"); owner_name = LLTrans::getString("RetrievingData");
LLAvatarNameCache::get(idOwner, boost::bind(&LLFloaterInspect::dirty, this)); if (mOwnerNameCacheConnection.find(idOwner) == mOwnerNameCacheConnection.end())
} mOwnerNameCacheConnection.insert(std::make_pair(idOwner, LLAvatarNameCache::get(idOwner, boost::bind(&LLFloaterInspect::onGetOwnerNameCallback, this, _1))));
if (LLAvatarNameCache::get(idCreator, &av_name))
{
// creator_name = av_name.getCompleteName();
// [RLVa:KB] - Checked: 2010-11-01 (RLVa-1.2.2a) | Modified: RLVa-1.2.2a
const LLUUID& idCreator = obj->mPermissions->getCreator();
LLAvatarNameCache::get(idCreator, &av_name);
bool fRlvFilterCreator = (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) && (idCreator != gAgent.getID()) &&
( (obj->mPermissions->getOwner() == idCreator) || (RlvUtil::isNearbyAgent(idCreator)) );
creator_name = (!fRlvFilterCreator) ? av_name.getCompleteName() : RlvStrings::getAnonym(av_name);
// [/RLVa:KB]
}
else
{
creator_name = LLTrans::getString("RetrievingData");
LLAvatarNameCache::get(idCreator, boost::bind(&LLFloaterInspect::dirty, this));
} }
// <edit> // <edit>
if (LLAvatarNameCache::get(idLastOwner, &av_name)) if (LLAvatarNameCache::get(idLastOwner, &av_name))
{ {
// last_owner_name = av_name.getCompleteName(); // last_owner_name = av_name.getNSName();
// [RLVa:LF] - Copied from the above creator check Checked: 2010-11-01 (RLVa-1.2.2a) | Modified: RLVa-1.2.2a // [RLVa:LF] - Copied from the above creator check Checked: 2010-11-01 (RLVa-1.2.2a) | Modified: RLVa-1.2.2a
LLAvatarNameCache::get(idLastOwner, &av_name); LLAvatarNameCache::get(idLastOwner, &av_name);
bool fRlvFilterLastOwner = (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) && (idLastOwner != gAgent.getID()) && bool fRlvFilterLastOwner = gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES) && idLastOwner != gAgent.getID() &&
( (obj->mPermissions->getOwner() == idLastOwner) || (RlvUtil::isNearbyAgent(idLastOwner)) ); (obj->mPermissions->getOwner() == idLastOwner || RlvUtil::isNearbyAgent(idLastOwner));
last_owner_name = (!fRlvFilterLastOwner) ? av_name.getCompleteName() : RlvStrings::getAnonym(av_name); last_owner_name = (!fRlvFilterLastOwner) ? av_name.getNSName() : RlvStrings::getAnonym(av_name);
// [/RLVa:LF] // [/RLVa:LF]
} }
else else
{ {
last_owner_name = LLTrans::getString("RetrievingData"); last_owner_name = LLTrans::getString("RetrievingData");
LLAvatarNameCache::get(idLastOwner, boost::bind(&LLFloaterInspect::dirty, this)); if (mLastOwnerNameCacheConnection.find(idLastOwner) == mLastOwnerNameCacheConnection.end())
mLastOwnerNameCacheConnection.insert(std::make_pair(idLastOwner, LLAvatarNameCache::get(idLastOwner, boost::bind(&LLFloaterInspect::onGetLastOwnerNameCallback, this, _1))));
} }
// </edit> // </edit>
if (LLAvatarNameCache::get(idCreator, &av_name))
{
// creator_name = av_name.getNSName();
// [RLVa:KB] - Checked: 2010-11-01 (RLVa-1.2.2a) | Modified: RLVa-1.2.2a
const LLUUID& idCreator = obj->mPermissions->getCreator();
LLAvatarNameCache::get(idCreator, &av_name);
bool fRlvFilterCreator = (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) && (idCreator != gAgent.getID()) &&
( (obj->mPermissions->getOwner() == idCreator) || (RlvUtil::isNearbyAgent(idCreator)) );
creator_name = (!fRlvFilterCreator) ? av_name.getNSName() : RlvStrings::getAnonym(av_name);
// [/RLVa:KB]
}
else
{
creator_name = LLTrans::getString("RetrievingData");
if (mCreatorNameCacheConnection.find(idCreator) == mCreatorNameCacheConnection.end())
mCreatorNameCacheConnection.insert(std::make_pair(idCreator, LLAvatarNameCache::get(idCreator, boost::bind(&LLFloaterInspect::onGetCreatorNameCallback, this, _1))));
}
row["id"] = obj->getObject()->getID(); row["id"] = obj->getObject()->getID();
row["columns"][0]["column"] = "object_name"; row["columns"][0]["column"] = "object_name";
row["columns"][0]["type"] = "text"; row["columns"][0]["type"] = "text";
@@ -321,8 +324,8 @@ void LLFloaterInspect::refresh()
row["columns"][5]["value"] = llformat("%d",obj->getObject()->getNumVertices()); row["columns"][5]["value"] = llformat("%d",obj->getObject()->getNumVertices());
// inventory silliness // inventory silliness
S32 scripts,total_inv; S32 scripts,total_inv;
std::map<LLUUID,std::pair<S32,S32> >::iterator itr = mInventoryNums.find(obj->getObject()->getID()); std::map<LLUUID,std::pair<U32,U32> >::iterator itr = mInventoryNums.find(obj->getObject()->getID());
if(itr != mInventoryNums.end()) if (itr != mInventoryNums.end())
{ {
scripts = itr->second.first; scripts = itr->second.first;
total_inv = itr->second.second; total_inv = itr->second.second;
@@ -331,10 +334,10 @@ void LLFloaterInspect::refresh()
{ {
scripts = 0; scripts = 0;
total_inv = 0; total_inv = 0;
if(std::find(mQueue.begin(),mQueue.end(),obj->getObject()->getID()) == mQueue.end()) if (std::find(mQueue.begin(),mQueue.end(),obj->getObject()->getID()) == mQueue.end())
{ {
mQueue.push_back(obj->getObject()->getID()); mQueue.push_back(obj->getObject()->getID());
registerVOInventoryListener(obj->getObject(),NULL); registerVOInventoryListener(obj->getObject(), NULL);
requestVOInventory(); requestVOInventory();
} }
} }
@@ -365,23 +368,19 @@ void LLFloaterInspect::refresh()
} }
// <edit> // <edit>
void LLFloaterInspect::inventoryChanged(LLViewerObject* viewer_object, LLInventoryObject::object_list_t* inv, S32, void* q_id) void LLFloaterInspect::inventoryChanged(LLViewerObject* viewer_object, LLInventoryObject::object_list_t* inv, S32, void*)
{ {
std::vector<LLUUID>::iterator iter = std::find(mQueue.begin(),mQueue.end(),viewer_object->getID()); std::vector<LLUUID>::iterator iter = std::find(mQueue.begin(),mQueue.end(),viewer_object->getID());
if (viewer_object && inv && iter != mQueue.end() ) if (viewer_object && inv && iter != mQueue.end())
{ {
S32 scripts = 0; U32 scripts = 0;
LLInventoryObject::object_list_t::const_iterator end = inv->end(); LLInventoryObject::object_list_t::const_iterator end = inv->end();
for (LLInventoryObject::object_list_t::const_iterator it = inv->begin(); it != end; ++it) for (LLInventoryObject::object_list_t::const_iterator it = inv->begin(); it != end; ++it)
{ if ((*it)->getType() == LLAssetType::AT_LSL_TEXT)
if((*it)->getType() == LLAssetType::AT_LSL_TEXT)
{
++scripts; ++scripts;
}
}
mInventoryNums[viewer_object->getID()] = std::make_pair(scripts,inv->size()); mInventoryNums[viewer_object->getID()] = std::make_pair(scripts,inv->size());
mQueue.erase(iter); mQueue.erase(iter);
mDirty = TRUE; setDirty();
} }
} }
// </edit> // </edit>
@@ -401,6 +400,24 @@ void LLFloaterInspect::dirty()
setDirty(); setDirty();
} }
void LLFloaterInspect::onGetOwnerNameCallback(const LLUUID& id)
{
mOwnerNameCacheConnection.erase(id);
setDirty();
}
void LLFloaterInspect::onGetLastOwnerNameCallback(const LLUUID& id)
{
mLastOwnerNameCacheConnection.erase(id);
setDirty();
}
void LLFloaterInspect::onGetCreatorNameCallback(const LLUUID& id)
{
mCreatorNameCacheConnection.erase(id);
setDirty();
}
void LLFloaterInspect::draw() void LLFloaterInspect::draw()
{ {
if (mDirty) if (mDirty)

View File

@@ -72,14 +72,21 @@ protected:
// </edit> // </edit>
private: private:
LLFloaterInspect(const LLSD&); void onGetOwnerNameCallback(const LLUUID& id);
void onGetLastOwnerNameCallback(const LLUUID& id); // <edit/>
void onGetCreatorNameCallback(const LLUUID& id);
LLFloaterInspect(const LLSD& key);
virtual ~LLFloaterInspect(void); virtual ~LLFloaterInspect(void);
LLSafeHandle<LLObjectSelection> mObjectSelection; LLSafeHandle<LLObjectSelection> mObjectSelection;
// <edit> // <edit>
std::map<LLUUID,std::pair<S32,S32> > mInventoryNums; //<scripts,total> std::map<LLUUID,std::pair<U32,U32> > mInventoryNums; //<scripts,total>
std::vector<LLUUID> mQueue; std::vector<LLUUID> mQueue;
// </edit> // </edit>
std::map<const LLUUID, boost::signals2::scoped_connection> mOwnerNameCacheConnection;
std::map<const LLUUID, boost::signals2::scoped_connection> mLastOwnerNameCacheConnection; // <edit/>
std::map<const LLUUID, boost::signals2::scoped_connection> mCreatorNameCacheConnection;
}; };
#endif //LL_LLFLOATERINSPECT_H #endif //LL_LLFLOATERINSPECT_H

View File

@@ -140,7 +140,8 @@ void LLToolComposite::handleDeselect()
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
LLToolCompInspect::LLToolCompInspect() LLToolCompInspect::LLToolCompInspect()
: LLToolComposite(std::string("Inspect")) : LLToolComposite(std::string("Inspect")),
mIsToolCameraActive(FALSE)
{ {
mSelectRect = new LLToolSelectRect(this); mSelectRect = new LLToolSelectRect(this);
mDefault = mSelectRect; mDefault = mSelectRect;
@@ -155,37 +156,49 @@ LLToolCompInspect::~LLToolCompInspect()
BOOL LLToolCompInspect::handleMouseDown(S32 x, S32 y, MASK mask) BOOL LLToolCompInspect::handleMouseDown(S32 x, S32 y, MASK mask)
{ {
mMouseDown = TRUE; BOOL handled = FALSE;
gViewerWindow->pickAsync(x, y, mask, pickCallback);
return TRUE; if (mCur == LLToolCamera::getInstance())
{
handled = mCur->handleMouseDown(x, y, mask);
}
else
{
mMouseDown = TRUE;
gViewerWindow->pickAsync(x, y, mask, pickCallback);
handled = TRUE;
}
return handled;
}
BOOL LLToolCompInspect::handleMouseUp(S32 x, S32 y, MASK mask)
{
BOOL handled = LLToolComposite::handleMouseUp(x, y, mask);
mIsToolCameraActive = getCurrentTool() == LLToolCamera::getInstance();
return handled;
} }
void LLToolCompInspect::pickCallback(const LLPickInfo& pick_info) void LLToolCompInspect::pickCallback(const LLPickInfo& pick_info)
{ {
LLViewerObject* hit_obj = pick_info.getObject(); LLViewerObject* hit_obj = pick_info.getObject();
LLToolCompInspect* tool_inspectp = LLToolCompInspect::getInstance();
if (!LLToolCompInspect::getInstance()->mMouseDown) if (!tool_inspectp->mMouseDown)
{ {
// fast click on object, but mouse is already up...just do select // fast click on object, but mouse is already up...just do select
LLToolCompInspect::getInstance()->mSelectRect->handleObjectSelection(pick_info, gSavedSettings.getBOOL("EditLinkedParts"), FALSE); tool_inspectp->mSelectRect->handleObjectSelection(pick_info, gSavedSettings.getBOOL("EditLinkedParts"), FALSE);
return; return;
} }
if( hit_obj ) LLSelectMgr* mgr_selectp = LLSelectMgr::getInstance();
{ if (hit_obj && mgr_selectp->getSelection()->getObjectCount()) {
if (LLSelectMgr::getInstance()->getSelection()->getObjectCount()) LLEditMenuHandler::gEditMenuHandler = mgr_selectp;
{ }
LLEditMenuHandler::gEditMenuHandler = LLSelectMgr::getInstance();
}
LLToolCompInspect::getInstance()->setCurrentTool( LLToolCompInspect::getInstance()->mSelectRect );
LLToolCompInspect::getInstance()->mSelectRect->handlePick( pick_info );
} tool_inspectp->setCurrentTool( tool_inspectp->mSelectRect );
else tool_inspectp->mIsToolCameraActive = FALSE;
{ tool_inspectp->mSelectRect->handlePick( pick_info );
LLToolCompInspect::getInstance()->setCurrentTool( LLToolCompInspect::getInstance()->mSelectRect );
LLToolCompInspect::getInstance()->mSelectRect->handlePick( pick_info );
}
} }
BOOL LLToolCompInspect::handleDoubleClick(S32 x, S32 y, MASK mask) BOOL LLToolCompInspect::handleDoubleClick(S32 x, S32 y, MASK mask)
@@ -193,6 +206,39 @@ BOOL LLToolCompInspect::handleDoubleClick(S32 x, S32 y, MASK mask)
return TRUE; return TRUE;
} }
BOOL LLToolCompInspect::handleKey(KEY key, MASK mask)
{
BOOL handled = FALSE;
if(KEY_ALT == key)
{
setCurrentTool(LLToolCamera::getInstance());
mIsToolCameraActive = TRUE;
handled = TRUE;
}
else
{
handled = LLToolComposite::handleKey(key, mask);
}
return handled;
}
void LLToolCompInspect::onMouseCaptureLost()
{
LLToolComposite::onMouseCaptureLost();
mIsToolCameraActive = FALSE;
}
void LLToolCompInspect::keyUp(KEY key, MASK mask)
{
if (KEY_ALT == key && mCur == LLToolCamera::getInstance())
{
setCurrentTool(mDefault);
mIsToolCameraActive = FALSE;
}
}
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
// LLToolCompTranslate // LLToolCompTranslate
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------

View File

@@ -109,9 +109,18 @@ public:
// Overridden from LLToolComposite // Overridden from LLToolComposite
virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask); virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask);
virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask); virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
virtual BOOL handleKey(KEY key, MASK mask);
virtual void onMouseCaptureLost();
void keyUp(KEY key, MASK mask);
static void pickCallback(const LLPickInfo& pick_info); static void pickCallback(const LLPickInfo& pick_info);
BOOL isToolCameraActive() const { return mIsToolCameraActive; }
private:
BOOL mIsToolCameraActive;
}; };
//----------------------------------------------------------------------- //-----------------------------------------------------------------------

View File

@@ -36,6 +36,7 @@
#include "llfirstuse.h" #include "llfirstuse.h"
// tools and manipulators // tools and manipulators
#include "llfloaterinspect.h"
#include "lltool.h" #include "lltool.h"
#include "llmanipscale.h" #include "llmanipscale.h"
#include "llselectmgr.h" #include "llselectmgr.h"
@@ -92,6 +93,8 @@ LLToolMgr::LLToolMgr()
// gLandToolset = new LLToolset("Land"); // gLandToolset = new LLToolset("Land");
gMouselookToolset = new LLToolset("MouseLook"); gMouselookToolset = new LLToolset("MouseLook");
gFaceEditToolset = new LLToolset("FaceEdit"); gFaceEditToolset = new LLToolset("FaceEdit");
gMouselookToolset->setShowFloaterTools(false);
gFaceEditToolset->setShowFloaterTools(false);
} }
void LLToolMgr::initTools() void LLToolMgr::initTools()
@@ -221,7 +224,19 @@ LLTool* LLToolMgr::getCurrentTool()
} }
if (cur_tool) if (cur_tool)
{ {
cur_tool->handleSelect(); if (LLToolCompInspect::getInstance()->isToolCameraActive()
&& prev_tool == LLToolCamera::getInstance()
&& cur_tool == LLToolPie::getInstance())
{
if (LLFloaterInspect::instanceVisible())
{
setTransientTool(LLToolCompInspect::getInstance());
}
}
else
{
cur_tool->handleSelect();
}
} }
} }

View File

@@ -95,7 +95,7 @@ protected:
class LLToolset class LLToolset
{ {
public: public:
LLToolset(const char *name) : mSelectedTool(NULL), mName(name) {} LLToolset(const char* name) : mSelectedTool(NULL), mName(name), mIsShowFloaterTools(true) {}
LLTool* getSelectedTool() { return mSelectedTool; } LLTool* getSelectedTool() { return mSelectedTool; }
@@ -111,12 +111,16 @@ public:
BOOL isToolSelected( S32 index ); BOOL isToolSelected( S32 index );
void setShowFloaterTools(bool pShowFloaterTools) {mIsShowFloaterTools = pShowFloaterTools;};
bool isShowFloaterTools() const {return mIsShowFloaterTools;};
const char* getName() const {return mName;} const char* getName() const {return mName;}
protected: protected:
const char* mName; const char* mName;
LLTool* mSelectedTool; LLTool* mSelectedTool;
typedef std::vector<LLTool*> tool_list_t; typedef std::vector<LLTool*> tool_list_t;
tool_list_t mToolList; tool_list_t mToolList;
bool mIsShowFloaterTools;
}; };
// Globals // Globals

View File

@@ -1373,6 +1373,13 @@ BOOL LLViewerWindow::handleTranslatedKeyUp(KEY key, MASK mask)
// Let the voice chat code check for its PTT key. Note that this never affects event processing. // Let the voice chat code check for its PTT key. Note that this never affects event processing.
LLVoiceClient::getInstance()->keyUp(key, mask); LLVoiceClient::getInstance()->keyUp(key, mask);
// Let the inspect tool code check for ALT key to set LLToolSelectRect active instead LLToolCamera
LLToolCompInspect * tool_inspectp = LLToolCompInspect::getInstance();
if (LLToolMgr::getInstance()->getCurrentTool() == tool_inspectp)
{
tool_inspectp->keyUp(key, mask);
}
return FALSE; return FALSE;
} }
@@ -1380,7 +1387,7 @@ BOOL LLViewerWindow::handleTranslatedKeyUp(KEY key, MASK mask)
void LLViewerWindow::handleScanKey(KEY key, BOOL key_down, BOOL key_up, BOOL key_level) void LLViewerWindow::handleScanKey(KEY key, BOOL key_down, BOOL key_up, BOOL key_level)
{ {
LLViewerJoystick::getInstance()->setCameraNeedsUpdate(true); LLViewerJoystick::getInstance()->setCameraNeedsUpdate(true);
return gViewerKeyboard.scanKey(key, key_down, key_up, key_level); gViewerKeyboard.scanKey(key, key_down, key_up, key_level);
} }
@@ -1665,7 +1672,7 @@ LLViewerWindow::LLViewerWindow(
{ {
LLSplashScreen::update(LLTrans::getString("StartupRequireDriverUpdate")); LLSplashScreen::update(LLTrans::getString("StartupRequireDriverUpdate"));
LL_WARNS("Window") << "Failed to create window, to be shutting Down, be sure your graphics driver is updated." << llendl ; LL_WARNS("Window") << "Failed to create window, to be shutting Down, be sure your graphics driver is updated." << LL_ENDL ;
ms_sleep(5000) ; //wait for 5 seconds. ms_sleep(5000) ; //wait for 5 seconds.
@@ -3366,10 +3373,8 @@ void LLViewerWindow::updateLayout()
|| (tool != LLToolPie::getInstance() // not default tool || (tool != LLToolPie::getInstance() // not default tool
&& tool != LLToolCompGun::getInstance() // not coming out of mouselook && tool != LLToolCompGun::getInstance() // not coming out of mouselook
&& !suppress_toolbox // not override in third person && !suppress_toolbox // not override in third person
&& LLToolMgr::getInstance()->getCurrentToolset() != gFaceEditToolset // not special mode && LLToolMgr::getInstance()->getCurrentToolset()->isShowFloaterTools()
&& LLToolMgr::getInstance()->getCurrentToolset() != gMouselookToolset
&& (!captor || dynamic_cast<LLView*>(captor) != NULL))) // not dragging && (!captor || dynamic_cast<LLView*>(captor) != NULL))) // not dragging
{ {
// Force floater tools to be visible (unless minimized) // Force floater tools to be visible (unless minimized)
if (!gFloaterTools->getVisible()) if (!gFloaterTools->getVisible())
@@ -3406,7 +3411,7 @@ void LLViewerWindow::updateLayout()
} }
// Update rectangles for the various toolbars // Update rectangles for the various toolbars
if (gOverlayBar && gNotifyBoxView && gConsole && gToolBar && gHUDView) if (gOverlayBar && gNotifyBoxView && gToolBar && gHUDView)
{ {
LLRect bar_rect(-1, STATUS_BAR_HEIGHT, getWindowWidth()+1, -1); LLRect bar_rect(-1, STATUS_BAR_HEIGHT, getWindowWidth()+1, -1);
@@ -3456,10 +3461,13 @@ void LLViewerWindow::updateLayout()
{ {
gFloaterView->setSnapOffsetBottom(0); gFloaterView->setSnapOffsetBottom(0);
} }
}
// Always update console // Always update console
if (gConsole)
{
LLRect console_rect = getChatConsoleRect(); LLRect console_rect = getChatConsoleRect();
console_rect.mBottom = gHUDView->getRect().mBottom + getChatConsoleBottomPad(); if (gHUDView) console_rect.mBottom = gHUDView->getRect().mBottom + getChatConsoleBottomPad();
gConsole->reshape(console_rect.getWidth(), console_rect.getHeight()); gConsole->reshape(console_rect.getWidth(), console_rect.getHeight());
gConsole->setRect(console_rect); gConsole->setRect(console_rect);
} }
@@ -3559,6 +3567,7 @@ void LLViewerWindow::updateKeyboardFocus()
cur_focus->focusFirstItem(); cur_focus->focusFirstItem();
} }
} }
// last ditch force of edit menu to selection manager // last ditch force of edit menu to selection manager
if (LLEditMenuHandler::gEditMenuHandler == NULL && LLSelectMgr::getInstance()->getSelection()->getObjectCount()) if (LLEditMenuHandler::gEditMenuHandler == NULL && LLSelectMgr::getInstance()->getSelection()->getObjectCount())
{ {
@@ -3597,6 +3606,7 @@ void LLViewerWindow::saveLastMouse(const LLCoordGL &point)
{ {
// Store last mouse location. // Store last mouse location.
// If mouse leaves window, pretend last point was on edge of window // If mouse leaves window, pretend last point was on edge of window
if (point.mX < 0) if (point.mX < 0)
{ {
mCurrentMousePoint.mX = 0; mCurrentMousePoint.mX = 0;
@@ -3886,6 +3896,8 @@ void LLViewerWindow::schedulePick(LLPickInfo& pick_info)
mPicks.push_back(pick_info); mPicks.push_back(pick_info);
// delay further event processing until we receive results of pick // delay further event processing until we receive results of pick
// only do this for async picks so that handleMouseUp won't be called
// until the pick triggered in handleMouseDown has been processed, for example
mWindow->delayInputProcessing(); mWindow->delayInputProcessing();
} }
@@ -3963,6 +3975,7 @@ LLHUDIcon* LLViewerWindow::cursorIntersectIcon(S32 mouse_x, S32 mouse_y, F32 dep
} }
// world coordinates of mouse // world coordinates of mouse
// VECTORIZE THIS
LLVector3 mouse_direction_global = mouseDirectionGlobal(x,y); LLVector3 mouse_direction_global = mouseDirectionGlobal(x,y);
LLVector3 mouse_point_global = LLViewerCamera::getInstance()->getOrigin(); LLVector3 mouse_point_global = LLViewerCamera::getInstance()->getOrigin();
LLVector3 mouse_world_start = mouse_point_global; LLVector3 mouse_world_start = mouse_point_global;
@@ -4258,7 +4271,7 @@ BOOL LLViewerWindow::mousePointOnLandGlobal(const S32 x, const S32 y, LLVector3d
S32 grids_per_edge = (S32) regionp->getLand().mGridsPerEdge; S32 grids_per_edge = (S32) regionp->getLand().mGridsPerEdge;
if ((i >= grids_per_edge) || (j >= grids_per_edge)) if ((i >= grids_per_edge) || (j >= grids_per_edge))
{ {
//llinfos << "LLViewerWindow::mousePointOnLand probe_point is out of region" << llendl; //LL_INFOS() << "LLViewerWindow::mousePointOnLand probe_point is out of region" << LL_ENDL;
continue; continue;
} }
@@ -4305,7 +4318,7 @@ BOOL LLViewerWindow::mousePointOnLandGlobal(const S32 x, const S32 y, LLVector3d
j = (S32) (local_probe_point.mV[VY]/regionp->getLand().getMetersPerGrid()); j = (S32) (local_probe_point.mV[VY]/regionp->getLand().getMetersPerGrid());
if ((i >= regionp->getLand().mGridsPerEdge) || (j >= regionp->getLand().mGridsPerEdge)) if ((i >= regionp->getLand().mGridsPerEdge) || (j >= regionp->getLand().mGridsPerEdge))
{ {
// llinfos << "LLViewerWindow::mousePointOnLand probe_point is out of region" << llendl; // LL_INFOS() << "LLViewerWindow::mousePointOnLand probe_point is out of region" << LL_ENDL;
continue; continue;
} }
land_z = regionp->getLand().mSurfaceZ[ i + j * (regionp->getLand().mGridsPerEdge) ]; land_z = regionp->getLand().mSurfaceZ[ i + j * (regionp->getLand().mGridsPerEdge) ];
@@ -4313,7 +4326,7 @@ BOOL LLViewerWindow::mousePointOnLandGlobal(const S32 x, const S32 y, LLVector3d
land_z = regionp->getLand().resolveHeightRegion(probe_point_region); land_z = regionp->getLand().resolveHeightRegion(probe_point_region);
//llinfos << "mousePointOnLand refine z " << land_z << llendl; //LL_INFOS() << "mousePointOnLand refine z " << land_z << LL_ENDL;
if (probe_point_region.mV[VZ] < land_z) if (probe_point_region.mV[VZ] < land_z)
{ {
@@ -4739,7 +4752,9 @@ bool LLViewerWindow::rawRawSnapshot(LLImageRaw *raw,
S32 original_width = 0; S32 original_width = 0;
S32 original_height = 0; S32 original_height = 0;
bool reset_deferred = false; bool reset_deferred = false;
LLRenderTarget scratch_space; LLRenderTarget scratch_space;
if ((image_width > window_width || image_height > window_height) && LLPipeline::sRenderDeferred && !show_ui) if ((image_width > window_width || image_height > window_height) && LLPipeline::sRenderDeferred && !show_ui)
{ {
if (scratch_space.allocate(image_width, image_height, GL_RGBA, true, true)) if (scratch_space.allocate(image_width, image_height, GL_RGBA, true, true))
@@ -4955,6 +4970,7 @@ bool LLViewerWindow::rawRawSnapshot(LLImageRaw *raw,
LLHUDObject::reshapeAll(); LLHUDObject::reshapeAll();
} }
setCursor(UI_CURSOR_ARROW); setCursor(UI_CURSOR_ARROW);
if (do_rebuild) if (do_rebuild)