@@ -162,8 +162,7 @@ Mpris::Mpris(const std::string& id, const Json::Value& config)
162162 if (player) {
163163 g_object_connect (player, " signal::play" , G_CALLBACK (onPlayerPlay), this , " signal::pause" ,
164164 G_CALLBACK (onPlayerPause), this , " signal::stop" , G_CALLBACK (onPlayerStop),
165- this , " signal::stop" , G_CALLBACK (onPlayerStop), this , " signal::metadata" ,
166- G_CALLBACK (onPlayerMetadata), this , NULL );
165+ this , " signal::metadata" , G_CALLBACK (onPlayerMetadata), this , NULL );
167166 }
168167
169168 // allow setting an interval count that triggers periodic refreshes
@@ -179,9 +178,17 @@ Mpris::Mpris(const std::string& id, const Json::Value& config)
179178}
180179
181180Mpris::~Mpris () {
182- if (last_active_player_ && last_active_player_ != player) g_object_unref (last_active_player_);
183- if (manager != nullptr ) g_object_unref (manager);
184- if (player != nullptr ) g_object_unref (player);
181+ if (manager != nullptr ) {
182+ g_signal_handlers_disconnect_by_data (manager, this );
183+ }
184+ if (player != nullptr ) {
185+ g_signal_handlers_disconnect_by_data (player, this );
186+ }
187+ if (last_active_player_ != nullptr && last_active_player_ != player) {
188+ g_object_unref (last_active_player_);
189+ }
190+ g_clear_object (&manager);
191+ g_clear_object (&player);
185192}
186193
187194auto Mpris::getIconFromJson (const Json::Value& icons, const std::string& key) -> std::string {
@@ -412,11 +419,14 @@ auto Mpris::onPlayerNameAppeared(PlayerctlPlayerManager* manager, PlayerctlPlaye
412419 return ;
413420 }
414421
422+ if (mpris->player != nullptr ) {
423+ g_signal_handlers_disconnect_by_data (mpris->player , mpris);
424+ g_clear_object (&mpris->player );
425+ }
415426 mpris->player = playerctl_player_new_from_name (player_name, nullptr );
416427 g_object_connect (mpris->player , " signal::play" , G_CALLBACK (onPlayerPlay), mpris, " signal::pause" ,
417428 G_CALLBACK (onPlayerPause), mpris, " signal::stop" , G_CALLBACK (onPlayerStop),
418- mpris, " signal::stop" , G_CALLBACK (onPlayerStop), mpris, " signal::metadata" ,
419- G_CALLBACK (onPlayerMetadata), mpris, NULL );
429+ mpris, " signal::metadata" , G_CALLBACK (onPlayerMetadata), mpris, NULL );
420430
421431 mpris->dp .emit ();
422432}
0 commit comments