From a05d1148599fc9433a329a802bc123f673bfc0c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erick=20P=C3=A9rez=20Castellanos?= Date: Thu, 16 Oct 2014 01:50:00 -0400 Subject: [PATCH] window: add :manager property to construction Since a pointer to the GcalManager instance it's needed at construction time and GtkWindow::application property is not set as construction property. We need to add this property to have a reference to pass to the instantiated views. Just like the views, this isn't ref/copied or anything, it's just a dummy pointer. The application objects is the respnsible of handling GcalManager instance initialization and destruction. --- src/gcal-window.c | 63 +++++++++++++++++++++++++---------------------- 1 file changed, 33 insertions(+), 30 deletions(-) diff --git a/src/gcal-window.c b/src/gcal-window.c index 4c7beeea..2e47d981 100644 --- a/src/gcal-window.c +++ b/src/gcal-window.c @@ -73,6 +73,7 @@ typedef struct GtkWidget *views [5]; /* day, week, month, year, list */ GtkWidget *edit_dialog; + GcalManager *manager; GcalWindowViewType active_view; icaltimetype *active_date; @@ -94,7 +95,8 @@ enum PROP_0, PROP_ACTIVE_VIEW, PROP_ACTIVE_DATE, - PROP_NEW_EVENT_MODE + PROP_NEW_EVENT_MODE, + PROP_MANAGER }; #define SAVE_GEOMETRY_ID_TIMEOUT 100 /* ms */ @@ -135,8 +137,6 @@ static gboolean place_new_event_widget (GtkWidget *p static void close_new_event_widget (GtkButton *button, gpointer user_data); -static GcalManager* get_manager (GcalWindow *window); - static void create_notification (GcalWindow *window); static void hide_notification (GtkWidget *button, @@ -252,10 +252,9 @@ date_updated (GtkButton *button, if (move_today) { - GcalManager *manager; - - manager = get_manager (GCAL_WINDOW (user_data)); - *(priv->active_date) = icaltime_current_time_with_zone (gcal_manager_get_system_timezone (manager)); + *(priv->active_date) = + icaltime_current_time_with_zone ( + gcal_manager_get_system_timezone (priv->manager)); } else { @@ -490,7 +489,6 @@ prepare_new_event_widget (GcalWindow *window) { GcalWindowPrivate *priv; - GcalManager *manager; gchar *uid; struct tm tm_date; @@ -511,14 +509,13 @@ prepare_new_event_widget (GcalWindow *window) gcal_new_event_widget_set_title (new_widget, title_date); g_free (title_date); - manager = get_manager (window); - /* FIXME: do this somehow since GcalManager doesn't keep a list store of calendars anymore, and this is a stub method */ - gcal_new_event_widget_set_calendars (new_widget, - GTK_TREE_MODEL (gcal_manager_get_sources_model (manager))); + gcal_new_event_widget_set_calendars ( + new_widget, + GTK_TREE_MODEL (gcal_manager_get_sources_model (priv->manager))); - uid = gcal_manager_get_default_source (manager); + uid = gcal_manager_get_default_source (priv->manager); gcal_new_event_widget_set_default_calendar (new_widget, uid); g_free (uid); @@ -605,15 +602,6 @@ close_new_event_widget (GtkButton *button, set_new_event_mode (GCAL_WINDOW (user_data), FALSE); } -static GcalManager* -get_manager (GcalWindow *window) -{ - GcalApplication *app; - app = GCAL_APPLICATION (gtk_window_get_application (GTK_WINDOW (window))); - - return gcal_application_get_manager (app); -} - static void create_notification (GcalWindow *window) { @@ -706,7 +694,7 @@ create_event (gpointer user_data, summary = gcal_new_event_widget_get_summary (new_widget); /* create the event */ - gcal_manager_create_event (get_manager (GCAL_WINDOW (user_data)), + gcal_manager_create_event (priv->manager, uid, summary, priv->event_creation_data->start_date, priv->event_creation_data->end_date); @@ -749,7 +737,7 @@ init_edit_dialog (GcalWindow *window) gtk_window_set_transient_for (GTK_WINDOW (priv->edit_dialog), GTK_WINDOW (window)); gcal_edit_dialog_set_manager (GCAL_EDIT_DIALOG (priv->edit_dialog), - get_manager (window)); + priv->manager); /* FIXME: check if really hides edit-dialog */ g_signal_connect (priv->edit_dialog, @@ -841,6 +829,15 @@ gcal_window_class_init(GcalWindowClass *klass) "Whether the window is in new-event-mode or not", FALSE, G_PARAM_READWRITE)); + + g_object_class_install_property ( + object_class, + PROP_MANAGER, + g_param_spec_pointer ("manager", + "The manager object", + "A weak reference to the app manager object", + G_PARAM_CONSTRUCT_ONLY | + G_PARAM_READWRITE)); } static void @@ -962,7 +959,8 @@ gcal_window_constructed (GObject *object) gtk_widget_get_style_context (priv->views_stack), "views"); - priv->views[GCAL_WINDOW_VIEW_WEEK] = gcal_week_view_new (); + priv->views[GCAL_WINDOW_VIEW_WEEK] = + gcal_week_view_new (priv->manager); gtk_stack_add_titled (GTK_STACK (priv->views_stack), priv->views[GCAL_WINDOW_VIEW_WEEK], "week", _("Week")); @@ -970,7 +968,8 @@ gcal_window_constructed (GObject *object) priv->views[GCAL_WINDOW_VIEW_WEEK], "active-date", G_BINDING_DEFAULT); - priv->views[GCAL_WINDOW_VIEW_MONTH] = gcal_month_view_new (); + priv->views[GCAL_WINDOW_VIEW_MONTH] = + gcal_month_view_new (priv->manager); gtk_stack_add_titled (GTK_STACK (priv->views_stack), priv->views[GCAL_WINDOW_VIEW_MONTH], "month", _("Month")); @@ -978,7 +977,8 @@ gcal_window_constructed (GObject *object) priv->views[GCAL_WINDOW_VIEW_MONTH], "active-date", G_BINDING_DEFAULT); - priv->views[GCAL_WINDOW_VIEW_YEAR] = gcal_year_view_new (); + priv->views[GCAL_WINDOW_VIEW_YEAR] = + gcal_year_view_new (priv->manager); gtk_stack_add_titled (GTK_STACK (priv->views_stack), priv->views[GCAL_WINDOW_VIEW_YEAR], "year", _("Year")); @@ -1068,6 +1068,9 @@ gcal_window_set_property (GObject *object, case PROP_NEW_EVENT_MODE: set_new_event_mode (GCAL_WINDOW (object), g_value_get_boolean (value)); return; + case PROP_MANAGER: + priv->manager = g_value_get_pointer (value); + return; } G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); @@ -1242,7 +1245,6 @@ gcal_window_remove_event (GtkWidget *notification, gpointer user_data) { GcalWindowPrivate *priv; - GcalManager *manager; gchar **tokens; priv = gcal_window_get_instance_private (GCAL_WINDOW (user_data)); @@ -1252,10 +1254,9 @@ gcal_window_remove_event (GtkWidget *notification, if (priv->event_to_delete != NULL) { - manager = get_manager (GCAL_WINDOW (user_data)); tokens = g_strsplit (priv->event_to_delete, ":", 2); - gcal_manager_remove_event (manager, tokens[0], tokens[1]); + gcal_manager_remove_event (priv->manager, tokens[0], tokens[1]); g_strfreev (tokens); g_free (priv->event_to_delete); @@ -1310,6 +1311,8 @@ gcal_window_new_with_view (GcalApplication *app, GTK_APPLICATION (app), "active-date", &date, + "manager", + manager, NULL); /* hooking signals */