From 55826f7ba4afe59ebd1005ceb1194a8830fb1dd6 Mon Sep 17 00:00:00 2001 From: Mark Wooding Date: Thu, 20 May 2021 20:24:30 +0100 Subject: [PATCH] disobedience/control.c: Force internal event when buttons are frobbed. This fixes a bug leftover from fe0a1c48c648f683b3691132fb2b12b01d1ace32. The obvious symptom is that the currently-playing track's progress indication goes screwy when you use the pause button in the same DisObedience instance. (Other DisObediences work correctly, and all of them work fine if you use some other mechanism to frob the pause status.) The bug is caused because the preemptive state update introduced in the previous fix suppresses the internal event which used to raised once the server acknowledged the state change. Fix this by explicitly raising the relevant event. --- disobedience/control.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/disobedience/control.c b/disobedience/control.c index 9153f33..ab41d15 100644 --- a/disobedience/control.c +++ b/disobedience/control.c @@ -133,6 +133,9 @@ struct icon { /** @brief Events that change this icon, separated by spaces */ const char *events; + /** @brief Event to raise when the icon is frobbed */ + const char *raise; + /** @brief @ref eclient.h function to call to go from off to on * * For action buttons, this should be NULL. @@ -227,6 +230,7 @@ static struct icon icons[] = { .action_go_on = pause_track, .action_go_off = resume_track, .events = "pause-changed playing-changed rights-changed playing-track-changed", + .raise = "pause-changed", .menu_invert = TRUE, }, { @@ -252,6 +256,7 @@ static struct icon icons[] = { .action_go_on = enable_random, .action_go_off = disable_random, .events = "random-changed rights-changed", + .raise = "random-changed", }, { .toggle = TRUE, @@ -265,6 +270,7 @@ static struct icon icons[] = { .action_go_on = enable_playing, .action_go_off = disable_playing, .events = "enabled-changed rights-changed", + .raise = "playing-changed", }, { .toggle = TRUE, @@ -475,6 +481,8 @@ static void clicked_icon(GtkToolButton attribute((unused)) *button, if(suppress_actions) return; icon->action_go_off(client, icon_action_completed, 0); + if(icon->raise) + event_raise(icon->raise, 0); } static void toggled_icon(GtkToggleToolButton attribute((unused)) *button, @@ -489,6 +497,8 @@ static void toggled_icon(GtkToggleToolButton attribute((unused)) *button, else icon->action_go_on(client, icon_action_completed, 0); icon_changed(0, 0, user_data); + if(icon->raise) + event_raise(icon->raise, 0); } static void clicked_menu(GtkMenuItem attribute((unused)) *menuitem, -- 2.11.0