diff options
Diffstat (limited to 'lib/src/turns-turn-order.c')
| -rw-r--r-- | lib/src/turns-turn-order.c | 39 |
1 files changed, 38 insertions, 1 deletions
diff --git a/lib/src/turns-turn-order.c b/lib/src/turns-turn-order.c index 071e4c5..5d6f99b 100644 --- a/lib/src/turns-turn-order.c +++ b/lib/src/turns-turn-order.c @@ -73,6 +73,27 @@ static void sort_participants(TurnsTurnOrder * self) g_list_model_items_changed(G_LIST_MODEL(self), 0, participant_count, participant_count); } +static void clear_participants(TurnsTurnOrder * self) +{ + g_return_if_fail(TURNS_IS_TURN_ORDER(self)); + + g_slist_free_full(self->participants, g_object_unref); + self->participants = nullptr; +} + +static void set_running(TurnsTurnOrder * self, gboolean value) +{ + g_return_if_fail(TURNS_IS_TURN_ORDER(self)); + + if (self->running == value) + { + return; + } + + self->running = value; + g_object_notify_by_pspec(G_OBJECT(self), properties[PROP_RUNNING]); +} + static void handle_participant_property_changed(TurnsParticipant const *, GParamSpec *, TurnsTurnOrder * self) { sort_participants(self); @@ -120,7 +141,7 @@ static void turns_turn_order_finalize(GObject * self) { auto instance = TURNS_TURN_ORDER(self); - g_slist_free_full(instance->participants, g_object_unref); + clear_participants(instance); G_OBJECT_CLASS(turns_turn_order_parent_class)->finalize(self); } @@ -193,6 +214,22 @@ void turns_turn_order_add(TurnsTurnOrder * self, TurnsParticipant * participant) g_list_model_items_changed(G_LIST_MODEL(self), position, 0, 1); } +void turns_turn_order_clear(TurnsTurnOrder * self) +{ + g_return_if_fail(TURNS_IS_TURN_ORDER(self)); + + auto old_size = turns_turn_order_get_participant_count(self); + clear_participants(self); + + g_object_freeze_notify(G_OBJECT(self)); + + set_running(self, false); + + g_object_thaw_notify(G_OBJECT(self)); + + g_list_model_items_changed(G_LIST_MODEL(self), 0, old_size, 0); +} + gsize turns_turn_order_get_participant_count(TurnsTurnOrder const * self) { g_return_val_if_fail(TURNS_IS_TURN_ORDER((TurnsTurnOrder *)self), 0); |
