manager: Replace gcal_manager_get_sources()
With a GcalCalendar-based function.
This commit is contained in:
+13
-10
@@ -101,31 +101,34 @@ process_sources (GcalApplication *self)
|
||||
g_autofree gchar *new_css_data = NULL;
|
||||
g_auto (GStrv) new_css_snippets = NULL;
|
||||
GcalManager *manager;
|
||||
GList *sources, *l;
|
||||
ESource *source;
|
||||
GList *calendars, *l;
|
||||
GQuark color_id;
|
||||
GdkRGBA color;
|
||||
gint arr_length;
|
||||
gint i = 0;
|
||||
|
||||
manager = gcal_context_get_manager (self->context);
|
||||
sources = gcal_manager_get_sources_connected (manager);
|
||||
arr_length = g_list_length (sources);
|
||||
calendars = gcal_manager_get_calendars (manager);
|
||||
arr_length = g_list_length (calendars);
|
||||
new_css_snippets = g_new0 (gchar*, arr_length + 2);
|
||||
for (l = sources; l != NULL; l = g_list_next (l), i++)
|
||||
for (l = calendars; l; l = l->next, i++)
|
||||
{
|
||||
g_autofree gchar* color_str = NULL;
|
||||
const GdkRGBA *color;
|
||||
GcalCalendar *calendar;
|
||||
|
||||
source = l->data;
|
||||
calendar = l->data;
|
||||
|
||||
get_color_name_from_source (source, &color);
|
||||
color_str = gdk_rgba_to_string (&color);
|
||||
if (!gcal_calendar_get_visible (calendar))
|
||||
continue;
|
||||
|
||||
color = gcal_calendar_get_color (calendar);
|
||||
color_str = gdk_rgba_to_string (color);
|
||||
color_id = g_quark_from_string (color_str);
|
||||
|
||||
new_css_snippets[i] = g_strdup_printf (CSS_TEMPLATE, color_id, color_str);
|
||||
}
|
||||
|
||||
g_list_free (sources);
|
||||
g_list_free (calendars);
|
||||
|
||||
new_css_data = g_strjoinv ("\n", new_css_snippets);
|
||||
|
||||
|
||||
+32
-36
@@ -161,58 +161,59 @@ static gint
|
||||
sources_menu_sort_func (gconstpointer a,
|
||||
gconstpointer b)
|
||||
{
|
||||
ESource *source1, *source2;
|
||||
GcalCalendar *calendar1, *calendar2;
|
||||
|
||||
source1 = E_SOURCE (a);
|
||||
source2 = E_SOURCE (b);
|
||||
calendar1 = GCAL_CALENDAR ((gpointer) a);
|
||||
calendar2 = GCAL_CALENDAR ((gpointer) b);
|
||||
|
||||
return g_ascii_strcasecmp (e_source_get_display_name (source1), e_source_get_display_name (source2));
|
||||
return g_ascii_strcasecmp (gcal_calendar_get_name (calendar1),
|
||||
gcal_calendar_get_name (calendar2));
|
||||
}
|
||||
|
||||
static void
|
||||
fill_sources_menu (GcalEditDialog *self)
|
||||
{
|
||||
g_autoptr (GList) list = NULL;
|
||||
GcalManager *manager;
|
||||
GList *list;
|
||||
GList *aux;
|
||||
|
||||
if (self->context == NULL)
|
||||
return;
|
||||
|
||||
manager = gcal_context_get_manager (self->context);
|
||||
list = gcal_manager_get_sources (manager);
|
||||
list = gcal_manager_get_calendars (manager);
|
||||
self->sources_menu = g_menu_new ();
|
||||
|
||||
list = g_list_sort (list, sources_menu_sort_func);
|
||||
|
||||
for (aux = list; aux != NULL; aux = aux->next)
|
||||
{
|
||||
ESource *source;
|
||||
GcalCalendar *calendar;
|
||||
const GdkRGBA *color;
|
||||
GMenuItem *item;
|
||||
GdkRGBA color;
|
||||
cairo_surface_t *surface;
|
||||
GdkPixbuf *pix;
|
||||
|
||||
source = E_SOURCE (aux->data);
|
||||
calendar = GCAL_CALENDAR (aux->data);
|
||||
|
||||
/* retrieve color */
|
||||
get_color_name_from_source (source, &color);
|
||||
surface = get_circle_surface_from_color (&color, 16);
|
||||
color = gcal_calendar_get_color (calendar);
|
||||
surface = get_circle_surface_from_color (color, 16);
|
||||
pix = gdk_pixbuf_get_from_surface (surface, 0, 0, 16, 16);
|
||||
|
||||
/* menu item */
|
||||
item = g_menu_item_new (e_source_get_display_name (source), "select-calendar");
|
||||
item = g_menu_item_new (gcal_calendar_get_name (calendar), "select-calendar");
|
||||
g_menu_item_set_icon (item, G_ICON (pix));
|
||||
|
||||
/* set insensitive for read-only calendars */
|
||||
if (!gcal_manager_is_client_writable (manager, source))
|
||||
if (gcal_calendar_is_read_only (calendar))
|
||||
{
|
||||
g_menu_item_set_action_and_target_value (item, "select-calendar", NULL);
|
||||
}
|
||||
else
|
||||
{
|
||||
g_menu_item_set_action_and_target_value (item, "select-calendar",
|
||||
g_variant_new_string (e_source_get_uid (source)));
|
||||
const gchar *id = gcal_calendar_get_id (calendar);
|
||||
g_menu_item_set_action_and_target_value (item, "select-calendar", g_variant_new_string (id));
|
||||
}
|
||||
|
||||
g_menu_append_item (self->sources_menu, item);
|
||||
@@ -226,8 +227,6 @@ fill_sources_menu (GcalEditDialog *self)
|
||||
|
||||
/* HACK: show the popover menu icons */
|
||||
fix_popover_menu_icons (GTK_POPOVER (self->sources_popover));
|
||||
|
||||
g_list_free (list);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -629,9 +628,9 @@ on_calendar_selected_action_cb (GSimpleAction *action,
|
||||
GVariant *value,
|
||||
gpointer user_data)
|
||||
{
|
||||
g_autoptr (GList) list = NULL;
|
||||
GcalEditDialog *self;
|
||||
GcalManager *manager;
|
||||
GList *list;
|
||||
GList *aux;
|
||||
gchar *uid;
|
||||
|
||||
@@ -639,7 +638,7 @@ on_calendar_selected_action_cb (GSimpleAction *action,
|
||||
|
||||
self = GCAL_EDIT_DIALOG (user_data);
|
||||
manager = gcal_context_get_manager (self->context);
|
||||
list = gcal_manager_get_sources (manager);
|
||||
list = gcal_manager_get_calendars (manager);
|
||||
|
||||
/* retrieve selected calendar uid */
|
||||
g_variant_get (value, "s", &uid);
|
||||
@@ -647,31 +646,28 @@ on_calendar_selected_action_cb (GSimpleAction *action,
|
||||
/* search for any source with the given UID */
|
||||
for (aux = list; aux != NULL; aux = aux->next)
|
||||
{
|
||||
ESource *source;
|
||||
source = E_SOURCE (aux->data);
|
||||
GcalCalendar *calendar = GCAL_CALENDAR (aux->data);
|
||||
|
||||
if (g_strcmp0 (e_source_get_uid (source), uid) == 0)
|
||||
{
|
||||
GdkRGBA color;
|
||||
cairo_surface_t *surface;
|
||||
if (g_strcmp0 (gcal_calendar_get_id (calendar), uid) == 0)
|
||||
{
|
||||
cairo_surface_t *surface;
|
||||
const GdkRGBA *color;
|
||||
|
||||
/* retrieve color */
|
||||
get_color_name_from_source (source, &color);
|
||||
/* retrieve color */
|
||||
color = gcal_calendar_get_color (calendar);
|
||||
surface = get_circle_surface_from_color (color, 16);
|
||||
gtk_image_set_from_surface (GTK_IMAGE (self->source_image), surface);
|
||||
|
||||
surface = get_circle_surface_from_color (&color, 16);
|
||||
gtk_image_set_from_surface (GTK_IMAGE (self->source_image), surface);
|
||||
self->selected_source = gcal_calendar_get_source (calendar);
|
||||
|
||||
self->selected_source = source;
|
||||
gtk_label_set_label (GTK_LABEL (self->subtitle_label), gcal_calendar_get_name (calendar));
|
||||
|
||||
gtk_label_set_label (GTK_LABEL (self->subtitle_label), e_source_get_display_name (source));
|
||||
|
||||
g_clear_pointer (&surface, cairo_surface_destroy);
|
||||
break;
|
||||
}
|
||||
g_clear_pointer (&surface, cairo_surface_destroy);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
g_free (uid);
|
||||
g_list_free (list);
|
||||
|
||||
GCAL_EXIT;
|
||||
}
|
||||
|
||||
+2
-43
@@ -773,53 +773,12 @@ gcal_manager_get_source (GcalManager *self,
|
||||
return e_source_registry_ref_source (self->source_registry, uid);
|
||||
}
|
||||
|
||||
/**
|
||||
* gcal_manager_get_sources:
|
||||
* @self: a #GcalManager
|
||||
*
|
||||
* Retrieve a list of the enabled sources used in the application.
|
||||
*
|
||||
* Returns: (nullable)(transfer container)(content-type ESource): a #GList
|
||||
*/
|
||||
GList*
|
||||
gcal_manager_get_sources (GcalManager *self)
|
||||
{
|
||||
GHashTableIter iter;
|
||||
gpointer key, value;
|
||||
GList *aux = NULL;
|
||||
|
||||
GCAL_ENTRY;
|
||||
|
||||
g_return_val_if_fail (GCAL_IS_MANAGER (self), NULL);
|
||||
|
||||
g_hash_table_iter_init (&iter, self->clients);
|
||||
|
||||
while (g_hash_table_iter_next (&iter, &key, &value))
|
||||
{
|
||||
if (!is_source_enabled (key))
|
||||
continue;
|
||||
|
||||
aux = g_list_append (aux, key);
|
||||
}
|
||||
|
||||
GCAL_RETURN (aux);
|
||||
}
|
||||
|
||||
/**
|
||||
* gcal_manager_get_sources_connected:
|
||||
* @self: a #GcalManager
|
||||
*
|
||||
* Returns a #GList with every source connected on the app,
|
||||
* whether they are enabled or not.
|
||||
*
|
||||
* Returns: (nullable)(transfer container)(content-type ESource): a #GList
|
||||
*/
|
||||
GList*
|
||||
gcal_manager_get_sources_connected (GcalManager *self)
|
||||
gcal_manager_get_calendars (GcalManager *self)
|
||||
{
|
||||
g_return_val_if_fail (GCAL_IS_MANAGER (self), NULL);
|
||||
|
||||
return g_hash_table_get_keys (self->clients);
|
||||
return g_hash_table_get_values (self->clients);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
+1
-3
@@ -35,9 +35,7 @@ GcalManager* gcal_manager_new (void);
|
||||
ESource* gcal_manager_get_source (GcalManager *self,
|
||||
const gchar *uid);
|
||||
|
||||
GList* gcal_manager_get_sources (GcalManager *self);
|
||||
|
||||
GList* gcal_manager_get_sources_connected (GcalManager *self);
|
||||
GList* gcal_manager_get_calendars (GcalManager *self);
|
||||
|
||||
ESource* gcal_manager_get_default_source (GcalManager *self);
|
||||
|
||||
|
||||
@@ -788,17 +788,24 @@ gcal_quick_add_popover_set_property (GObject *object,
|
||||
case PROP_CONTEXT:
|
||||
if (g_set_object (&self->context, g_value_get_object (value)))
|
||||
{
|
||||
g_autoptr (GList) calendars = NULL;
|
||||
GcalManager *manager;
|
||||
GList *sources, *l;
|
||||
GList *l;
|
||||
|
||||
/* Add currently loaded sources */
|
||||
manager = gcal_context_get_manager (self->context);
|
||||
sources = gcal_manager_get_sources_connected (manager);
|
||||
calendars = gcal_manager_get_calendars (manager);
|
||||
|
||||
for (l = sources; l != NULL; l = g_list_next (l))
|
||||
on_source_added (manager, l->data, gcal_manager_is_client_writable (manager, l->data), self);
|
||||
for (l = calendars; l; l = l->next)
|
||||
{
|
||||
GcalCalendar *calendar = l->data;
|
||||
on_source_added (manager,
|
||||
gcal_calendar_get_source (calendar),
|
||||
gcal_calendar_get_visible (calendar),
|
||||
self);
|
||||
}
|
||||
|
||||
g_list_free (sources);
|
||||
g_list_free (calendars);
|
||||
|
||||
/* Connect to the manager signals and keep the list updates */
|
||||
g_signal_connect (manager, "source-added", G_CALLBACK (on_source_added), self);
|
||||
|
||||
+11
-6
@@ -1192,14 +1192,19 @@ gcal_window_set_property (GObject *object,
|
||||
|
||||
if (!gcal_manager_get_loading (manager))
|
||||
{
|
||||
GList *sources, *l;
|
||||
g_autoptr (GList) calendars = NULL;
|
||||
GList *l;
|
||||
|
||||
sources = gcal_manager_get_sources_connected (manager);
|
||||
calendars = gcal_manager_get_calendars (manager);
|
||||
|
||||
for (l = sources; l != NULL; l = g_list_next (l))
|
||||
add_source (manager, l->data, is_source_enabled (l->data), self);
|
||||
|
||||
g_list_free (sources);
|
||||
for (l = calendars; l; l = l->next)
|
||||
{
|
||||
GcalCalendar *calendar = l->data;
|
||||
add_source (manager,
|
||||
gcal_calendar_get_source (calendar),
|
||||
gcal_calendar_get_visible (calendar),
|
||||
self);
|
||||
}
|
||||
}
|
||||
|
||||
g_signal_connect (manager, "source-added", G_CALLBACK (add_source), object);
|
||||
|
||||
Reference in New Issue
Block a user