diff options
Diffstat (limited to 'linden/indra/newview/lltoolpie.cpp')
-rw-r--r-- | linden/indra/newview/lltoolpie.cpp | 150 |
1 files changed, 74 insertions, 76 deletions
diff --git a/linden/indra/newview/lltoolpie.cpp b/linden/indra/newview/lltoolpie.cpp index 4bb2111..de10045 100644 --- a/linden/indra/newview/lltoolpie.cpp +++ b/linden/indra/newview/lltoolpie.cpp | |||
@@ -67,10 +67,6 @@ | |||
67 | #include "llui.h" | 67 | #include "llui.h" |
68 | #include "llweb.h" | 68 | #include "llweb.h" |
69 | 69 | ||
70 | LLPointer<LLViewerObject> LLToolPie::sClickActionObject; | ||
71 | LLSafeHandle<LLObjectSelection> LLToolPie::sLeftClickSelection = NULL; | ||
72 | U8 LLToolPie::sClickAction = 0; | ||
73 | |||
74 | extern void handle_buy(void*); | 70 | extern void handle_buy(void*); |
75 | 71 | ||
76 | extern BOOL gDebugClicks; | 72 | extern BOOL gDebugClicks; |
@@ -81,53 +77,52 @@ static ECursorType cursor_from_parcel_media(U8 click_action); | |||
81 | 77 | ||
82 | 78 | ||
83 | LLToolPie::LLToolPie() | 79 | LLToolPie::LLToolPie() |
84 | : LLTool("Select"), | 80 | : LLTool(std::string("Select")), |
85 | mPieMouseButtonDown( FALSE ), | 81 | mPieMouseButtonDown( FALSE ), |
86 | mGrabMouseButtonDown( FALSE ), | 82 | mGrabMouseButtonDown( FALSE ), |
87 | mHitLand( FALSE ), | 83 | mMouseOutsideSlop( FALSE ), |
88 | mHitObjectID(), | 84 | mClickAction(0) |
89 | mMouseOutsideSlop( FALSE ) | ||
90 | { } | 85 | { } |
91 | 86 | ||
92 | 87 | ||
93 | BOOL LLToolPie::handleMouseDown(S32 x, S32 y, MASK mask) | 88 | BOOL LLToolPie::handleMouseDown(S32 x, S32 y, MASK mask) |
94 | { | 89 | { |
95 | gPickFaces = TRUE; | ||
96 | //left mouse down always picks transparent | 90 | //left mouse down always picks transparent |
97 | gViewerWindow->hitObjectOrLandGlobalAsync(x, y, mask, leftMouseCallback, | 91 | gViewerWindow->pickAsync(x, y, mask, leftMouseCallback, TRUE, TRUE); |
98 | TRUE, TRUE); | ||
99 | mGrabMouseButtonDown = TRUE; | 92 | mGrabMouseButtonDown = TRUE; |
100 | return TRUE; | 93 | return TRUE; |
101 | } | 94 | } |
102 | 95 | ||
103 | // static | 96 | // static |
104 | void LLToolPie::leftMouseCallback(S32 x, S32 y, MASK mask) | 97 | void LLToolPie::leftMouseCallback(const LLPickInfo& pick_info) |
105 | { | 98 | { |
106 | LLToolPie::getInstance()->pickAndShowMenu(x, y, mask, FALSE); | 99 | LLToolPie::getInstance()->mPick = pick_info; |
100 | LLToolPie::getInstance()->pickAndShowMenu(FALSE); | ||
107 | } | 101 | } |
108 | 102 | ||
109 | BOOL LLToolPie::handleRightMouseDown(S32 x, S32 y, MASK mask) | 103 | BOOL LLToolPie::handleRightMouseDown(S32 x, S32 y, MASK mask) |
110 | { | 104 | { |
111 | // Pick faces in case they select "Copy Texture" and need that info. | ||
112 | gPickFaces = TRUE; | ||
113 | // don't pick transparent so users can't "pay" transparent objects | 105 | // don't pick transparent so users can't "pay" transparent objects |
114 | gViewerWindow->hitObjectOrLandGlobalAsync(x, y, mask, rightMouseCallback, | 106 | gViewerWindow->pickAsync(x, y, mask, rightMouseCallback, FALSE, TRUE); |
115 | FALSE, TRUE); | ||
116 | mPieMouseButtonDown = TRUE; | 107 | mPieMouseButtonDown = TRUE; |
117 | // don't steal focus from UI | 108 | // don't steal focus from UI |
118 | return FALSE; | 109 | return FALSE; |
119 | } | 110 | } |
120 | 111 | ||
121 | // static | 112 | // static |
122 | void LLToolPie::rightMouseCallback(S32 x, S32 y, MASK mask) | 113 | void LLToolPie::rightMouseCallback(const LLPickInfo& pick_info) |
123 | { | 114 | { |
124 | LLToolPie::getInstance()->pickAndShowMenu(x, y, mask, TRUE); | 115 | LLToolPie::getInstance()->mPick = pick_info; |
116 | LLToolPie::getInstance()->pickAndShowMenu(TRUE); | ||
125 | } | 117 | } |
126 | 118 | ||
127 | // True if you selected an object. | 119 | // True if you selected an object. |
128 | BOOL LLToolPie::pickAndShowMenu(S32 x, S32 y, MASK mask, BOOL always_show) | 120 | BOOL LLToolPie::pickAndShowMenu(BOOL always_show) |
129 | { | 121 | { |
130 | if (!always_show && gLastHitParcelWall) | 122 | S32 x = mPick.mMousePt.mX; |
123 | S32 y = mPick.mMousePt.mY; | ||
124 | MASK mask = mPick.mKeyMask; | ||
125 | if (!always_show && mPick.mPickType == LLPickInfo::PICK_PARCEL_WALL) | ||
131 | { | 126 | { |
132 | LLParcel* parcel = LLViewerParcelMgr::getInstance()->getCollisionParcel(); | 127 | LLParcel* parcel = LLViewerParcelMgr::getInstance()->getCollisionParcel(); |
133 | if (parcel) | 128 | if (parcel) |
@@ -151,25 +146,18 @@ BOOL LLToolPie::pickAndShowMenu(S32 x, S32 y, MASK mask, BOOL always_show) | |||
151 | } | 146 | } |
152 | 147 | ||
153 | // didn't click in any UI object, so must have clicked in the world | 148 | // didn't click in any UI object, so must have clicked in the world |
154 | LLViewerObject *object = gViewerWindow->lastObjectHit(); | 149 | LLViewerObject *object = mPick.getObject(); |
155 | LLViewerObject *parent = NULL; | 150 | LLViewerObject *parent = NULL; |
156 | 151 | ||
157 | mHitLand = !object && !gLastHitPosGlobal.isExactlyZero(); | 152 | if (mPick.mPickType != LLPickInfo::PICK_LAND) |
158 | if (!mHitLand) | ||
159 | { | 153 | { |
160 | LLViewerParcelMgr::getInstance()->deselectLand(); | 154 | LLViewerParcelMgr::getInstance()->deselectLand(); |
161 | } | 155 | } |
162 | 156 | ||
163 | if (object) | 157 | if (object) |
164 | { | 158 | { |
165 | mHitObjectID = object->mID; | ||
166 | |||
167 | parent = object->getRootEdit(); | 159 | parent = object->getRootEdit(); |
168 | } | 160 | } |
169 | else | ||
170 | { | ||
171 | mHitObjectID.setNull(); | ||
172 | } | ||
173 | 161 | ||
174 | BOOL touchable = (object && object->flagHandleTouch()) | 162 | BOOL touchable = (object && object->flagHandleTouch()) |
175 | || (parent && parent->flagHandleTouch()); | 163 | || (parent && parent->flagHandleTouch()); |
@@ -177,17 +165,17 @@ BOOL LLToolPie::pickAndShowMenu(S32 x, S32 y, MASK mask, BOOL always_show) | |||
177 | // If it's a left-click, and we have a special action, do it. | 165 | // If it's a left-click, and we have a special action, do it. |
178 | if (useClickAction(always_show, mask, object, parent)) | 166 | if (useClickAction(always_show, mask, object, parent)) |
179 | { | 167 | { |
180 | sClickAction = 0; | 168 | mClickAction = 0; |
181 | if (object && object->getClickAction()) | 169 | if (object && object->getClickAction()) |
182 | { | 170 | { |
183 | sClickAction = object->getClickAction(); | 171 | mClickAction = object->getClickAction(); |
184 | } | 172 | } |
185 | else if (parent && parent->getClickAction()) | 173 | else if (parent && parent->getClickAction()) |
186 | { | 174 | { |
187 | sClickAction = parent->getClickAction(); | 175 | mClickAction = parent->getClickAction(); |
188 | } | 176 | } |
189 | 177 | ||
190 | switch(sClickAction) | 178 | switch(mClickAction) |
191 | { | 179 | { |
192 | case CLICK_ACTION_TOUCH: | 180 | case CLICK_ACTION_TOUCH: |
193 | default: | 181 | default: |
@@ -205,27 +193,27 @@ BOOL LLToolPie::pickAndShowMenu(S32 x, S32 y, MASK mask, BOOL always_show) | |||
205 | || parent && parent->flagTakesMoney()) | 193 | || parent && parent->flagTakesMoney()) |
206 | { | 194 | { |
207 | // pay event goes to object actually clicked on | 195 | // pay event goes to object actually clicked on |
208 | sClickActionObject = object; | 196 | mClickActionObject = object; |
209 | sLeftClickSelection = LLToolSelect::handleObjectSelection(object, MASK_NONE, FALSE, TRUE); | 197 | mLeftClickSelection = LLToolSelect::handleObjectSelection(mPick, FALSE, TRUE); |
210 | return TRUE; | 198 | return TRUE; |
211 | } | 199 | } |
212 | break; | 200 | break; |
213 | case CLICK_ACTION_BUY: | 201 | case CLICK_ACTION_BUY: |
214 | sClickActionObject = parent; | 202 | mClickActionObject = parent; |
215 | sLeftClickSelection = LLToolSelect::handleObjectSelection(parent, MASK_NONE, FALSE, TRUE); | 203 | mLeftClickSelection = LLToolSelect::handleObjectSelection(mPick, FALSE, TRUE, TRUE); |
216 | return TRUE; | 204 | return TRUE; |
217 | case CLICK_ACTION_OPEN: | 205 | case CLICK_ACTION_OPEN: |
218 | if (parent && parent->allowOpen()) | 206 | if (parent && parent->allowOpen()) |
219 | { | 207 | { |
220 | sClickActionObject = parent; | 208 | mClickActionObject = parent; |
221 | sLeftClickSelection = LLToolSelect::handleObjectSelection(parent, MASK_NONE, FALSE, TRUE); | 209 | mLeftClickSelection = LLToolSelect::handleObjectSelection(mPick, FALSE, TRUE, TRUE); |
222 | } | 210 | } |
223 | return TRUE; | 211 | return TRUE; |
224 | case CLICK_ACTION_PLAY: | 212 | case CLICK_ACTION_PLAY: |
225 | handle_click_action_play(); | 213 | handle_click_action_play(); |
226 | return TRUE; | 214 | return TRUE; |
227 | case CLICK_ACTION_OPEN_MEDIA: | 215 | case CLICK_ACTION_OPEN_MEDIA: |
228 | // sClickActionObject = object; | 216 | // mClickActionObject = object; |
229 | handle_click_action_open_media(object); | 217 | handle_click_action_open_media(object); |
230 | return TRUE; | 218 | return TRUE; |
231 | } | 219 | } |
@@ -239,12 +227,13 @@ BOOL LLToolPie::pickAndShowMenu(S32 x, S32 y, MASK mask, BOOL always_show) | |||
239 | { | 227 | { |
240 | gGrabTransientTool = this; | 228 | gGrabTransientTool = this; |
241 | LLToolMgr::getInstance()->getCurrentToolset()->selectTool( LLToolGrab::getInstance() ); | 229 | LLToolMgr::getInstance()->getCurrentToolset()->selectTool( LLToolGrab::getInstance() ); |
242 | return LLToolGrab::getInstance()->handleObjectHit( object, x, y, mask); | 230 | return LLToolGrab::getInstance()->handleObjectHit( mPick ); |
243 | } | 231 | } |
244 | 232 | ||
245 | if (!object && gLastHitHUDIcon && gLastHitHUDIcon->getSourceObject()) | 233 | LLHUDIcon* last_hit_hud_icon = mPick.mHUDIcon; |
234 | if (!object && last_hit_hud_icon && last_hit_hud_icon->getSourceObject()) | ||
246 | { | 235 | { |
247 | LLFloaterScriptDebug::show(gLastHitHUDIcon->getSourceObject()->getID()); | 236 | LLFloaterScriptDebug::show(last_hit_hud_icon->getSourceObject()->getID()); |
248 | } | 237 | } |
249 | 238 | ||
250 | // If left-click never selects or spawns a menu | 239 | // If left-click never selects or spawns a menu |
@@ -273,7 +262,7 @@ BOOL LLToolPie::pickAndShowMenu(S32 x, S32 y, MASK mask, BOOL always_show) | |||
273 | LLToolMgr::getInstance()->setTransientTool(LLToolCamera::getInstance()); | 262 | LLToolMgr::getInstance()->setTransientTool(LLToolCamera::getInstance()); |
274 | gViewerWindow->hideCursor(); | 263 | gViewerWindow->hideCursor(); |
275 | LLToolCamera::getInstance()->setMouseCapture(TRUE); | 264 | LLToolCamera::getInstance()->setMouseCapture(TRUE); |
276 | LLToolCamera::getInstance()->pickCallback(gViewerWindow->getCurrentMouseX(), gViewerWindow->getCurrentMouseY(), mask); | 265 | LLToolCamera::getInstance()->pickCallback(mPick); |
277 | gAgent.setFocusOnAvatar(TRUE, TRUE); | 266 | gAgent.setFocusOnAvatar(TRUE, TRUE); |
278 | 267 | ||
279 | return TRUE; | 268 | return TRUE; |
@@ -292,22 +281,22 @@ BOOL LLToolPie::pickAndShowMenu(S32 x, S32 y, MASK mask, BOOL always_show) | |||
292 | } | 281 | } |
293 | 282 | ||
294 | // Can't ignore children here. | 283 | // Can't ignore children here. |
295 | LLToolSelect::handleObjectSelection(object, mask, FALSE, TRUE); | 284 | LLToolSelect::handleObjectSelection(mPick, FALSE, TRUE); |
296 | 285 | ||
297 | // Spawn pie menu | 286 | // Spawn pie menu |
298 | if (mHitLand) | 287 | if (mPick.mPickType == LLPickInfo::PICK_LAND) |
299 | { | 288 | { |
300 | LLParcelSelectionHandle selection = LLViewerParcelMgr::getInstance()->selectParcelAt( gLastHitPosGlobal ); | 289 | LLParcelSelectionHandle selection = LLViewerParcelMgr::getInstance()->selectParcelAt( mPick.mPosGlobal ); |
301 | gMenuHolder->setParcelSelection(selection); | 290 | gMenuHolder->setParcelSelection(selection); |
302 | gPieLand->show(x, y, mPieMouseButtonDown); | 291 | gPieLand->show(x, y, mPieMouseButtonDown); |
303 | 292 | ||
304 | // VEFFECT: ShowPie | 293 | // VEFFECT: ShowPie |
305 | LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_SPHERE, TRUE); | 294 | LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_SPHERE, TRUE); |
306 | effectp->setPositionGlobal(gLastHitPosGlobal); | 295 | effectp->setPositionGlobal(mPick.mPosGlobal); |
307 | effectp->setColor(LLColor4U(gAgent.getEffectColor())); | 296 | effectp->setColor(LLColor4U(gAgent.getEffectColor())); |
308 | effectp->setDuration(0.25f); | 297 | effectp->setDuration(0.25f); |
309 | } | 298 | } |
310 | else if (mHitObjectID == gAgent.getID() ) | 299 | else if (mPick.mObjectID == gAgent.getID() ) |
311 | { | 300 | { |
312 | if(!gPieSelf) | 301 | if(!gPieSelf) |
313 | { | 302 | { |
@@ -333,15 +322,15 @@ BOOL LLToolPie::pickAndShowMenu(S32 x, S32 y, MASK mask, BOOL always_show) | |||
333 | 322 | ||
334 | // Object is an avatar, so check for mute by id. | 323 | // Object is an avatar, so check for mute by id. |
335 | LLVOAvatar* avatar = (LLVOAvatar*)object; | 324 | LLVOAvatar* avatar = (LLVOAvatar*)object; |
336 | LLString name = avatar->getFullname(); | 325 | std::string name = avatar->getFullname(); |
337 | if (LLMuteList::getInstance()->isMuted(avatar->getID(), name)) | 326 | if (LLMuteList::getInstance()->isMuted(avatar->getID(), name)) |
338 | { | 327 | { |
339 | gMenuHolder->childSetText("Avatar Mute", LLString("Unmute")); // *TODO:Translate | 328 | gMenuHolder->childSetText("Avatar Mute", std::string("Unmute")); // *TODO:Translate |
340 | //gMutePieMenu->setLabel("Unmute"); | 329 | //gMutePieMenu->setLabel("Unmute"); |
341 | } | 330 | } |
342 | else | 331 | else |
343 | { | 332 | { |
344 | gMenuHolder->childSetText("Avatar Mute", LLString("Mute")); // *TODO:Translate | 333 | gMenuHolder->childSetText("Avatar Mute", std::string("Mute")); // *TODO:Translate |
345 | //gMutePieMenu->setLabel("Mute"); | 334 | //gMutePieMenu->setLabel("Mute"); |
346 | } | 335 | } |
347 | 336 | ||
@@ -354,7 +343,7 @@ BOOL LLToolPie::pickAndShowMenu(S32 x, S32 y, MASK mask, BOOL always_show) | |||
354 | else | 343 | else |
355 | { | 344 | { |
356 | // BUG: What about chatting child objects? | 345 | // BUG: What about chatting child objects? |
357 | LLString name; | 346 | std::string name; |
358 | LLSelectNode* node = LLSelectMgr::getInstance()->getSelection()->getFirstRootNode(); | 347 | LLSelectNode* node = LLSelectMgr::getInstance()->getSelection()->getFirstRootNode(); |
359 | if (node) | 348 | if (node) |
360 | { | 349 | { |
@@ -362,12 +351,12 @@ BOOL LLToolPie::pickAndShowMenu(S32 x, S32 y, MASK mask, BOOL always_show) | |||
362 | } | 351 | } |
363 | if (LLMuteList::getInstance()->isMuted(object->getID(), name)) | 352 | if (LLMuteList::getInstance()->isMuted(object->getID(), name)) |
364 | { | 353 | { |
365 | gMenuHolder->childSetText("Object Mute", LLString("Unmute")); // *TODO:Translate | 354 | gMenuHolder->childSetText("Object Mute", std::string("Unmute")); // *TODO:Translate |
366 | //gMuteObjectPieMenu->setLabel("Unmute"); | 355 | //gMuteObjectPieMenu->setLabel("Unmute"); |
367 | } | 356 | } |
368 | else | 357 | else |
369 | { | 358 | { |
370 | gMenuHolder->childSetText("Object Mute", LLString("Mute")); // *TODO:Translate | 359 | gMenuHolder->childSetText("Object Mute", std::string("Mute")); // *TODO:Translate |
371 | //gMuteObjectPieMenu->setLabel("Mute"); | 360 | //gMuteObjectPieMenu->setLabel("Mute"); |
372 | } | 361 | } |
373 | 362 | ||
@@ -377,7 +366,7 @@ BOOL LLToolPie::pickAndShowMenu(S32 x, S32 y, MASK mask, BOOL always_show) | |||
377 | // Don't show when you click on someone else, it freaks them | 366 | // Don't show when you click on someone else, it freaks them |
378 | // out. | 367 | // out. |
379 | LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_SPHERE, TRUE); | 368 | LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_SPHERE, TRUE); |
380 | effectp->setPositionGlobal(gLastHitPosGlobal); | 369 | effectp->setPositionGlobal(mPick.mPosGlobal); |
381 | effectp->setColor(LLColor4U(gAgent.getEffectColor())); | 370 | effectp->setColor(LLColor4U(gAgent.getEffectColor())); |
382 | effectp->setDuration(0.25f); | 371 | effectp->setDuration(0.25f); |
383 | } | 372 | } |
@@ -479,8 +468,16 @@ ECursorType cursor_from_object(LLViewerObject* object) | |||
479 | return cursor; | 468 | return cursor; |
480 | } | 469 | } |
481 | 470 | ||
471 | void LLToolPie::resetSelection() | ||
472 | { | ||
473 | mLeftClickSelection = NULL; | ||
474 | mClickActionObject = NULL; | ||
475 | mClickAction = 0; | ||
476 | } | ||
477 | |||
482 | // When we get object properties after left-clicking on an object | 478 | // When we get object properties after left-clicking on an object |
483 | // with left-click = buy, if it's the same object, do the buy. | 479 | // with left-click = buy, if it's the same object, do the buy. |
480 | |||
484 | // static | 481 | // static |
485 | void LLToolPie::selectionPropertiesReceived() | 482 | void LLToolPie::selectionPropertiesReceived() |
486 | { | 483 | { |
@@ -491,14 +488,16 @@ void LLToolPie::selectionPropertiesReceived() | |||
491 | return; | 488 | return; |
492 | } | 489 | } |
493 | 490 | ||
494 | if (!sLeftClickSelection->isEmpty()) | 491 | LLObjectSelection* selection = LLToolPie::getInstance()->getLeftClickSelection(); |
492 | if (selection) | ||
495 | { | 493 | { |
496 | LLViewerObject* selected_object = sLeftClickSelection->getPrimaryObject(); | 494 | LLViewerObject* selected_object = selection->getPrimaryObject(); |
497 | // since we don't currently have a way to lock a selection, it could have changed | 495 | // since we don't currently have a way to lock a selection, it could have changed |
498 | // after we initially clicked on the object | 496 | // after we initially clicked on the object |
499 | if (selected_object == sClickActionObject) | 497 | if (selected_object == LLToolPie::getInstance()->getClickActionObject()) |
500 | { | 498 | { |
501 | switch (sClickAction) | 499 | U8 click_action = LLToolPie::getInstance()->getClickAction(); |
500 | switch (click_action) | ||
502 | { | 501 | { |
503 | case CLICK_ACTION_BUY: | 502 | case CLICK_ACTION_BUY: |
504 | handle_buy(NULL); | 503 | handle_buy(NULL); |
@@ -514,9 +513,7 @@ void LLToolPie::selectionPropertiesReceived() | |||
514 | } | 513 | } |
515 | } | 514 | } |
516 | } | 515 | } |
517 | sLeftClickSelection = NULL; | 516 | LLToolPie::getInstance()->resetSelection(); |
518 | sClickActionObject = NULL; | ||
519 | sClickAction = 0; | ||
520 | } | 517 | } |
521 | 518 | ||
522 | BOOL LLToolPie::handleHover(S32 x, S32 y, MASK mask) | 519 | BOOL LLToolPie::handleHover(S32 x, S32 y, MASK mask) |
@@ -544,7 +541,7 @@ BOOL LLToolPie::handleHover(S32 x, S32 y, MASK mask) | |||
544 | LLViewerObject *parent = NULL; | 541 | LLViewerObject *parent = NULL; |
545 | if (gHoverView) | 542 | if (gHoverView) |
546 | { | 543 | { |
547 | object = gHoverView->getLastHoverObject(); | 544 | object = gViewerWindow->getHoverPick().getObject(); |
548 | } | 545 | } |
549 | 546 | ||
550 | if (object) | 547 | if (object) |
@@ -581,7 +578,7 @@ BOOL LLToolPie::handleHover(S32 x, S32 y, MASK mask) | |||
581 | 578 | ||
582 | BOOL LLToolPie::handleMouseUp(S32 x, S32 y, MASK mask) | 579 | BOOL LLToolPie::handleMouseUp(S32 x, S32 y, MASK mask) |
583 | { | 580 | { |
584 | LLViewerObject* obj = gViewerWindow->lastObjectHit(); | 581 | LLViewerObject* obj = mPick.getObject(); |
585 | U8 click_action = final_click_action(obj); | 582 | U8 click_action = final_click_action(obj); |
586 | if (click_action != CLICK_ACTION_NONE) | 583 | if (click_action != CLICK_ACTION_NONE) |
587 | { | 584 | { |
@@ -626,18 +623,18 @@ BOOL LLToolPie::handleDoubleClick(S32 x, S32 y, MASK mask) | |||
626 | 623 | ||
627 | if (gSavedSettings.getBOOL("DoubleClickAutoPilot")) | 624 | if (gSavedSettings.getBOOL("DoubleClickAutoPilot")) |
628 | { | 625 | { |
629 | if (gLastHitLand | 626 | if (mPick.mPickType == LLPickInfo::PICK_LAND |
630 | && !gLastHitPosGlobal.isExactlyZero()) | 627 | && !mPick.mPosGlobal.isExactlyZero()) |
631 | { | 628 | { |
632 | handle_go_to(); | 629 | handle_go_to(); |
633 | return TRUE; | 630 | return TRUE; |
634 | } | 631 | } |
635 | else if (gLastHitObjectID.notNull() | 632 | else if (mPick.mObjectID.notNull() |
636 | && !gLastHitPosGlobal.isExactlyZero()) | 633 | && !mPick.mPosGlobal.isExactlyZero()) |
637 | { | 634 | { |
638 | // Hit an object | 635 | // Hit an object |
639 | // HACK: Call the last hit position the point we hit on the object | 636 | // HACK: Call the last hit position the point we hit on the object |
640 | gLastHitPosGlobal += gLastHitObjectOffset; | 637 | //gLastHitPosGlobal += gLastHitObjectOffset; |
641 | handle_go_to(); | 638 | handle_go_to(); |
642 | return TRUE; | 639 | return TRUE; |
643 | } | 640 | } |
@@ -649,7 +646,7 @@ BOOL LLToolPie::handleDoubleClick(S32 x, S32 y, MASK mask) | |||
649 | objects gets you into trouble. | 646 | objects gets you into trouble. |
650 | 647 | ||
651 | // If double-click on object or land, go there. | 648 | // If double-click on object or land, go there. |
652 | LLViewerObject *object = gViewerWindow->lastObjectHit(); | 649 | LLViewerObject *object = gViewerWindow->getLastPick().getObject(); |
653 | if (object) | 650 | if (object) |
654 | { | 651 | { |
655 | if (object->isAvatar()) | 652 | if (object->isAvatar()) |
@@ -756,10 +753,11 @@ static void handle_click_action_open_media(LLPointer<LLViewerObject> objectp) | |||
756 | if (objectp.isNull()) return; | 753 | if (objectp.isNull()) return; |
757 | 754 | ||
758 | // did we hit a valid face on the object? | 755 | // did we hit a valid face on the object? |
759 | if( gLastHitObjectFace < 0 || gLastHitObjectFace >= objectp->getNumTEs() ) return; | 756 | S32 face = LLToolPie::getInstance()->getPick().mObjectFace; |
757 | if( face < 0 || face >= objectp->getNumTEs() ) return; | ||
760 | 758 | ||
761 | // is media playing on this face? | 759 | // is media playing on this face? |
762 | if (!LLViewerMedia::isActiveMediaTexture(objectp->getTE(gLastHitObjectFace)->getID())) | 760 | if (!LLViewerMedia::isActiveMediaTexture(objectp->getTE(face)->getID())) |
763 | { | 761 | { |
764 | handle_click_action_play(); | 762 | handle_click_action_play(); |
765 | return; | 763 | return; |
@@ -767,7 +765,7 @@ static void handle_click_action_open_media(LLPointer<LLViewerObject> objectp) | |||
767 | 765 | ||
768 | std::string media_url = std::string ( parcel->getMediaURL () ); | 766 | std::string media_url = std::string ( parcel->getMediaURL () ); |
769 | std::string media_type = std::string ( parcel->getMediaType() ); | 767 | std::string media_type = std::string ( parcel->getMediaType() ); |
770 | LLString::trim(media_url); | 768 | LLStringUtil::trim(media_url); |
771 | 769 | ||
772 | // Get the scheme, see if that is handled as well. | 770 | // Get the scheme, see if that is handled as well. |
773 | LLURI uri(media_url); | 771 | LLURI uri(media_url); |
@@ -796,7 +794,7 @@ static ECursorType cursor_from_parcel_media(U8 click_action) | |||
796 | 794 | ||
797 | std::string media_url = std::string ( parcel->getMediaURL () ); | 795 | std::string media_url = std::string ( parcel->getMediaURL () ); |
798 | std::string media_type = std::string ( parcel->getMediaType() ); | 796 | std::string media_type = std::string ( parcel->getMediaType() ); |
799 | LLString::trim(media_url); | 797 | LLStringUtil::trim(media_url); |
800 | 798 | ||
801 | // Get the scheme, see if that is handled as well. | 799 | // Get the scheme, see if that is handled as well. |
802 | LLURI uri(media_url); | 800 | LLURI uri(media_url); |