aboutsummaryrefslogtreecommitdiffhomepage
path: root/player/client.c
diff options
context:
space:
mode:
authorGravatar James Ross-Gowan <rossymiles@gmail.com>2016-09-11 21:14:07 +1000
committerGravatar James Ross-Gowan <rossymiles@gmail.com>2016-09-11 23:58:23 +1000
commit6ac0ef78c52e5c01720bddcb83ea46d52c7443bf (patch)
tree4fcd3bfb8fe3c46889796e06ad1d83c0fa29b897 /player/client.c
parent3f7e43c2e2658eb8a1a22cc4e7359392ec70dc3b (diff)
client API: don't miss property changes after updates
When update_prop() successfully fetches a changed property value, it sets prop->changed to true. mark_property_changed() only sets prop->need_new_value if prop->changed is false, so this had the effect of ignoring new property values until prop->changed was set back to false in the next call to gen_property_change_event(). This meant that when a property change event was generated for a property that was not observed with MPV_FORMAT_NONE, it would contain the value associated with the earliest property change, rather than the most recent, and the property change event for the most recent change would never be generated. To fix this, mark_property_changed() should unconditionally set prop->changed and prop->need_new_value, which will cause the property value to be re-fetched and a property change event to be generated for the most recent value.
Diffstat (limited to 'player/client.c')
-rw-r--r--player/client.c8
1 files changed, 3 insertions, 5 deletions
diff --git a/player/client.c b/player/client.c
index 7587b8bbae..803ef36fca 100644
--- a/player/client.c
+++ b/player/client.c
@@ -1373,11 +1373,9 @@ int mpv_unobserve_property(mpv_handle *ctx, uint64_t userdata)
static void mark_property_changed(struct mpv_handle *client, int index)
{
struct observe_property *prop = client->properties[index];
- if (!prop->changed && !prop->need_new_value) {
- prop->changed = true;
- prop->need_new_value = prop->format != 0;
- client->lowest_changed = MPMIN(client->lowest_changed, index);
- }
+ prop->changed = true;
+ prop->need_new_value = prop->format != 0;
+ client->lowest_changed = MPMIN(client->lowest_changed, index);
}
// Broadcast that a property has changed.