summaryrefslogtreecommitdiff
path: root/lib/src/turns-turn-order.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/src/turns-turn-order.c')
-rw-r--r--lib/src/turns-turn-order.c39
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);