summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/src/turns-turn-order.cpp41
1 files changed, 16 insertions, 25 deletions
diff --git a/lib/src/turns-turn-order.cpp b/lib/src/turns-turn-order.cpp
index 3d1b4eb..407ac3b 100644
--- a/lib/src/turns-turn-order.cpp
+++ b/lib/src/turns-turn-order.cpp
@@ -9,7 +9,6 @@
#include <array>
#include <bit>
#include <cstddef>
-#include <limits>
G_BEGIN_DECLS
@@ -17,8 +16,7 @@ struct _TurnsTurnOrder
{
GObject parent_instance;
- GList participants;
- gsize participant_count;
+ GSList * participants;
gboolean running;
};
@@ -35,21 +33,27 @@ namespace
{
enum struct property
{
- ParticipantCount = 1,
- Running,
+ Running = 1,
N_PROPERTIES,
};
auto static constinit properties = std::array<GParamSpec *, static_cast<std::size_t>(property::N_PROPERTIES)>{};
+ auto finalize(GObject * self)
+ {
+ auto instance = TURNS_TURN_ORDER(self);
+
+ g_slist_free_full(instance->participants, g_object_unref);
+
+ G_OBJECT_CLASS(turns_turn_order_parent_class)->finalize(self);
+ }
+
auto get_property(GObject * self, guint id, GValue * value, GParamSpec * specification) -> void
{
auto instance = TURNS_TURN_ORDER(self);
switch (static_cast<property>(id))
{
- case property::ParticipantCount:
- return g_value_set_uint64(value, turns_turn_order_get_participant_count(instance));
case property::Running:
return g_value_set_boolean(value, turns_turn_order_get_running(instance));
default:
@@ -65,17 +69,9 @@ static void turns_turn_order_class_init(TurnsTurnOrderClass * klass)
{
auto object_class = G_OBJECT_CLASS(klass);
+ object_class->finalize = finalize;
object_class->get_property = get_property;
- properties[static_cast<std::size_t>(property::ParticipantCount)] =
- g_param_spec_uint64("participant-count",
- "Participant Count",
- "The number of participants in this turn order.",
- 0,
- std::numeric_limits<gsize>::max(),
- 0,
- static_cast<GParamFlags>(G_PARAM_STATIC_STRINGS | G_PARAM_READABLE | G_PARAM_EXPLICIT_NOTIFY));
-
properties[static_cast<std::size_t>(property::Running)] =
g_param_spec_boolean("running",
"Running",
@@ -88,19 +84,14 @@ static void turns_turn_order_class_init(TurnsTurnOrderClass * klass)
static void turns_turn_order_init(TurnsTurnOrder * self)
{
- self->participants = {
- .data = nullptr,
- .next = nullptr,
- .prev = nullptr,
- };
- self->participant_count = 0;
+ self->participants = nullptr;
self->running = false;
}
static gpointer turns_turn_order_list_model_get_item(TurnsTurnOrder * self, guint position)
{
- g_return_val_if_fail(position < self->participant_count, nullptr);
- return g_list_nth_data(&self->participants, position);
+ g_return_val_if_fail(position < turns_turn_order_get_participant_count(self), nullptr);
+ return g_slist_nth_data(self->participants, position);
}
static guint turns_turn_order_list_model_get_n_items(TurnsTurnOrder * self)
@@ -129,7 +120,7 @@ TurnsTurnOrder * turns_turn_order_new()
gsize turns_turn_order_get_participant_count(TurnsTurnOrder const * self)
{
g_return_val_if_fail(TURNS_IS_TURN_ORDER(const_cast<TurnsTurnOrder *>(self)), 0);
- return self->participant_count;
+ return g_slist_length(self->participants);
}
gboolean turns_turn_order_get_running(TurnsTurnOrder const * self)