core/calendar: Add "parent-source" property

Tracks the parent ESource of this calendar. Will be useful for future
patches.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/610>
This commit is contained in:
Georges Basile Stavracas Neto
2025-07-02 18:04:26 +00:00
committed by Marge Bot
parent 6ab0ef7386
commit e9ec77f15b
3 changed files with 44 additions and 1 deletions
+36
View File
@@ -29,6 +29,7 @@ typedef struct
{ {
GdkRGBA color; GdkRGBA color;
ESource *source; ESource *source;
ESource *parent_source;
ECalClient *client; ECalClient *client;
gboolean read_only; gboolean read_only;
@@ -68,6 +69,7 @@ enum
PROP_COLOR, PROP_COLOR,
PROP_ID, PROP_ID,
PROP_NAME, PROP_NAME,
PROP_PARENT_SOURCE,
PROP_READ_ONLY, PROP_READ_ONLY,
PROP_SOURCE, PROP_SOURCE,
PROP_VISIBLE, PROP_VISIBLE,
@@ -345,6 +347,7 @@ gcal_calendar_finalize (GObject *object)
g_clear_object (&priv->client); g_clear_object (&priv->client);
g_clear_object (&priv->source); g_clear_object (&priv->source);
g_clear_object (&priv->parent_source);
g_mutex_clear (&priv->shared.mutex); g_mutex_clear (&priv->shared.mutex);
@@ -378,6 +381,10 @@ gcal_calendar_get_property (GObject *object,
g_value_set_string (value, e_source_get_display_name (priv->source)); g_value_set_string (value, e_source_get_display_name (priv->source));
break; break;
case PROP_PARENT_SOURCE:
g_value_set_object (value, priv->parent_source);
break;
case PROP_READ_ONLY: case PROP_READ_ONLY:
g_value_set_boolean (value, gcal_calendar_is_read_only (self)); g_value_set_boolean (value, gcal_calendar_is_read_only (self));
break; break;
@@ -422,6 +429,11 @@ gcal_calendar_set_property (GObject *object,
gcal_calendar_set_name (self, g_value_get_string (value)); gcal_calendar_set_name (self, g_value_get_string (value));
break; break;
case PROP_PARENT_SOURCE:
g_assert (priv->parent_source == NULL);
priv->parent_source = g_value_dup_object (value);
break;
case PROP_READ_ONLY: case PROP_READ_ONLY:
g_assert_not_reached (); g_assert_not_reached ();
break; break;
@@ -473,6 +485,10 @@ gcal_calendar_class_init (GcalCalendarClass *klass)
NULL, NULL,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY);
properties[PROP_PARENT_SOURCE] = g_param_spec_object ("parent-source", NULL, NULL,
E_TYPE_SOURCE,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY);
properties[PROP_READ_ONLY] = g_param_spec_boolean ("read-only", properties[PROP_READ_ONLY] = g_param_spec_boolean ("read-only",
"Read-only", "Read-only",
"Whether the calendar is read-only or not", "Whether the calendar is read-only or not",
@@ -516,6 +532,7 @@ gcal_calendar_init (GcalCalendar *self)
*/ */
void void
gcal_calendar_new (ESource *source, gcal_calendar_new (ESource *source,
ESource *parent_source,
GCancellable *cancellable, GCancellable *cancellable,
GAsyncReadyCallback callback, GAsyncReadyCallback callback,
gpointer user_data) gpointer user_data)
@@ -526,6 +543,7 @@ gcal_calendar_new (ESource *source,
callback, callback,
user_data, user_data,
"source", source, "source", source,
"parent-source", parent_source,
NULL); NULL);
} }
@@ -664,6 +682,24 @@ gcal_calendar_set_name (GcalCalendar *self,
g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_NAME]); g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_NAME]);
} }
/**
* gcal_calendar_get_parent_source:
* @self: a #GcalCalendar
*
* Retrieves the parent #ESource of @self.
*
* Returns: (transfer none): an #ESource
*/
ESource*
gcal_calendar_get_parent_source (GcalCalendar *self)
{
GcalCalendarPrivate *priv = gcal_calendar_get_instance_private (self);
g_return_val_if_fail (GCAL_IS_CALENDAR (self), NULL);
return priv->parent_source;
}
/** /**
* gcal_calendar_is_read_only: * gcal_calendar_is_read_only:
* @self: a #GcalCalendar * @self: a #GcalCalendar
+3
View File
@@ -50,6 +50,7 @@ struct _GcalCalendarClass
GQuark gcal_calendar_error_quark (void); GQuark gcal_calendar_error_quark (void);
void gcal_calendar_new (ESource *source, void gcal_calendar_new (ESource *source,
ESource *parent_source,
GCancellable *cancellable, GCancellable *cancellable,
GAsyncReadyCallback callback, GAsyncReadyCallback callback,
gpointer user_data); gpointer user_data);
@@ -71,6 +72,8 @@ const gchar* gcal_calendar_get_name (GcalCalendar
void gcal_calendar_set_name (GcalCalendar *self, void gcal_calendar_set_name (GcalCalendar *self,
const gchar *name); const gchar *name);
ESource* gcal_calendar_get_parent_source (GcalCalendar *self);
gboolean gcal_calendar_is_read_only (GcalCalendar *self); gboolean gcal_calendar_is_read_only (GcalCalendar *self);
ESource* gcal_calendar_get_source (GcalCalendar *self); ESource* gcal_calendar_get_source (GcalCalendar *self);
+5 -1
View File
@@ -296,6 +296,8 @@ static void
load_source (GcalManager *self, load_source (GcalManager *self,
ESource *source) ESource *source)
{ {
g_autoptr (ESource) parent = NULL;
GCAL_ENTRY; GCAL_ENTRY;
if (g_hash_table_contains (self->clients, source)) if (g_hash_table_contains (self->clients, source))
@@ -306,7 +308,9 @@ load_source (GcalManager *self,
return; return;
} }
gcal_calendar_new (source, self->async_ops, on_calendar_created_cb, self); parent = e_source_registry_ref_source (self->source_registry, e_source_get_parent (source));
gcal_calendar_new (source, parent, self->async_ops, on_calendar_created_cb, self);
GCAL_EXIT; GCAL_EXIT;
} }