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:
committed by
Guido Günther
parent
e7c370a589
commit
0a16ebe4af
+17
-1
@@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user