event: Make removing feedbacks more self contained

If the feedback is in our list of feedbacks disconnect signals
and drop the reference we hold.

As we have removed the signal handler that would invoke `check_ended()`
we invoke this manually when the list becomes empty.
This commit is contained in:
Guido Günther
2024-06-21 19:57:29 +00:00
committed by Guido Günther
parent e7c370a589
commit 0a16ebe4af
+17 -1
View File
@@ -361,10 +361,26 @@ fbd_event_get_feedbacks (FbdEvent *self)
int
fbd_event_remove_feedback (FbdEvent *self, FbdFeedbackBase *feedback)
{
guint len;
g_return_val_if_fail (FBD_IS_EVENT (self), 0);
if (!self->feedbacks)
return 0;
if (g_slist_index (self->feedbacks, feedback) >= 0) {
g_signal_handlers_disconnect_by_data (feedback, self);
/* Drop our reference, feedbacks end themselves when unref'ed */
g_object_unref (feedback);
}
self->feedbacks = g_slist_remove (self->feedbacks, feedback);
return g_slist_length (self->feedbacks);
len = g_slist_length (self->feedbacks);
if (!len)
check_ended (self);
return len;
}
/**