diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp index 11c1fcb1ea55742965dae290461b6e64a402f7c3..69650425cb437228f7dab228986e2114a56cf36a 100644 --- a/indra/newview/llviewermedia.cpp +++ b/indra/newview/llviewermedia.cpp @@ -459,12 +459,12 @@ LLViewerMedia::impl_list &LLViewerMedia::getPriorityList() // This is the predicate function used to sort sViewerMediaImplList by priority. bool LLViewerMedia::priorityComparitor(const LLViewerMediaImpl* i1, const LLViewerMediaImpl* i2) { - if(i1->isForcedUnloaded()) + if(i1->isForcedUnloaded() && !i2->isForcedUnloaded()) { // Muted or failed items always go to the end of the list, period. return false; } - else if(i2->isForcedUnloaded()) + else if(i2->isForcedUnloaded() && !i1->isForcedUnloaded()) { // Muted or failed items always go to the end of the list, period. return true; @@ -489,6 +489,16 @@ bool LLViewerMedia::priorityComparitor(const LLViewerMediaImpl* i1, const LLView // i2 is a UI element, i1 is not. This makes i2 "less than" i1, so it sorts earlier in our list. return false; } + else if(i1->isParcelMedia()) + { + // The parcel media impl sorts above all other inworld media, unless one has focus. + return true; + } + else if(i2->isParcelMedia()) + { + // The parcel media impl sorts above all other inworld media, unless one has focus. + return false; + } else { // The object with the larger interest value should be earlier in the list, so we reverse the sense of the comparison here. @@ -686,6 +696,7 @@ LLViewerMediaImpl::LLViewerMediaImpl( const LLUUID& texture_id, mPreviousMediaState(MEDIA_NONE), mPreviousMediaTime(0.0f), mIsDisabled(false), + mIsParcelMedia(false), mProximity(-1), mIsUpdated(false) { diff --git a/indra/newview/llviewermedia.h b/indra/newview/llviewermedia.h index 7cbfb56ffcc4d21792572939c38f5f2bc10bce43..3f5f3ca746c1a0979f2a961f66c775237505ab97 100644 --- a/indra/newview/llviewermedia.h +++ b/indra/newview/llviewermedia.h @@ -191,14 +191,17 @@ class LLViewerMediaImpl bool isMediaPlaying(); bool isMediaPaused(); bool hasMedia(); - bool isMediaFailed() { return mMediaSourceFailed; }; + bool isMediaFailed() const { return mMediaSourceFailed; }; void resetPreviousMediaState(); void setDisabled(bool disabled) { mIsDisabled = disabled; }; - bool isMediaDisabled() { return mIsDisabled; }; + bool isMediaDisabled() const { return mIsDisabled; }; // returns true if this instance should not be loaded (disabled, muted object, crashed, etc.) bool isForcedUnloaded() const; + + void setIsParcelMedia(bool is_parcel_media) { mIsParcelMedia = is_parcel_media; }; + bool isParcelMedia() const { return mIsParcelMedia; }; ECursorType getLastSetCursor() { return mLastSetCursor; }; @@ -326,6 +329,7 @@ class LLViewerMediaImpl int mPreviousMediaState; F64 mPreviousMediaTime; bool mIsDisabled; + bool mIsParcelMedia; S32 mProximity; private: diff --git a/indra/newview/llviewerparcelmedia.cpp b/indra/newview/llviewerparcelmedia.cpp index 6233a337a663ff8b2b7971fce0705e3379e01af4..336d7f684e6f9731a7bf2ad06b7cfbb7738ad24f 100644 --- a/indra/newview/llviewerparcelmedia.cpp +++ b/indra/newview/llviewerparcelmedia.cpp @@ -226,6 +226,7 @@ void LLViewerParcelMedia::play(LLParcel* parcel) media_height, media_auto_scale, media_loop); + sMediaImpl->setIsParcelMedia(true); sMediaImpl->navigateTo(media_url, mime_type, true); } } @@ -240,6 +241,7 @@ void LLViewerParcelMedia::play(LLParcel* parcel) media_height, media_auto_scale, media_loop); + sMediaImpl->setIsParcelMedia(true); sMediaImpl->navigateTo(media_url, mime_type, true); }