From c65fe989fe11a4a3adb00db7ea235d31ba8cb039 Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Fri, 12 Feb 2016 03:43:47 -0200 Subject: [PATCH] window: use a GcalEvent to delete events Instead of using the GcalEventData struct, use the deleted event. It holds a reference until the event gets destroyed. With this commit, we can safely drop GcalEventData structure, since it's not used anymore. --- src/gcal-manager.c | 2 +- src/gcal-manager.h | 6 ------ src/gcal-window.c | 52 ++++++++++++++++++++++------------------------ 3 files changed, 26 insertions(+), 34 deletions(-) diff --git a/src/gcal-manager.c b/src/gcal-manager.c index 675c3cae..3e31b2ce 100644 --- a/src/gcal-manager.c +++ b/src/gcal-manager.c @@ -1506,7 +1506,7 @@ gcal_manager_move_event_to_source (GcalManager *manager, /** * gcal_manager_get_events: * - * Returns a list with {@link GcalEventData} objects owned by the caller, the list and the objects. + * Returns a list with {@link GcalEvent} objects owned by the caller, the list and the objects. * The components inside the list are owned by the caller as well. So, don't ref the component. * * Returns: An {@link GList} object diff --git a/src/gcal-manager.h b/src/gcal-manager.h index 0b6ef910..92f3f0e3 100644 --- a/src/gcal-manager.h +++ b/src/gcal-manager.h @@ -32,12 +32,6 @@ G_BEGIN_DECLS G_DECLARE_FINAL_TYPE (GcalManager, gcal_manager, GCAL, MANAGER, GObject) -typedef struct -{ - ESource *source; - ECalComponent *event_component; -} GcalEventData; - GcalManager* gcal_manager_new_with_settings (GSettings *settings); ESource* gcal_manager_get_source (GcalManager *manager, diff --git a/src/gcal-window.c b/src/gcal-window.c index 4c645deb..90f8cb58 100644 --- a/src/gcal-window.c +++ b/src/gcal-window.c @@ -108,7 +108,7 @@ struct _GcalWindow NewEventData *event_creation_data; - GcalEventData *event_to_delete; + GcalEvent *event_to_delete; /* calendar management */ GtkWidget *calendar_popover; @@ -1146,13 +1146,10 @@ edit_dialog_closed (GtkDialog *dialog, gpointer user_data) { GcalWindow *window; - GcalEditDialog *edit_dialog; GcalEvent *event; GcalView *view; - GList *widgets; - const gchar *uuid; window = GCAL_WINDOW (user_data); edit_dialog = GCAL_EDIT_DIALOG (dialog); @@ -1180,8 +1177,11 @@ edit_dialog_closed (GtkDialog *dialog, case GCAL_RESPONSE_DELETE_EVENT: if (window->event_to_delete != NULL) { - gcal_manager_remove_event (window->manager, window->event_to_delete->source, window->event_to_delete->event_component); - g_clear_pointer (&(window->event_to_delete), g_free); + gcal_manager_remove_event (window->manager, + gcal_event_get_source (window->event_to_delete), + gcal_event_get_component (window->event_to_delete)); + + g_clear_object (&window->event_to_delete); create_notification (GCAL_WINDOW (user_data), _("Another event deleted"), _("Undo")); } @@ -1191,18 +1191,16 @@ edit_dialog_closed (GtkDialog *dialog, } gtk_revealer_set_reveal_child (GTK_REVEALER (window->notification), TRUE); + if (window->notification_timeout != 0) g_source_remove (window->notification_timeout); + window->notification_timeout = g_timeout_add_seconds (5, hide_notification_scheduled, user_data); - window->event_to_delete = g_new0 (GcalEventData, 1); - window->event_to_delete->source = gcal_event_get_source (event); - window->event_to_delete->event_component = gcal_event_get_component (event); - - uuid = gcal_event_get_uid (event); + g_set_object (&window->event_to_delete, event); /* hide widget of the event */ - widgets = gcal_view_get_children_by_uuid (view, uuid); + widgets = gcal_view_get_children_by_uuid (view, gcal_event_get_uid (event)); g_list_foreach (widgets, (GFunc) gtk_widget_hide, NULL); g_list_free (widgets); @@ -1253,10 +1251,10 @@ remove_event (GtkWidget *notification, if (window->event_to_delete != NULL) { gcal_manager_remove_event (window->manager, - window->event_to_delete->source, - window->event_to_delete->event_component); + gcal_event_get_source (window->event_to_delete), + gcal_event_get_component (window->event_to_delete)); - g_clear_pointer (&window->event_to_delete, g_free); + g_clear_object (&window->event_to_delete); } } @@ -1265,22 +1263,22 @@ undo_remove_action (GtkButton *button, gpointer user_data) { GcalWindow *window; - gchar *uuid; + GList *widgets; window = GCAL_WINDOW (user_data); + widgets = gcal_view_get_children_by_uuid (GCAL_VIEW (window->views[window->active_view]), + gcal_event_get_uid (window->event_to_delete)); - if (window->event_to_delete != NULL) - { - GList *widgets; - uuid = get_uuid_from_component (window->event_to_delete->source, window->event_to_delete->event_component); - widgets = gcal_view_get_children_by_uuid (GCAL_VIEW (window->views[window->active_view]), uuid); - g_list_foreach (widgets, (GFunc) gtk_widget_show, NULL); + /* Show the hidden to-be-deleted events */ + g_list_foreach (widgets, (GFunc) gtk_widget_show, NULL); - g_object_unref (window->event_to_delete->event_component); - g_clear_pointer (&window->event_to_delete, g_free); - g_list_free (widgets); - g_free (uuid); - } + /* Clear the event to delete */ + g_clear_object (&window->event_to_delete); + + /* Hide the notification */ + hide_notification (window, NULL); + + g_list_free (widgets); } static gboolean