diff --git a/src/apps/mediaplayer/interface/PositionToolTip.cpp b/src/apps/mediaplayer/interface/PositionToolTip.cpp index f650c79996..397f583ab9 100644 --- a/src/apps/mediaplayer/interface/PositionToolTip.cpp +++ b/src/apps/mediaplayer/interface/PositionToolTip.cpp @@ -8,6 +8,7 @@ #include +#include #include #include "DurationToString.h" @@ -36,16 +37,15 @@ public: void Update(bigtime_t position, bigtime_t duration) { - if (!LockLooper()) + BAutolock locker(Looper()); + if (Looper() != NULL && !locker.IsLocked()) return; if (position != -1) { position /= 1000000L; duration /= 1000000L; - if (position == fPosition && duration == fDuration) { - UnlockLooper(); + if (position == fPosition && duration == fDuration) return; - } fPosition = position; fDuration = duration; @@ -60,8 +60,6 @@ public: char text[66]; snprintf(text, sizeof(text), "%s / %s", positionText, durationText); SetText(text); - - UnlockLooper(); } private: diff --git a/src/apps/mediaplayer/interface/SeekSlider.cpp b/src/apps/mediaplayer/interface/SeekSlider.cpp index 839bbdce90..567fa247ad 100644 --- a/src/apps/mediaplayer/interface/SeekSlider.cpp +++ b/src/apps/mediaplayer/interface/SeekSlider.cpp @@ -124,9 +124,9 @@ SeekSlider::MouseUp(BPoint where) void SeekSlider::MouseMoved(BPoint point, uint32 transit, const BMessage* dragMessage) { - if (!IsTracking()) { + if (fHoverMessage != NULL) { fHoverMessage->SetInt32("value", ValueForPoint(point)); - Invoke(fHoverMessage); + BControl::Invoke(fHoverMessage); } BSlider::MouseMoved(point, transit, dragMessage); } diff --git a/src/apps/mediaplayer/interface/TransportControlGroup.cpp b/src/apps/mediaplayer/interface/TransportControlGroup.cpp index 33ff523499..264a605443 100644 --- a/src/apps/mediaplayer/interface/TransportControlGroup.cpp +++ b/src/apps/mediaplayer/interface/TransportControlGroup.cpp @@ -88,6 +88,8 @@ TransportControlGroup::TransportControlGroup(BRect frame, bool useSkipButtons, fSeekLayout->AddView(fSeekSlider); fPositionToolTip = new PositionToolTip(); + fPositionToolTip->SetAlignment(BAlignment(B_ALIGN_CENTER, B_ALIGN_TOP)); + fPositionToolTip->SetMouseRelativeLocation(BPoint(0, 0)); fSeekSlider->SetToolTip(fPositionToolTip); // Duration view @@ -278,10 +280,11 @@ TransportControlGroup::MessageReceived(BMessage* message) case MSG_DURATION_TOOLTIP: { - BToolTipManager* manager = BToolTipManager::Manager(); BPoint tipPoint; - GetMouse(&tipPoint, NULL, false); - manager->ShowTip(fPositionToolTip, tipPoint, this); + fSeekSlider->GetMouse(&tipPoint, NULL, false); + tipPoint.y = 0; + fSeekSlider->ConvertToScreen(&tipPoint); + BToolTipManager::Manager()->ShowTip(fPositionToolTip, tipPoint, this); break; } @@ -291,6 +294,7 @@ TransportControlGroup::MessageReceived(BMessage* message) if (message->FindInt32("value", &value) == B_OK) { bigtime_t position = TimePositionFor(value / (float)kPositionFactor); fPositionToolTip->Update(position, fDurationView->TimeDuration()); + Looper()->PostMessage(MSG_DURATION_TOOLTIP, this); } break; } @@ -505,11 +509,8 @@ TransportControlGroup::SetPosition(float value, bigtime_t position, { fDurationView->Update(position, duration); - if (fSeekSlider->IsTracking()) { - fPositionToolTip->Update(position, duration); + if (fSeekSlider->IsTracking()) return; - } - fSeekSlider->SetPosition(value); }