hrev50191 adds 1 changeset to branch 'master'
old head: 15b4841a946824f364f249f68ddefa1d32ae2a9d
new head: f441a1e2cec24cabb799632ff3603b095b2e33b9
overview:
http://cgit.haiku-os.org/haiku/log/?qt=range&q=f441a1e2cec2+%5E15b4841a9468
----------------------------------------------------------------------------
f441a1e2cec2: BControllable: Fix real_time and perf_time mismatch
* It caused parameters to change with delay, because the
event has been enqueued in the event queue with real time.
* Please don't rely on system_time.
* Fixes #5106.
[ Dario Casalinuovo <b.vitruvio@xxxxxxxxx> ]
----------------------------------------------------------------------------
Revision: hrev50191
Commit: f441a1e2cec24cabb799632ff3603b095b2e33b9
URL: http://cgit.haiku-os.org/haiku/commit/?id=f441a1e2cec2
Author: Dario Casalinuovo <b.vitruvio@xxxxxxxxx>
Date: Thu Apr 7 13:57:45 2016 UTC
Ticket: https://dev.haiku-os.org/ticket/5106
----------------------------------------------------------------------------
2 files changed, 13 insertions(+), 3 deletions(-)
src/kits/media/Controllable.cpp | 12 +++++++++++-
src/kits/media/DefaultMediaTheme.cpp | 4 ++--
----------------------------------------------------------------------------
diff --git a/src/kits/media/Controllable.cpp b/src/kits/media/Controllable.cpp
index d2e505a..6c72224 100644
--- a/src/kits/media/Controllable.cpp
+++ b/src/kits/media/Controllable.cpp
@@ -39,6 +39,7 @@
#include <OS.h>
#include <ParameterWeb.h>
#include <Roster.h>
+#include <TimeSource.h>
#include <debug.h>
#include <DataExchange.h>
@@ -233,7 +234,16 @@ BControllable::HandleMessage(int32 message, const void*
data, size_t size)
return B_OK;
}
- SetParameterValue(request.parameter_id, request.when,
+ // NOTE: This is not very fair, but the alternative
+ // would have been to mess with friends classes and
+ // member variables.
+ bigtime_t perfTime = 0;
+ if (request.when == -1)
+ perfTime = TimeSource()->Now();
+ else
+ perfTime = request.when;
+
+ SetParameterValue(request.parameter_id, perfTime,
transfer.Data(), request.size);
request.SendReply(B_OK, &reply, sizeof(reply));
return B_OK;
diff --git a/src/kits/media/DefaultMediaTheme.cpp
b/src/kits/media/DefaultMediaTheme.cpp
index 529be6c..3994e63 100644
--- a/src/kits/media/DefaultMediaTheme.cpp
+++ b/src/kits/media/DefaultMediaTheme.cpp
@@ -650,7 +650,7 @@ ContinuousMessageFilter::Filter(BMessage *message, BHandler
**target)
"channels\n", fControl->Name(),
fParameter.CountChannels());
if (fParameter.SetValue((void *)value, sizeof(value),
- system_time()) < B_OK) {
+ -1) < B_OK) {
ERROR("ContinuousMessageFilter::Filter: Could not set
parameter "
"value for %p\n", &fParameter);
return B_DISPATCH_MESSAGE;
@@ -760,7 +760,7 @@ DiscreteMessageFilter::Filter(BMessage *message, BHandler
**target)
TRACE("DiscreteMessageFilter::Filter: update view %s, value = %ld\n",
control->Name(), value);
- if (fParameter.SetValue((void *)&value, sizeof(value), system_time()) <
B_OK) {
+ if (fParameter.SetValue((void *)&value, sizeof(value), -1) < B_OK) {
ERROR("DiscreteMessageFilter::Filter: Could not set parameter
value for %p\n", &fParameter);
return B_DISPATCH_MESSAGE;
}