manager: Rework signals to use GcalCalendar
This commit is contained in:
@@ -616,8 +616,8 @@ gcal_application_init (GcalApplication *self)
|
||||
self->context = gcal_context_new ();
|
||||
|
||||
manager = gcal_context_get_manager (self->context);
|
||||
g_signal_connect_swapped (manager, "source-added", G_CALLBACK (process_sources), self);
|
||||
g_signal_connect_swapped (manager, "source-changed", G_CALLBACK (process_sources), self);
|
||||
g_signal_connect_swapped (manager, "calendar-added", G_CALLBACK (process_sources), self);
|
||||
g_signal_connect_swapped (manager, "calendar-changed", G_CALLBACK (process_sources), self);
|
||||
|
||||
self->search_provider = gcal_shell_search_provider_new (self->context);
|
||||
}
|
||||
|
||||
+31
-41
@@ -103,10 +103,9 @@ enum
|
||||
|
||||
enum
|
||||
{
|
||||
SOURCE_ADDED,
|
||||
SOURCE_CHANGED,
|
||||
SOURCE_REMOVED,
|
||||
SOURCE_ENABLED,
|
||||
CALENDAR_ADDED,
|
||||
CALENDAR_CHANGED,
|
||||
CALENDAR_REMOVED,
|
||||
QUERY_COMPLETED,
|
||||
NUM_SIGNALS
|
||||
};
|
||||
@@ -155,16 +154,20 @@ static void
|
||||
remove_source (GcalManager *self,
|
||||
ESource *source)
|
||||
{
|
||||
GcalCalendar *calendar;
|
||||
|
||||
GCAL_ENTRY;
|
||||
|
||||
g_return_if_fail (GCAL_IS_MANAGER (self));
|
||||
g_return_if_fail (E_IS_SOURCE (source));
|
||||
|
||||
calendar = g_hash_table_lookup (self->clients, source);
|
||||
|
||||
e_cal_data_model_remove_client (self->e_data_model,
|
||||
e_source_get_uid (source));
|
||||
|
||||
g_hash_table_remove (self->clients, source);
|
||||
g_signal_emit (self, signals[SOURCE_REMOVED], 0, source);
|
||||
g_signal_emit (self, signals[CALENDAR_REMOVED], 0, calendar);
|
||||
|
||||
GCAL_EXIT;
|
||||
}
|
||||
@@ -173,13 +176,14 @@ static void
|
||||
source_changed (GcalManager *self,
|
||||
ESource *source)
|
||||
{
|
||||
GcalCalendar *calendar;
|
||||
|
||||
GCAL_ENTRY;
|
||||
|
||||
if (g_hash_table_lookup (self->clients, source) != NULL &&
|
||||
e_source_has_extension (source, E_SOURCE_EXTENSION_CALENDAR))
|
||||
{
|
||||
g_signal_emit (self, signals[SOURCE_CHANGED], 0, source);
|
||||
}
|
||||
calendar = g_hash_table_lookup (self->clients, source);
|
||||
|
||||
if (calendar)
|
||||
g_signal_emit (self, signals[CALENDAR_CHANGED], 0, calendar);
|
||||
|
||||
GCAL_EXIT;
|
||||
}
|
||||
@@ -269,7 +273,7 @@ on_calendar_created_cb (GObject *source_object,
|
||||
NULL,
|
||||
NULL);
|
||||
|
||||
g_signal_emit (self, signals[SOURCE_ADDED], 0, gcal_calendar_get_source (calendar), visible);
|
||||
g_signal_emit (self, signals[CALENDAR_ADDED], 0, calendar);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -702,39 +706,29 @@ gcal_manager_class_init (GcalManagerClass *klass)
|
||||
g_object_class_install_properties (object_class, NUM_PROPS, properties);
|
||||
|
||||
/* signals */
|
||||
signals[SOURCE_ADDED] = g_signal_new ("source-added",
|
||||
GCAL_TYPE_MANAGER,
|
||||
G_SIGNAL_RUN_LAST,
|
||||
0, NULL, NULL, NULL,
|
||||
G_TYPE_NONE,
|
||||
2,
|
||||
G_TYPE_POINTER,
|
||||
G_TYPE_BOOLEAN);
|
||||
|
||||
signals[SOURCE_CHANGED] = g_signal_new ("source-changed",
|
||||
signals[CALENDAR_ADDED] = g_signal_new ("calendar-added",
|
||||
GCAL_TYPE_MANAGER,
|
||||
G_SIGNAL_RUN_LAST,
|
||||
0, NULL, NULL, NULL,
|
||||
G_TYPE_NONE,
|
||||
1,
|
||||
E_TYPE_SOURCE);
|
||||
GCAL_TYPE_CALENDAR);
|
||||
|
||||
signals[SOURCE_REMOVED] = g_signal_new ("source-removed",
|
||||
GCAL_TYPE_MANAGER,
|
||||
G_SIGNAL_RUN_LAST,
|
||||
0, NULL, NULL, NULL,
|
||||
G_TYPE_NONE,
|
||||
1,
|
||||
G_TYPE_POINTER);
|
||||
signals[CALENDAR_CHANGED] = g_signal_new ("calendar-changed",
|
||||
GCAL_TYPE_MANAGER,
|
||||
G_SIGNAL_RUN_LAST,
|
||||
0, NULL, NULL, NULL,
|
||||
G_TYPE_NONE,
|
||||
1,
|
||||
GCAL_TYPE_CALENDAR);
|
||||
|
||||
signals[SOURCE_ENABLED] = g_signal_new ("source-enabled",
|
||||
GCAL_TYPE_MANAGER,
|
||||
G_SIGNAL_RUN_LAST,
|
||||
0, NULL, NULL, NULL,
|
||||
G_TYPE_NONE,
|
||||
2,
|
||||
E_TYPE_SOURCE,
|
||||
G_TYPE_BOOLEAN);
|
||||
signals[CALENDAR_REMOVED] = g_signal_new ("calendar-removed",
|
||||
GCAL_TYPE_MANAGER,
|
||||
G_SIGNAL_RUN_LAST,
|
||||
0, NULL, NULL, NULL,
|
||||
G_TYPE_NONE,
|
||||
1,
|
||||
GCAL_TYPE_CALENDAR);
|
||||
|
||||
signals[QUERY_COMPLETED] = g_signal_new ("query-completed",
|
||||
GCAL_TYPE_MANAGER,
|
||||
@@ -1110,8 +1104,6 @@ gcal_manager_enable_source (GcalManager *self,
|
||||
if (self->shell_search_data_model)
|
||||
e_cal_data_model_add_client (self->shell_search_data_model, client);
|
||||
|
||||
g_signal_emit (self, signals[SOURCE_ENABLED], 0, source, TRUE);
|
||||
|
||||
/* Save the source */
|
||||
e_source_selectable_set_selected (selectable, TRUE);
|
||||
gcal_manager_save_source (self, source);
|
||||
@@ -1154,8 +1146,6 @@ gcal_manager_disable_source (GcalManager *self,
|
||||
if (self->shell_search_data_model != NULL)
|
||||
e_cal_data_model_remove_client (self->shell_search_data_model, source_uid);
|
||||
|
||||
g_signal_emit (self, signals[SOURCE_ENABLED], 0, source, FALSE);
|
||||
|
||||
/* Save the source */
|
||||
e_source_selectable_set_selected (selectable, FALSE);
|
||||
gcal_manager_save_source (self, source);
|
||||
|
||||
@@ -67,13 +67,13 @@ static guint signals[NUM_SIGNALS] = { 0, };
|
||||
*/
|
||||
|
||||
static GtkWidget*
|
||||
create_row_for_source (GcalManager *manager,
|
||||
ESource *source,
|
||||
gboolean writable)
|
||||
create_calendar_row (GcalManager *manager,
|
||||
GcalCalendar *calendar)
|
||||
{
|
||||
cairo_surface_t *surface;
|
||||
const GdkRGBA *color;
|
||||
GtkWidget *row, *box, *icon, *label, *selected_icon;
|
||||
GdkRGBA color;
|
||||
gboolean read_only;
|
||||
gchar *tooltip, *parent_name;
|
||||
|
||||
/* The main box */
|
||||
@@ -84,8 +84,8 @@ create_row_for_source (GcalManager *manager,
|
||||
gtk_widget_set_margin_bottom (box, 3);
|
||||
|
||||
/* The icon with the source 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);
|
||||
icon = gtk_image_new_from_surface (surface);
|
||||
|
||||
gtk_container_add (GTK_CONTAINER (box), icon);
|
||||
@@ -93,7 +93,7 @@ create_row_for_source (GcalManager *manager,
|
||||
gtk_style_context_add_class (gtk_widget_get_style_context (icon), "calendar-color-image");
|
||||
|
||||
/* Source name label */
|
||||
label = gtk_label_new (e_source_get_display_name (source));
|
||||
label = gtk_label_new (gcal_calendar_get_name (calendar));
|
||||
gtk_widget_set_margin_end (label, 12);
|
||||
|
||||
gtk_container_add (GTK_CONTAINER (box), label);
|
||||
@@ -104,17 +104,19 @@ create_row_for_source (GcalManager *manager,
|
||||
|
||||
/* The row itself */
|
||||
row = gtk_list_box_row_new ();
|
||||
gtk_widget_set_sensitive (row, writable);
|
||||
|
||||
read_only = gcal_calendar_is_read_only (calendar);
|
||||
gtk_widget_set_sensitive (row, !read_only);
|
||||
|
||||
gtk_container_add (GTK_CONTAINER (row), box);
|
||||
|
||||
/* Setup also a cool tooltip */
|
||||
get_source_parent_name_color (manager, source, &parent_name, NULL);
|
||||
get_source_parent_name_color (manager, gcal_calendar_get_source (calendar), &parent_name, NULL);
|
||||
|
||||
if (writable)
|
||||
tooltip = g_strdup (parent_name);
|
||||
else
|
||||
if (read_only)
|
||||
tooltip = g_strdup_printf (_("%s (this calendar is read-only)"), parent_name);
|
||||
else
|
||||
tooltip = g_strdup (parent_name);
|
||||
|
||||
gtk_widget_set_tooltip_text (row, tooltip);
|
||||
|
||||
@@ -123,7 +125,7 @@ create_row_for_source (GcalManager *manager,
|
||||
* taken to make sure it is not destroyed before this
|
||||
* row.
|
||||
*/
|
||||
g_object_set_data_full (G_OBJECT (row), "source", g_object_ref (source), g_object_unref);
|
||||
g_object_set_data_full (G_OBJECT (row), "calendar", g_object_ref (calendar), g_object_unref);
|
||||
g_object_set_data (G_OBJECT (row), "selected-icon", selected_icon);
|
||||
g_object_set_data (G_OBJECT (row), "color-icon", icon);
|
||||
g_object_set_data (G_OBJECT (row), "name-label", label);
|
||||
@@ -145,8 +147,8 @@ create_row_for_source (GcalManager *manager,
|
||||
* ESource from the listbox.
|
||||
*/
|
||||
static GtkWidget*
|
||||
get_row_for_source (GcalQuickAddPopover *self,
|
||||
ESource *source)
|
||||
get_row_for_calendar (GcalQuickAddPopover *self,
|
||||
GcalCalendar *calendar)
|
||||
{
|
||||
GList *children, *l;
|
||||
GtkWidget *row;
|
||||
@@ -156,9 +158,9 @@ get_row_for_source (GcalQuickAddPopover *self,
|
||||
|
||||
for (l = children; l != NULL; l = g_list_next (l))
|
||||
{
|
||||
ESource *row_source = g_object_get_data (l->data, "source");
|
||||
GcalCalendar *row_calendar = g_object_get_data (l->data, "calendar");
|
||||
|
||||
if (row_source == source)
|
||||
if (row_calendar == calendar)
|
||||
{
|
||||
row = l->data;
|
||||
break;
|
||||
@@ -175,9 +177,9 @@ select_row (GcalQuickAddPopover *self,
|
||||
GtkListBoxRow *row)
|
||||
{
|
||||
cairo_surface_t *surface;
|
||||
const GdkRGBA *color;
|
||||
GcalCalendar *calendar;
|
||||
GtkWidget *icon;
|
||||
ESource *source;
|
||||
GdkRGBA color;
|
||||
|
||||
/* First, unselect the previous row */
|
||||
if (self->selected_row)
|
||||
@@ -193,12 +195,12 @@ select_row (GcalQuickAddPopover *self,
|
||||
self->selected_row = GTK_WIDGET (row);
|
||||
|
||||
/* Setup the event page's source name and color */
|
||||
source = g_object_get_data (G_OBJECT (row), "source");
|
||||
calendar = g_object_get_data (G_OBJECT (row), "calendar");
|
||||
|
||||
gtk_label_set_label (GTK_LABEL (self->calendar_name_label), e_source_get_display_name (source));
|
||||
gtk_label_set_label (GTK_LABEL (self->calendar_name_label), gcal_calendar_get_name (calendar));
|
||||
|
||||
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);
|
||||
gtk_image_set_from_surface (GTK_IMAGE (self->color_image), surface);
|
||||
|
||||
/* Return to the events page */
|
||||
@@ -485,14 +487,16 @@ update_header (GcalQuickAddPopover *self)
|
||||
static void
|
||||
update_default_calendar_row (GcalQuickAddPopover *self)
|
||||
{
|
||||
GcalCalendar *default_calendar;
|
||||
GcalManager *manager;
|
||||
GtkWidget *row;
|
||||
ESource *default_source;
|
||||
|
||||
manager = gcal_context_get_manager (self->context);
|
||||
default_source = gcal_manager_get_default_source (manager);
|
||||
default_calendar = gcal_manager_get_calendar_from_source (manager, default_source);
|
||||
|
||||
row = get_row_for_source (self, default_source);
|
||||
row = get_row_for_calendar (self, default_calendar);
|
||||
select_row (self, GTK_LIST_BOX_ROW (row));
|
||||
|
||||
g_clear_object (&default_source);
|
||||
@@ -504,43 +508,47 @@ update_default_calendar_row (GcalQuickAddPopover *self)
|
||||
*/
|
||||
|
||||
static void
|
||||
on_source_added (GcalManager *manager,
|
||||
ESource *source,
|
||||
gboolean enabled,
|
||||
GcalQuickAddPopover *self)
|
||||
on_calendar_added (GcalManager *manager,
|
||||
GcalCalendar *calendar,
|
||||
GcalQuickAddPopover *self)
|
||||
{
|
||||
ESource *default_source;
|
||||
GtkWidget *row;
|
||||
|
||||
/* Since we can't add on read-only calendars, lets not show them at all */
|
||||
if (!gcal_manager_is_client_writable (manager, source))
|
||||
if (gcal_calendar_is_read_only (calendar))
|
||||
return;
|
||||
|
||||
default_source = gcal_manager_get_default_source (manager);
|
||||
row = create_row_for_source (manager, source, gcal_manager_is_client_writable (manager, source));
|
||||
row = create_calendar_row (manager, calendar);
|
||||
|
||||
gtk_container_add (GTK_CONTAINER (self->calendars_listbox), row);
|
||||
|
||||
/* Select the default source whe first adding events */
|
||||
if (source == default_source && !self->selected_row)
|
||||
select_row (self, GTK_LIST_BOX_ROW (row));
|
||||
if (gcal_calendar_get_source (calendar) == default_source &&
|
||||
!self->selected_row)
|
||||
{
|
||||
select_row (self, GTK_LIST_BOX_ROW (row));
|
||||
}
|
||||
|
||||
g_clear_object (&default_source);
|
||||
}
|
||||
|
||||
static void
|
||||
on_source_changed (GcalManager *manager,
|
||||
ESource *source,
|
||||
GcalQuickAddPopover *self)
|
||||
on_calendar_changed (GcalManager *manager,
|
||||
GcalCalendar *calendar,
|
||||
GcalQuickAddPopover *self)
|
||||
{
|
||||
cairo_surface_t *surface;
|
||||
const GdkRGBA *color;
|
||||
GtkWidget *row, *color_icon, *name_label;
|
||||
GdkRGBA color;
|
||||
gboolean read_only;
|
||||
|
||||
row = get_row_for_source (self, source);
|
||||
read_only = gcal_calendar_is_read_only (calendar);
|
||||
row = get_row_for_calendar (self, calendar);
|
||||
|
||||
/* If the calendar changed from/to read-only, we add or remove it here */
|
||||
if (!gcal_manager_is_client_writable (manager, source))
|
||||
if (read_only)
|
||||
{
|
||||
if (row)
|
||||
gtk_container_remove (GTK_CONTAINER (self->calendars_listbox), row);
|
||||
@@ -549,29 +557,26 @@ on_source_changed (GcalManager *manager,
|
||||
}
|
||||
else if (!row)
|
||||
{
|
||||
on_source_added (manager,
|
||||
source,
|
||||
is_source_enabled (source),
|
||||
self);
|
||||
on_calendar_added (manager, calendar, self);
|
||||
|
||||
row = get_row_for_source (self, source);
|
||||
row = get_row_for_calendar (self, calendar);
|
||||
}
|
||||
|
||||
color_icon = g_object_get_data (G_OBJECT (row), "color-icon");
|
||||
name_label = g_object_get_data (G_OBJECT (row), "name-label");
|
||||
|
||||
/* If the source is writable now (or not), update sensitivity */
|
||||
gtk_widget_set_sensitive (row, gcal_manager_is_client_writable (manager, source));
|
||||
gtk_widget_set_sensitive (row, !read_only);
|
||||
|
||||
/* Setup the source color, in case it changed */
|
||||
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);
|
||||
gtk_image_set_from_surface (GTK_IMAGE (color_icon), surface);
|
||||
|
||||
g_clear_pointer (&surface, cairo_surface_destroy);
|
||||
|
||||
/* Also setup the row name, in case we just changed the source name */
|
||||
gtk_label_set_text (GTK_LABEL (name_label), e_source_get_display_name (source));
|
||||
gtk_label_set_text (GTK_LABEL (name_label), gcal_calendar_get_name (calendar));
|
||||
|
||||
gtk_list_box_invalidate_sort (GTK_LIST_BOX (self->calendars_listbox));
|
||||
|
||||
@@ -584,13 +589,13 @@ on_source_changed (GcalManager *manager,
|
||||
}
|
||||
|
||||
static void
|
||||
on_source_removed (GcalManager *manager,
|
||||
ESource *source,
|
||||
GcalQuickAddPopover *self)
|
||||
on_calendar_removed (GcalManager *manager,
|
||||
GcalCalendar *calendar,
|
||||
GcalQuickAddPopover *self)
|
||||
{
|
||||
GtkWidget *row;
|
||||
|
||||
row = get_row_for_source (self, source);
|
||||
row = get_row_for_calendar (self, calendar);
|
||||
|
||||
if (!row)
|
||||
return;
|
||||
@@ -604,15 +609,15 @@ sort_func (GtkListBoxRow *row1,
|
||||
GtkListBoxRow *row2,
|
||||
gpointer user_data)
|
||||
{
|
||||
ESource *source1, *source2;
|
||||
GcalCalendar *calendar1, *calendar2;
|
||||
gchar *name1, *name2;
|
||||
gint retval;
|
||||
|
||||
source1 = g_object_get_data (G_OBJECT (row1), "source");
|
||||
source2 = g_object_get_data (G_OBJECT (row2), "source");
|
||||
calendar1 = g_object_get_data (G_OBJECT (row1), "calendar");
|
||||
calendar2 = g_object_get_data (G_OBJECT (row2), "calendar");
|
||||
|
||||
name1 = g_utf8_casefold (e_source_get_display_name (source1), -1);
|
||||
name2 = g_utf8_casefold (e_source_get_display_name (source2), -1);
|
||||
name1 = g_utf8_casefold (gcal_calendar_get_name (calendar1), -1);
|
||||
name2 = g_utf8_casefold (gcal_calendar_get_name (calendar2), -1);
|
||||
|
||||
retval = g_strcmp0 (name1, name2);
|
||||
|
||||
@@ -644,7 +649,6 @@ edit_or_create_event (GcalQuickAddPopover *self,
|
||||
GDateTime *date_start, *date_end;
|
||||
GTimeZone *tz;
|
||||
GcalEvent *event;
|
||||
ESource *source;
|
||||
const gchar *summary;
|
||||
gboolean all_day, single_day;
|
||||
|
||||
@@ -652,8 +656,7 @@ edit_or_create_event (GcalQuickAddPopover *self,
|
||||
return;
|
||||
|
||||
manager = gcal_context_get_manager (self->context);
|
||||
source = g_object_get_data (G_OBJECT (self->selected_row), "source");
|
||||
calendar = gcal_manager_get_calendar_from_source (manager, source);
|
||||
calendar = g_object_get_data (G_OBJECT (self->selected_row), "calendar");
|
||||
|
||||
single_day = gcal_date_time_compare_date (self->date_end, self->date_start) == 0;
|
||||
all_day = gcal_date_time_compare_date (self->date_end, self->date_start) > 1 ||
|
||||
@@ -799,20 +802,14 @@ gcal_quick_add_popover_set_property (GObject *object,
|
||||
calendars = gcal_manager_get_calendars (manager);
|
||||
|
||||
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);
|
||||
}
|
||||
on_calendar_added (manager, l->data, self);
|
||||
|
||||
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);
|
||||
g_signal_connect (manager, "source-changed", G_CALLBACK (on_source_changed), self);
|
||||
g_signal_connect (manager, "source-removed", G_CALLBACK (on_source_removed), self);
|
||||
g_signal_connect (manager, "calendar-added", G_CALLBACK (on_calendar_added), self);
|
||||
g_signal_connect (manager, "calendar-changed", G_CALLBACK (on_calendar_changed), self);
|
||||
g_signal_connect (manager, "calendar-removed", G_CALLBACK (on_calendar_removed), self);
|
||||
g_signal_connect_swapped (manager, "notify::default-calendar", G_CALLBACK (update_default_calendar_row), self);
|
||||
|
||||
g_signal_connect_object (self->context,
|
||||
|
||||
+108
-152
@@ -102,7 +102,7 @@ struct _GcalSourceDialog
|
||||
GcalSourceDialogMode mode;
|
||||
ESource *source;
|
||||
GList *remote_sources;
|
||||
ESource *removed_source;
|
||||
GcalCalendar *removed_calendar;
|
||||
ESource *old_default_source;
|
||||
GBinding *title_bind;
|
||||
gboolean prompt_password;
|
||||
@@ -126,11 +126,6 @@ typedef enum
|
||||
static void add_button_clicked (GtkWidget *button,
|
||||
gpointer user_data);
|
||||
|
||||
static void add_source (GcalManager *manager,
|
||||
ESource *source,
|
||||
gboolean enabled,
|
||||
gpointer user_data);
|
||||
|
||||
static void action_widget_activated (GtkWidget *widget,
|
||||
gpointer user_data);
|
||||
|
||||
@@ -175,9 +170,6 @@ static void display_header_func (GtkListBoxRow *r
|
||||
static gboolean is_goa_source (GcalSourceDialog *dialog,
|
||||
ESource *source);
|
||||
|
||||
static GtkWidget* make_row_from_source (GcalSourceDialog *dialog,
|
||||
ESource *source);
|
||||
|
||||
static void name_entry_text_changed (GObject *object,
|
||||
GParamSpec *pspec,
|
||||
gpointer user_data);
|
||||
@@ -205,10 +197,6 @@ static void on_web_activated (GSimpleAction *ac
|
||||
GVariant *param,
|
||||
gpointer user_data);
|
||||
|
||||
static void remove_source (GcalManager *manager,
|
||||
ESource *source,
|
||||
gpointer user_data);
|
||||
|
||||
static void response_signal (GtkDialog *dialog,
|
||||
gint response_id,
|
||||
gpointer user_data);
|
||||
@@ -302,22 +290,87 @@ add_button_clicked (GtkWidget *button,
|
||||
}
|
||||
|
||||
static void
|
||||
add_source (GcalManager *manager,
|
||||
ESource *source,
|
||||
gboolean enabled,
|
||||
gpointer user_data)
|
||||
source_color_changed (GcalCalendar *calendar,
|
||||
GParamSpec *pspec,
|
||||
GtkImage *icon)
|
||||
{
|
||||
cairo_surface_t *surface;
|
||||
const GdkRGBA *color;
|
||||
|
||||
color = gcal_calendar_get_color (calendar);
|
||||
surface = get_circle_surface_from_color (color, 24);
|
||||
gtk_image_set_from_surface (GTK_IMAGE (icon), surface);
|
||||
g_clear_pointer (&surface, cairo_surface_destroy);
|
||||
}
|
||||
|
||||
static GtkWidget*
|
||||
make_calendar_row (GcalSourceDialog *dialog,
|
||||
GcalCalendar *calendar)
|
||||
{
|
||||
cairo_surface_t *surface;
|
||||
const GdkRGBA *color;
|
||||
GcalManager *manager;
|
||||
GtkBuilder *builder;
|
||||
GtkWidget *bottom_label;
|
||||
GtkWidget *top_label;
|
||||
GtkWidget *icon;
|
||||
GtkWidget *row;
|
||||
gchar *parent_name;
|
||||
|
||||
manager = gcal_context_get_manager (dialog->context);
|
||||
get_source_parent_name_color (manager, gcal_calendar_get_source (calendar), &parent_name, NULL);
|
||||
|
||||
builder = gtk_builder_new_from_resource ("/org/gnome/calendar/calendar-row.ui");
|
||||
|
||||
/*
|
||||
* Since we're destroying the builder instance before adding
|
||||
* the row to the listbox, it should be referenced here so
|
||||
* it isn't destroyed with the GtkBuilder.
|
||||
*/
|
||||
row = g_object_ref (GTK_WIDGET (gtk_builder_get_object (builder, "row")));
|
||||
|
||||
/* source color icon */
|
||||
color = gcal_calendar_get_color (calendar);
|
||||
surface = get_circle_surface_from_color (color, 24);
|
||||
icon = GTK_WIDGET (gtk_builder_get_object (builder, "icon"));
|
||||
gtk_image_set_from_surface (GTK_IMAGE (icon), surface);
|
||||
|
||||
/* source name label */
|
||||
top_label = GTK_WIDGET (gtk_builder_get_object (builder, "title"));
|
||||
gtk_label_set_label (GTK_LABEL (top_label), gcal_calendar_get_name (calendar));
|
||||
g_object_bind_property (calendar, "name", top_label, "label", G_BINDING_DEFAULT | G_BINDING_SYNC_CREATE);
|
||||
g_signal_connect_swapped (calendar,
|
||||
"notify::name",
|
||||
G_CALLBACK (gtk_list_box_invalidate_sort),
|
||||
dialog->calendars_listbox);
|
||||
|
||||
g_signal_connect (calendar, "notify::color", G_CALLBACK (source_color_changed), icon);
|
||||
|
||||
/* parent source name label */
|
||||
bottom_label = GTK_WIDGET (gtk_builder_get_object (builder, "subtitle"));
|
||||
gtk_label_set_label (GTK_LABEL (bottom_label), parent_name);
|
||||
|
||||
g_clear_pointer (&surface, cairo_surface_destroy);
|
||||
g_object_unref (builder);
|
||||
g_free (parent_name);
|
||||
|
||||
return row;
|
||||
}
|
||||
|
||||
static void
|
||||
add_calendar (GcalManager *manager,
|
||||
GcalCalendar *calendar,
|
||||
GcalSourceDialog *self)
|
||||
{
|
||||
GcalSourceDialog *self;
|
||||
GList *children, *l;
|
||||
gboolean contains_source;
|
||||
|
||||
self = GCAL_SOURCE_DIALOG (user_data);
|
||||
children = gtk_container_get_children (GTK_CONTAINER (self->calendars_listbox));
|
||||
contains_source = FALSE;
|
||||
|
||||
for (l = children; l != NULL; l = l->next)
|
||||
{
|
||||
if (g_object_get_data (l->data, "source") == source)
|
||||
if (g_object_get_data (l->data, "calendar") == calendar)
|
||||
{
|
||||
contains_source = TRUE;
|
||||
break;
|
||||
@@ -327,11 +380,13 @@ add_source (GcalManager *manager,
|
||||
if (!contains_source)
|
||||
{
|
||||
GtkWidget *row;
|
||||
ESource *source;
|
||||
ESource *parent;
|
||||
|
||||
source = gcal_calendar_get_source (calendar);
|
||||
parent = gcal_manager_get_source (manager, e_source_get_parent (source));
|
||||
|
||||
row = make_row_from_source (GCAL_SOURCE_DIALOG (user_data), source);
|
||||
row = make_calendar_row (self, calendar);
|
||||
g_object_set_data (G_OBJECT (row), "source", source);
|
||||
|
||||
if (e_source_has_extension (parent, E_SOURCE_EXTENSION_GOA))
|
||||
@@ -566,95 +621,6 @@ is_goa_source (GcalSourceDialog *dialog,
|
||||
return is_goa;
|
||||
}
|
||||
|
||||
static void
|
||||
source_color_changed (GObject *source,
|
||||
GParamSpec *pspec,
|
||||
GtkImage *icon)
|
||||
{
|
||||
ESourceSelectable *extension;
|
||||
cairo_surface_t *surface;
|
||||
GdkRGBA out_color;
|
||||
|
||||
extension = E_SOURCE_SELECTABLE (source);
|
||||
|
||||
if (!gdk_rgba_parse (&out_color, e_source_selectable_get_color (extension)))
|
||||
{
|
||||
g_warning ("Error parsing color");
|
||||
return;
|
||||
}
|
||||
|
||||
if (gdk_rgba_parse (&out_color, e_source_selectable_get_color (extension)))
|
||||
{
|
||||
surface = get_circle_surface_from_color (&out_color, 24);
|
||||
gtk_image_set_from_surface (GTK_IMAGE (icon), surface);
|
||||
g_clear_pointer (&surface, cairo_surface_destroy);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
invalidate_calendar_listbox_sort (GObject *source,
|
||||
GParamSpec *pspec,
|
||||
gpointer user_data)
|
||||
{
|
||||
g_return_if_fail (GTK_IS_LIST_BOX (user_data));
|
||||
|
||||
gtk_list_box_invalidate_sort (GTK_LIST_BOX (user_data));
|
||||
}
|
||||
|
||||
static GtkWidget*
|
||||
make_row_from_source (GcalSourceDialog *dialog,
|
||||
ESource *source)
|
||||
{
|
||||
ESourceSelectable *extension;
|
||||
cairo_surface_t *surface;
|
||||
GcalManager *manager;
|
||||
GtkBuilder *builder;
|
||||
GtkWidget *bottom_label;
|
||||
GtkWidget *top_label;
|
||||
GtkWidget *icon;
|
||||
GtkWidget *row;
|
||||
GdkRGBA color;
|
||||
gchar *parent_name;
|
||||
|
||||
manager = gcal_context_get_manager (dialog->context);
|
||||
get_source_parent_name_color (manager, source, &parent_name, NULL);
|
||||
|
||||
builder = gtk_builder_new_from_resource ("/org/gnome/calendar/calendar-row.ui");
|
||||
|
||||
/*
|
||||
* Since we're destroying the builder instance before adding
|
||||
* the row to the listbox, it should be referenced here so
|
||||
* it isn't destroyed with the GtkBuilder.
|
||||
*/
|
||||
row = g_object_ref (GTK_WIDGET (gtk_builder_get_object (builder, "row")));
|
||||
|
||||
/* source color icon */
|
||||
get_color_name_from_source (source, &color);
|
||||
surface = get_circle_surface_from_color (&color, 24);
|
||||
icon = GTK_WIDGET (gtk_builder_get_object (builder, "icon"));
|
||||
gtk_image_set_from_surface (GTK_IMAGE (icon), surface);
|
||||
|
||||
/* source name label */
|
||||
top_label = GTK_WIDGET (gtk_builder_get_object (builder, "title"));
|
||||
gtk_label_set_label (GTK_LABEL (top_label), e_source_get_display_name (source));
|
||||
g_object_bind_property (source, "display-name", top_label, "label", G_BINDING_DEFAULT | G_BINDING_SYNC_CREATE);
|
||||
g_signal_connect (source, "notify::display-name", G_CALLBACK (invalidate_calendar_listbox_sort),
|
||||
dialog->calendars_listbox);
|
||||
|
||||
extension = E_SOURCE_SELECTABLE (e_source_get_extension (source, E_SOURCE_EXTENSION_CALENDAR));
|
||||
g_signal_connect (extension, "notify::color", G_CALLBACK (source_color_changed), icon);
|
||||
|
||||
/* parent source name label */
|
||||
bottom_label = GTK_WIDGET (gtk_builder_get_object (builder, "subtitle"));
|
||||
gtk_label_set_label (GTK_LABEL (bottom_label), parent_name);
|
||||
|
||||
g_clear_pointer (&surface, cairo_surface_destroy);
|
||||
g_object_unref (builder);
|
||||
g_free (parent_name);
|
||||
|
||||
return row;
|
||||
}
|
||||
|
||||
static void
|
||||
name_entry_text_changed (GObject *object,
|
||||
GParamSpec *pspec,
|
||||
@@ -1643,30 +1609,20 @@ discover_sources_cb (GObject *source,
|
||||
g_slist_free_full (user_addresses, g_free);
|
||||
}
|
||||
|
||||
/**
|
||||
* remove_source:
|
||||
*
|
||||
* Removes the given source from the source
|
||||
* list.
|
||||
*
|
||||
* Returns:
|
||||
*/
|
||||
static void
|
||||
remove_source (GcalManager *manager,
|
||||
ESource *source,
|
||||
gpointer user_data)
|
||||
remove_calendar (GcalManager *manager,
|
||||
GcalCalendar *calendar,
|
||||
GcalSourceDialog *self)
|
||||
{
|
||||
GcalSourceDialog *self;
|
||||
GList *children, *aux;
|
||||
|
||||
self = GCAL_SOURCE_DIALOG (user_data);
|
||||
children = gtk_container_get_children (GTK_CONTAINER (self->calendars_listbox));
|
||||
|
||||
for (aux = children; aux != NULL; aux = aux->next)
|
||||
{
|
||||
ESource *child_source = g_object_get_data (G_OBJECT (aux->data), "source");
|
||||
GcalCalendar *row_calendar = g_object_get_data (G_OBJECT (aux->data), "calendar");
|
||||
|
||||
if (child_source != NULL && child_source == source)
|
||||
if (row_calendar && row_calendar == calendar)
|
||||
{
|
||||
gtk_widget_destroy (aux->data);
|
||||
break;
|
||||
@@ -1698,18 +1654,21 @@ notification_child_revealed_changed (GtkWidget *notification,
|
||||
manager = gcal_context_get_manager (self->context);
|
||||
|
||||
/* If we have any removed source, delete it */
|
||||
if (self->removed_source != NULL)
|
||||
if (self->removed_calendar != NULL)
|
||||
{
|
||||
GError *error = NULL;
|
||||
g_autoptr (GError) error = NULL;
|
||||
ESource *removed_source;
|
||||
|
||||
removed_source = gcal_calendar_get_source (self->removed_calendar);
|
||||
|
||||
/* We don't really want to remove non-removable sources */
|
||||
if (!e_source_get_removable (self->removed_source))
|
||||
if (!e_source_get_removable (removed_source))
|
||||
return;
|
||||
|
||||
/* Enable the source again to remove it's name from disabled list */
|
||||
gcal_manager_enable_source (manager, self->removed_source);
|
||||
gcal_manager_enable_source (manager, removed_source);
|
||||
|
||||
e_source_remove_sync (self->removed_source, NULL, &error);
|
||||
e_source_remove_sync (removed_source, NULL, &error);
|
||||
|
||||
/**
|
||||
* If something goes wrong, throw
|
||||
@@ -1719,14 +1678,8 @@ notification_child_revealed_changed (GtkWidget *notification,
|
||||
{
|
||||
g_warning ("[source-dialog] Error removing source: %s", error->message);
|
||||
|
||||
add_source (manager,
|
||||
self->removed_source,
|
||||
is_source_enabled (self->removed_source),
|
||||
user_data);
|
||||
|
||||
gcal_manager_enable_source (manager, self->removed_source);
|
||||
|
||||
g_error_free (error);
|
||||
add_calendar (manager, self->removed_calendar, self);
|
||||
gcal_manager_enable_source (manager, removed_source);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1748,21 +1701,22 @@ undo_remove_action (GtkButton *button,
|
||||
manager = gcal_context_get_manager (self->context);
|
||||
|
||||
/* if there's any set source, unremove it */
|
||||
if (self->removed_source != NULL)
|
||||
if (self->removed_calendar != NULL)
|
||||
{
|
||||
/* Enable the source before adding it again */
|
||||
gcal_manager_enable_source (manager, self->removed_source);
|
||||
ESource *removed_source;
|
||||
|
||||
add_source (manager,
|
||||
self->removed_source,
|
||||
is_source_enabled (self->removed_source),
|
||||
user_data);
|
||||
removed_source = gcal_calendar_get_source (self->removed_calendar);
|
||||
|
||||
/* Enable the source before adding it again */
|
||||
gcal_manager_enable_source (manager, removed_source);
|
||||
|
||||
add_calendar (manager, self->removed_calendar, self);
|
||||
|
||||
/*
|
||||
* Don't clear the pointer, since we don't
|
||||
* want to erase the source at all.
|
||||
*/
|
||||
self->removed_source = NULL;
|
||||
self->removed_calendar = NULL;
|
||||
|
||||
/* Hide notification */
|
||||
gtk_revealer_set_reveal_child (GTK_REVEALER (self->notification), FALSE);
|
||||
@@ -1820,10 +1774,12 @@ remove_button_clicked (GtkWidget *button,
|
||||
|
||||
if (self->source != NULL)
|
||||
{
|
||||
ESource *removed_source;
|
||||
GList *children, *l;
|
||||
gchar *str;
|
||||
|
||||
self->removed_source = self->source;
|
||||
removed_source = self->source;
|
||||
self->removed_calendar = gcal_manager_get_calendar_from_source (manager, removed_source);
|
||||
self->source = NULL;
|
||||
children = gtk_container_get_children (GTK_CONTAINER (self->calendars_listbox));
|
||||
|
||||
@@ -1832,7 +1788,7 @@ remove_button_clicked (GtkWidget *button,
|
||||
/* Remove the listbox entry (if any) */
|
||||
for (l = children; l != NULL; l = l->next)
|
||||
{
|
||||
if (g_object_get_data (l->data, "source") == self->removed_source)
|
||||
if (g_object_get_data (l->data, "calendar") == self->removed_calendar)
|
||||
{
|
||||
gtk_widget_destroy (l->data);
|
||||
break;
|
||||
@@ -1840,7 +1796,7 @@ remove_button_clicked (GtkWidget *button,
|
||||
}
|
||||
|
||||
/* Update notification label */
|
||||
str = g_markup_printf_escaped (_("Calendar <b>%s</b> removed"), e_source_get_display_name (self->removed_source));
|
||||
str = g_markup_printf_escaped (_("Calendar <b>%s</b> removed"), gcal_calendar_get_name (self->removed_calendar));
|
||||
gtk_label_set_markup (GTK_LABEL (self->notification_label), str);
|
||||
|
||||
/* Remove old notifications */
|
||||
@@ -1850,7 +1806,7 @@ remove_button_clicked (GtkWidget *button,
|
||||
self->notification_timeout_id = g_timeout_add_seconds (5, hide_notification_scheduled, user_data);
|
||||
|
||||
/* Disable the source, so it gets hidden */
|
||||
gcal_manager_disable_source (manager, self->removed_source);
|
||||
gcal_manager_disable_source (manager, removed_source);
|
||||
|
||||
g_list_free (children);
|
||||
g_free (str);
|
||||
@@ -2056,8 +2012,8 @@ setup_context (GcalSourceDialog *self)
|
||||
g_signal_connect (client, "account-removed", G_CALLBACK (goa_account_removed_cb), self);
|
||||
|
||||
manager = gcal_context_get_manager (self->context);
|
||||
g_signal_connect (manager, "source-added", G_CALLBACK (add_source), self);
|
||||
g_signal_connect (manager, "source-removed", G_CALLBACK (remove_source), self);
|
||||
g_signal_connect (manager, "calendar-added", G_CALLBACK (add_calendar), self);
|
||||
g_signal_connect (manager, "calendar-removed", G_CALLBACK (remove_calendar), self);
|
||||
|
||||
g_list_free_full (accounts, g_object_unref);
|
||||
|
||||
|
||||
+31
-119
@@ -666,41 +666,14 @@ hide_notification_scheduled (gpointer window)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
on_calendar_toggled (GObject *object,
|
||||
GParamSpec *pspec,
|
||||
gpointer user_data)
|
||||
{
|
||||
GcalManager *manager;
|
||||
GcalWindow *window;
|
||||
gboolean active;
|
||||
GtkWidget *row;
|
||||
ESource *source;
|
||||
|
||||
window = GCAL_WINDOW (user_data);
|
||||
manager = gcal_context_get_manager (window->context);
|
||||
active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (object));
|
||||
row = gtk_widget_get_parent (gtk_widget_get_parent (GTK_WIDGET (object)));
|
||||
source = g_object_get_data (G_OBJECT (row), "source");
|
||||
|
||||
if (source == NULL)
|
||||
return;
|
||||
|
||||
/* Enable/disable the toggled calendar */
|
||||
if (active)
|
||||
gcal_manager_enable_source (manager, source);
|
||||
else
|
||||
gcal_manager_disable_source (manager, source);
|
||||
}
|
||||
|
||||
static GtkWidget*
|
||||
make_row_from_source (GcalWindow *window,
|
||||
ESource *source)
|
||||
make_calendar_row (GcalWindow *window,
|
||||
GcalCalendar *calendar)
|
||||
{
|
||||
GtkWidget *label, *icon, *checkbox, *box, *row;
|
||||
GtkStyleContext *context;
|
||||
cairo_surface_t *surface;
|
||||
GdkRGBA color;
|
||||
const GdkRGBA *color;
|
||||
|
||||
row = gtk_list_box_row_new ();
|
||||
|
||||
@@ -715,21 +688,24 @@ make_row_from_source (GcalWindow *window,
|
||||
gtk_container_set_border_width (GTK_CONTAINER (box), 6);
|
||||
|
||||
/* source color icon */
|
||||
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);
|
||||
icon = gtk_image_new_from_surface (surface);
|
||||
|
||||
gtk_style_context_add_class (gtk_widget_get_style_context (icon), "calendar-color-image");
|
||||
|
||||
/* source name label */
|
||||
label = gtk_label_new (e_source_get_display_name (source));
|
||||
label = gtk_label_new (gcal_calendar_get_name (calendar));
|
||||
gtk_label_set_xalign (GTK_LABEL (label), 0.0);
|
||||
gtk_widget_set_hexpand (label, TRUE);
|
||||
|
||||
/* checkbox */
|
||||
checkbox = gtk_check_button_new ();
|
||||
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (checkbox), is_source_enabled (source));
|
||||
g_signal_connect (checkbox, "notify::active", G_CALLBACK (on_calendar_toggled), window);
|
||||
g_object_bind_property (calendar,
|
||||
"visible",
|
||||
checkbox,
|
||||
"active",
|
||||
G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
|
||||
|
||||
gtk_container_add (GTK_CONTAINER (box), icon);
|
||||
gtk_container_add (GTK_CONTAINER (box), label);
|
||||
@@ -737,7 +713,7 @@ make_row_from_source (GcalWindow *window,
|
||||
gtk_container_add (GTK_CONTAINER (row), box);
|
||||
|
||||
g_object_set_data (G_OBJECT (row), "check", checkbox);
|
||||
g_object_set_data (G_OBJECT (row), "source", source);
|
||||
g_object_set_data (G_OBJECT (row), "calendar", calendar);
|
||||
|
||||
gtk_widget_show_all (row);
|
||||
|
||||
@@ -747,36 +723,30 @@ make_row_from_source (GcalWindow *window,
|
||||
}
|
||||
|
||||
static void
|
||||
add_source (GcalManager *manager,
|
||||
ESource *source,
|
||||
gboolean enabled,
|
||||
gpointer user_data)
|
||||
add_calendar (GcalManager *manager,
|
||||
GcalCalendar *calendar,
|
||||
GcalWindow *self)
|
||||
{
|
||||
GcalWindow *window;
|
||||
GtkWidget *row;
|
||||
|
||||
window = GCAL_WINDOW (user_data);
|
||||
|
||||
row = make_row_from_source (GCAL_WINDOW (user_data), source);
|
||||
|
||||
gtk_container_add (GTK_CONTAINER (window->calendar_listbox), row);
|
||||
row = make_calendar_row (self, calendar);
|
||||
gtk_container_add (GTK_CONTAINER (self->calendar_listbox), row);
|
||||
}
|
||||
|
||||
static void
|
||||
remove_source (GcalManager *manager,
|
||||
ESource *source,
|
||||
gpointer user_data)
|
||||
remove_calendar (GcalManager *manager,
|
||||
GcalCalendar *calendar,
|
||||
GcalWindow *self)
|
||||
{
|
||||
GcalWindow *window = GCAL_WINDOW (user_data);
|
||||
GList *children, *aux;
|
||||
|
||||
children = gtk_container_get_children (GTK_CONTAINER (window->calendar_listbox));
|
||||
children = gtk_container_get_children (GTK_CONTAINER (self->calendar_listbox));
|
||||
|
||||
for (aux = children; aux != NULL; aux = aux->next)
|
||||
{
|
||||
ESource *child_source = g_object_get_data (G_OBJECT (aux->data), "source");
|
||||
GcalCalendar *row_calendar = g_object_get_data (G_OBJECT (aux->data), "calendar");
|
||||
|
||||
if (child_source != NULL && child_source == source)
|
||||
if (row_calendar && row_calendar == calendar)
|
||||
{
|
||||
gtk_widget_destroy (aux->data);
|
||||
break;
|
||||
@@ -800,62 +770,11 @@ source_row_activated (GtkListBox *listbox,
|
||||
}
|
||||
|
||||
static void
|
||||
source_enabled (GcalWindow *self,
|
||||
ESource *source,
|
||||
gboolean enabled)
|
||||
calendar_changed (GcalWindow *window,
|
||||
GcalCalendar *calendar)
|
||||
{
|
||||
GList *children, *aux;
|
||||
|
||||
children = gtk_container_get_children (GTK_CONTAINER (self->calendar_listbox));
|
||||
|
||||
for (aux = children; aux != NULL; aux = aux->next)
|
||||
{
|
||||
ESource *child_source = g_object_get_data (G_OBJECT (aux->data), "source");
|
||||
|
||||
if (child_source != NULL && child_source == source)
|
||||
{
|
||||
GtkToggleButton *button = g_object_get_data (G_OBJECT (aux->data), "check");
|
||||
|
||||
g_signal_handlers_block_by_func (button, on_calendar_toggled, self);
|
||||
gtk_toggle_button_set_active (button, enabled);
|
||||
g_signal_handlers_unblock_by_func (button, on_calendar_toggled, self);
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
g_list_free (children);
|
||||
}
|
||||
|
||||
static void
|
||||
source_changed (GcalWindow *window,
|
||||
ESource *source)
|
||||
{
|
||||
GcalManager *manager;
|
||||
GList *children, *aux;
|
||||
|
||||
manager = gcal_context_get_manager (window->context);
|
||||
children = gtk_container_get_children (GTK_CONTAINER (window->calendar_listbox));
|
||||
|
||||
for (aux = children; aux != NULL; aux = aux->next)
|
||||
{
|
||||
ESource *child_source = g_object_get_data (G_OBJECT (aux->data), "source");
|
||||
|
||||
/*
|
||||
* Here we destroy the row and re-add it because there is no
|
||||
* way to actually bind the ::enabled state of source. It behaves
|
||||
* like a construct-only property, and we need to re-create the
|
||||
* row if there's any changes.
|
||||
*/
|
||||
if (child_source != NULL && child_source == source)
|
||||
{
|
||||
gtk_widget_destroy (aux->data);
|
||||
add_source (manager, source, is_source_enabled (source), window);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
g_list_free (children);
|
||||
remove_calendar (NULL, calendar, window);
|
||||
add_calendar (NULL, calendar, window);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
@@ -1204,19 +1123,12 @@ gcal_window_set_property (GObject *object,
|
||||
calendars = gcal_manager_get_calendars (manager);
|
||||
|
||||
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);
|
||||
}
|
||||
add_calendar (manager, l->data, self);
|
||||
}
|
||||
|
||||
g_signal_connect (manager, "source-added", G_CALLBACK (add_source), object);
|
||||
g_signal_connect (manager, "source-removed", G_CALLBACK (remove_source), object);
|
||||
g_signal_connect_swapped (manager, "source-enabled", G_CALLBACK (source_enabled), object);
|
||||
g_signal_connect_swapped (manager, "source-changed", G_CALLBACK (source_changed), object);
|
||||
g_signal_connect (manager, "calendar-added", G_CALLBACK (add_calendar), object);
|
||||
g_signal_connect (manager, "calendar-removed", G_CALLBACK (remove_calendar), object);
|
||||
g_signal_connect_swapped (manager, "calendar-changed", G_CALLBACK (calendar_changed), object);
|
||||
|
||||
g_object_notify_by_pspec (object, properties[PROP_CONTEXT]);
|
||||
}
|
||||
|
||||
@@ -111,50 +111,41 @@ search_func (GTask *task,
|
||||
}
|
||||
|
||||
static void
|
||||
on_manager_source_added_cb (GcalManager *manager,
|
||||
ESource *source,
|
||||
gboolean enabled,
|
||||
GcalSearchEngine *self)
|
||||
on_manager_calendar_added_cb (GcalManager *manager,
|
||||
GcalCalendar *calendar,
|
||||
GcalSearchEngine *self)
|
||||
{
|
||||
ECalClient *client;
|
||||
|
||||
g_debug ("Removing source %s from search results", e_source_get_uid (source));
|
||||
g_debug ("Removing source %s from search results", gcal_calendar_get_id (calendar));
|
||||
|
||||
client = gcal_manager_get_client (manager, source);
|
||||
client = gcal_calendar_get_client (calendar);
|
||||
|
||||
if (enabled)
|
||||
if (gcal_calendar_get_visible (calendar))
|
||||
e_cal_data_model_add_client (self->data_model, client);
|
||||
}
|
||||
|
||||
static void
|
||||
on_manager_source_enabled_cb (GcalManager *manager,
|
||||
ESource *source,
|
||||
gboolean enabled,
|
||||
GcalSearchEngine *self)
|
||||
on_manager_calendar_changed_cb (GcalManager *manager,
|
||||
GcalCalendar *calendar,
|
||||
GcalSearchEngine *self)
|
||||
{
|
||||
g_debug ("Changing source %s from search results", e_source_get_uid (source));
|
||||
g_debug ("Changing source %s from search results", gcal_calendar_get_id (calendar));
|
||||
|
||||
if (enabled)
|
||||
{
|
||||
ECalClient *client;
|
||||
|
||||
client = gcal_manager_get_client (manager, source);
|
||||
e_cal_data_model_add_client (self->data_model, client);
|
||||
}
|
||||
if (gcal_calendar_get_visible (calendar))
|
||||
e_cal_data_model_add_client (self->data_model, gcal_calendar_get_client (calendar));
|
||||
else
|
||||
{
|
||||
e_cal_data_model_remove_client (self->data_model, e_source_get_uid (source));
|
||||
}
|
||||
e_cal_data_model_remove_client (self->data_model, gcal_calendar_get_id (calendar));
|
||||
}
|
||||
|
||||
static void
|
||||
on_manager_source_removed_cb (GcalManager *manager,
|
||||
ESource *source,
|
||||
GcalSearchEngine *self)
|
||||
on_manager_calendar_removed_cb (GcalManager *manager,
|
||||
GcalCalendar *calendar,
|
||||
GcalSearchEngine *self)
|
||||
{
|
||||
g_debug ("Removing source %s from search results", e_source_get_uid (source));
|
||||
g_debug ("Removing source %s from search results", gcal_calendar_get_id (calendar));
|
||||
|
||||
e_cal_data_model_remove_client (self->data_model, e_source_get_uid (source));
|
||||
e_cal_data_model_remove_client (self->data_model, gcal_calendar_get_id (calendar));
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -196,9 +187,9 @@ gcal_search_engine_constructed (GObject *object)
|
||||
|
||||
|
||||
manager = gcal_context_get_manager (self->context);
|
||||
g_signal_connect_object (manager, "source-added", G_CALLBACK (on_manager_source_added_cb), self, 0);
|
||||
g_signal_connect_object (manager, "source-removed", G_CALLBACK (on_manager_source_removed_cb), self, 0);
|
||||
g_signal_connect_object (manager, "source-enabled", G_CALLBACK (on_manager_source_enabled_cb), self, 0);
|
||||
g_signal_connect_object (manager, "calendar-added", G_CALLBACK (on_manager_calendar_added_cb), self, 0);
|
||||
g_signal_connect_object (manager, "calendar-changed", G_CALLBACK (on_manager_calendar_changed_cb), self, 0);
|
||||
g_signal_connect_object (manager, "calendar-removed", G_CALLBACK (on_manager_calendar_removed_cb), self, 0);
|
||||
|
||||
g_signal_connect_object (self->context,
|
||||
"notify::timezone",
|
||||
|
||||
Reference in New Issue
Block a user