diff options
-rw-r--r-- | calendar/gui/e-cal-model-memos.c | 2 | ||||
-rw-r--r-- | calendar/gui/e-cal-model-memos.h | 4 | ||||
-rw-r--r-- | calendar/gui/e-cal-model-tasks.c | 2 | ||||
-rw-r--r-- | calendar/gui/e-cal-model-tasks.h | 2 | ||||
-rw-r--r-- | calendar/gui/e-calendar-table.c | 264 | ||||
-rw-r--r-- | calendar/gui/e-calendar-table.h | 6 | ||||
-rw-r--r-- | calendar/gui/e-memo-table.c | 259 | ||||
-rw-r--r-- | calendar/gui/e-memo-table.h | 6 | ||||
-rw-r--r-- | calendar/modules/e-cal-shell-content.c | 24 | ||||
-rw-r--r-- | calendar/modules/e-cal-shell-view-memopad.c | 1 | ||||
-rw-r--r-- | calendar/modules/e-cal-shell-view-private.c | 96 | ||||
-rw-r--r-- | calendar/modules/e-cal-shell-view-private.h | 4 | ||||
-rw-r--r-- | calendar/modules/e-cal-shell-view-taskpad.c | 1 | ||||
-rw-r--r-- | calendar/modules/e-memo-shell-content.c | 59 | ||||
-rw-r--r-- | calendar/modules/e-memo-shell-content.h | 2 | ||||
-rw-r--r-- | calendar/modules/e-task-shell-content.c | 59 | ||||
-rw-r--r-- | calendar/modules/e-task-shell-content.h | 3 | ||||
-rw-r--r-- | shell/e-shell-view.c | 32 | ||||
-rw-r--r-- | shell/e-shell-view.h | 2 | ||||
-rw-r--r-- | shell/e-shell-window.c | 9 |
20 files changed, 551 insertions, 286 deletions
diff --git a/calendar/gui/e-cal-model-memos.c b/calendar/gui/e-cal-model-memos.c index ffb1c8a488..07df7c7460 100644 --- a/calendar/gui/e-cal-model-memos.c +++ b/calendar/gui/e-cal-model-memos.c @@ -261,7 +261,7 @@ ecmm_fill_component_from_model (ECalModel *model, ECalModelComponent *comp_data, /** * e_cal_model_memos_new */ -ECalModelMemos * +ECalModel * e_cal_model_memos_new (void) { return g_object_new (E_TYPE_CAL_MODEL_MEMOS, NULL); diff --git a/calendar/gui/e-cal-model-memos.h b/calendar/gui/e-cal-model-memos.h index 5417c9c09b..d02e51c9f7 100644 --- a/calendar/gui/e-cal-model-memos.h +++ b/calendar/gui/e-cal-model-memos.h @@ -55,8 +55,8 @@ typedef struct { ECalModelClass parent_class; } ECalModelMemosClass; -GType e_cal_model_memos_get_type (void); -ECalModelMemos *e_cal_model_memos_new (void); +GType e_cal_model_memos_get_type (void); +ECalModel * e_cal_model_memos_new (void); G_END_DECLS diff --git a/calendar/gui/e-cal-model-tasks.c b/calendar/gui/e-cal-model-tasks.c index 095cfabc4b..e4d7304c25 100644 --- a/calendar/gui/e-cal-model-tasks.c +++ b/calendar/gui/e-cal-model-tasks.c @@ -1108,7 +1108,7 @@ ecmt_fill_component_from_model (ECalModel *model, ECalModelComponent *comp_data, /** * e_cal_model_tasks_new */ -ECalModelTasks * +ECalModel * e_cal_model_tasks_new (void) { return g_object_new (E_TYPE_CAL_MODEL_TASKS, NULL); diff --git a/calendar/gui/e-cal-model-tasks.h b/calendar/gui/e-cal-model-tasks.h index 40d651e583..c71b737724 100644 --- a/calendar/gui/e-cal-model-tasks.h +++ b/calendar/gui/e-cal-model-tasks.h @@ -64,7 +64,7 @@ typedef struct { } ECalModelTasksClass; GType e_cal_model_tasks_get_type (void); -ECalModelTasks *e_cal_model_tasks_new (void); +ECalModel * e_cal_model_tasks_new (void); void e_cal_model_tasks_mark_comp_complete (ECalModelTasks *model, ECalModelComponent *comp_data); void e_cal_model_tasks_mark_comp_incomplete (ECalModelTasks *model, ECalModelComponent *comp_data); diff --git a/calendar/gui/e-calendar-table.c b/calendar/gui/e-calendar-table.c index 4c029d46f3..2929cddf9c 100644 --- a/calendar/gui/e-calendar-table.c +++ b/calendar/gui/e-calendar-table.c @@ -65,10 +65,12 @@ struct _ECalendarTablePrivate { gpointer shell_view; /* weak pointer */ + ECalModel *model; }; enum { PROP_0, + PROP_MODEL, PROP_SHELL_VIEW }; @@ -238,9 +240,11 @@ calendar_table_double_click_cb (ECalendarTable *cal_table, gint col, GdkEvent *event) { + ECalModel *model; ECalModelComponent *comp_data; - comp_data = e_cal_model_get_component_at (cal_table->model, row); + model = e_calendar_table_get_model (cal_table); + comp_data = e_cal_model_get_component_at (model, row); calendar_table_emit_open_component (cal_table, comp_data); } @@ -270,6 +274,7 @@ calendar_table_query_tooltip_cb (ECalendarTable *cal_table, gboolean keyboard_mode, GtkTooltip *tooltip) { + ECalModel *model; ECalModelComponent *comp_data; int row = -1, col = -1; GtkWidget *box, *l, *w; @@ -304,7 +309,8 @@ calendar_table_query_tooltip_cb (ECalendarTable *cal_table, if (esm && esm->sorter && e_sorter_needs_sorting (esm->sorter)) row = e_sorter_sorted_to_model (esm->sorter, row); - comp_data = e_cal_model_get_component_at (cal_table->model, row); + model = e_calendar_table_get_model (cal_table); + comp_data = e_cal_model_get_component_at (model, row); if (!comp_data || !comp_data->icalcomp) return FALSE; @@ -375,7 +381,7 @@ calendar_table_query_tooltip_cb (ECalendarTable *cal_table, e_cal_component_get_dtstart (new_comp, &dtstart); e_cal_component_get_due (new_comp, &dtdue); - default_zone = e_cal_model_get_timezone (cal_table->model); + default_zone = e_cal_model_get_timezone (model); if (dtstart.tzid) { zone = icalcomponent_get_timezone (e_cal_component_get_icalcomponent (new_comp), dtstart.tzid); @@ -487,6 +493,29 @@ calendar_table_right_click_cb (ECalendarTable *cal_table, } static void +calendar_table_set_model (ECalendarTable *cal_table, + ECalModel *model) +{ + g_return_if_fail (cal_table->priv->model == NULL); + + cal_table->priv->model = g_object_ref (model); + + g_signal_connect_swapped ( + model, "row_appended", + G_CALLBACK (calendar_table_emit_user_created), cal_table); + + g_signal_connect_swapped ( + model, "cal-view-progress", + G_CALLBACK (calendar_table_model_cal_view_progress_cb), + cal_table); + + g_signal_connect_swapped ( + model, "cal-view-done", + G_CALLBACK (calendar_table_model_cal_view_done_cb), + cal_table); +} + +static void calendar_table_set_shell_view (ECalendarTable *cal_table, EShellView *shell_view) { @@ -506,6 +535,12 @@ calendar_table_set_property (GObject *object, GParamSpec *pspec) { switch (property_id) { + case PROP_MODEL: + calendar_table_set_model ( + E_CALENDAR_TABLE (object), + g_value_get_object (value)); + return; + case PROP_SHELL_VIEW: calendar_table_set_shell_view ( E_CALENDAR_TABLE (object), @@ -523,6 +558,12 @@ calendar_table_get_property (GObject *object, GParamSpec *pspec) { switch (property_id) { + case PROP_MODEL: + g_value_set_object ( + value, e_calendar_table_get_model ( + E_CALENDAR_TABLE (object))); + return; + case PROP_SHELL_VIEW: g_value_set_object ( value, e_calendar_table_get_shell_view ( @@ -536,13 +577,13 @@ calendar_table_get_property (GObject *object, static void calendar_table_dispose (GObject *object) { - ECalendarTable *cal_table; + ECalendarTablePrivate *priv; - cal_table = E_CALENDAR_TABLE (object); + priv = E_CALENDAR_TABLE_GET_PRIVATE (object); - if (cal_table->model != NULL) { - g_object_unref (cal_table->model); - cal_table->model = NULL; + if (priv->model != NULL) { + g_object_unref (priv->model); + priv->model = NULL; } /* Chain up to parent's dispose() method. */ @@ -550,75 +591,11 @@ calendar_table_dispose (GObject *object) } static void -calendar_table_class_init (ECalendarTableClass *class) -{ - GObjectClass *object_class; - - parent_class = g_type_class_peek_parent (class); - g_type_class_add_private (class, sizeof (ECalendarTablePrivate)); - - object_class = G_OBJECT_CLASS (class); - object_class->set_property = calendar_table_set_property; - object_class->get_property = calendar_table_get_property; - object_class->dispose = calendar_table_dispose; - - g_object_class_install_property ( - object_class, - PROP_SHELL_VIEW, - g_param_spec_object ( - "shell-view", - _("Shell View"), - NULL, - E_TYPE_SHELL_VIEW, - G_PARAM_READWRITE | - G_PARAM_CONSTRUCT_ONLY)); - - signals[OPEN_COMPONENT] = g_signal_new ( - "open-component", - G_TYPE_FROM_CLASS (class), - G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, - G_STRUCT_OFFSET (ECalendarTableClass, open_component), - NULL, NULL, - g_cclosure_marshal_VOID__OBJECT, - G_TYPE_NONE, 1, - E_TYPE_CAL_MODEL_COMPONENT); - - signals[POPUP_EVENT] = g_signal_new ( - "popup-event", - G_TYPE_FROM_CLASS (class), - G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, - G_STRUCT_OFFSET (ECalendarTableClass, popup_event), - NULL, NULL, - g_cclosure_marshal_VOID__BOXED, - G_TYPE_NONE, 1, - GDK_TYPE_EVENT | G_SIGNAL_TYPE_STATIC_SCOPE); - - signals[STATUS_MESSAGE] = g_signal_new ( - "status-message", - G_TYPE_FROM_CLASS (class), - G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, - G_STRUCT_OFFSET (ECalendarTableClass, status_message), - NULL, NULL, - g_cclosure_marshal_VOID__STRING, - G_TYPE_NONE, 1, - G_TYPE_STRING); - - signals[USER_CREATED] = g_signal_new ( - "user-created", - G_TYPE_FROM_CLASS (class), - G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, - G_STRUCT_OFFSET (ECalendarTableClass, user_created), - NULL, NULL, - g_cclosure_marshal_VOID__VOID, - G_TYPE_NONE, 0); - - clipboard_atom = gdk_atom_intern ("CLIPBOARD", FALSE); -} - -static void -calendar_table_init (ECalendarTable *cal_table) +calendar_table_constructed (GObject *object) { + ECalendarTable *cal_table; GtkWidget *widget; + ECalModel *model; ETable *table; ECell *cell, *popup_cell; ETableExtras *extras; @@ -628,25 +605,8 @@ calendar_table_init (ECalendarTable *cal_table) AtkObject *a11y; gchar *etspecfile; - cal_table->priv = E_CALENDAR_TABLE_GET_PRIVATE (cal_table); - - /* Create the model */ - - cal_table->model = (ECalModel *) e_cal_model_tasks_new (); - - g_signal_connect_swapped ( - cal_table->model, "row_appended", - G_CALLBACK (calendar_table_emit_user_created), cal_table); - - g_signal_connect_swapped ( - cal_table->model, "cal-view-progress", - G_CALLBACK (calendar_table_model_cal_view_progress_cb), - cal_table); - - g_signal_connect_swapped ( - cal_table->model, "cal-view-done", - G_CALLBACK (calendar_table_model_cal_view_done_cb), - cal_table); + cal_table = E_CALENDAR_TABLE (object); + model = e_calendar_table_get_model (cal_table); /* Create the header columns */ @@ -837,7 +797,7 @@ calendar_table_init (ECalendarTable *cal_table) etspecfile = g_build_filename ( EVOLUTION_ETSPECDIR, "e-calendar-table.etspec", NULL); widget = e_table_scrolled_new_from_spec_file ( - E_TABLE_MODEL (cal_table->model), extras, etspecfile, NULL); + E_TABLE_MODEL (model), extras, etspecfile, NULL); gtk_table_attach ( GTK_TABLE (cal_table), widget, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); @@ -865,6 +825,90 @@ calendar_table_init (ECalendarTable *cal_table) atk_object_set_name (a11y, _("Tasks")); } +static void +calendar_table_class_init (ECalendarTableClass *class) +{ + GObjectClass *object_class; + + parent_class = g_type_class_peek_parent (class); + g_type_class_add_private (class, sizeof (ECalendarTablePrivate)); + + object_class = G_OBJECT_CLASS (class); + object_class->set_property = calendar_table_set_property; + object_class->get_property = calendar_table_get_property; + object_class->dispose = calendar_table_dispose; + object_class->constructed = calendar_table_constructed; + + g_object_class_install_property ( + object_class, + PROP_MODEL, + g_param_spec_object ( + "model", + _("Model"), + NULL, + E_TYPE_CAL_MODEL, + G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); + + g_object_class_install_property ( + object_class, + PROP_SHELL_VIEW, + g_param_spec_object ( + "shell-view", + _("Shell View"), + NULL, + E_TYPE_SHELL_VIEW, + G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); + + signals[OPEN_COMPONENT] = g_signal_new ( + "open-component", + G_TYPE_FROM_CLASS (class), + G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, + G_STRUCT_OFFSET (ECalendarTableClass, open_component), + NULL, NULL, + g_cclosure_marshal_VOID__OBJECT, + G_TYPE_NONE, 1, + E_TYPE_CAL_MODEL_COMPONENT); + + signals[POPUP_EVENT] = g_signal_new ( + "popup-event", + G_TYPE_FROM_CLASS (class), + G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, + G_STRUCT_OFFSET (ECalendarTableClass, popup_event), + NULL, NULL, + g_cclosure_marshal_VOID__BOXED, + G_TYPE_NONE, 1, + GDK_TYPE_EVENT | G_SIGNAL_TYPE_STATIC_SCOPE); + + signals[STATUS_MESSAGE] = g_signal_new ( + "status-message", + G_TYPE_FROM_CLASS (class), + G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, + G_STRUCT_OFFSET (ECalendarTableClass, status_message), + NULL, NULL, + g_cclosure_marshal_VOID__STRING, + G_TYPE_NONE, 1, + G_TYPE_STRING); + + signals[USER_CREATED] = g_signal_new ( + "user-created", + G_TYPE_FROM_CLASS (class), + G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, + G_STRUCT_OFFSET (ECalendarTableClass, user_created), + NULL, NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 0); + + clipboard_atom = gdk_atom_intern ("CLIPBOARD", FALSE); +} + +static void +calendar_table_init (ECalendarTable *cal_table) +{ + cal_table->priv = E_CALENDAR_TABLE_GET_PRIVATE (cal_table); +} + GType e_calendar_table_get_type (void) { @@ -894,19 +938,22 @@ e_calendar_table_get_type (void) /** * e_calendar_table_new: * @shell_view: an #EShellView + * @model: an #ECalModel for the table * * Returns a new #ECalendarTable. * * Returns: a new #ECalendarTable **/ GtkWidget * -e_calendar_table_new (EShellView *shell_view) +e_calendar_table_new (EShellView *shell_view, + ECalModel *model) { g_return_val_if_fail (E_IS_SHELL_VIEW (shell_view), NULL); + g_return_val_if_fail (E_IS_CAL_MODEL (model), NULL); return g_object_new ( E_TYPE_CALENDAR_TABLE, - "shell-view", shell_view, NULL); + "model", model, "shell-view", shell_view, NULL); } EShellView * @@ -928,10 +975,9 @@ e_calendar_table_get_shell_view (ECalendarTable *cal_table) ECalModel * e_calendar_table_get_model (ECalendarTable *cal_table) { - g_return_val_if_fail (cal_table != NULL, NULL); g_return_val_if_fail (E_IS_CALENDAR_TABLE (cal_table), NULL); - return cal_table->model; + return cal_table->priv->model; } @@ -975,9 +1021,11 @@ get_selected_row_cb (int model_row, gpointer data) static ECalModelComponent * get_selected_comp (ECalendarTable *cal_table) { + ECalModel *model; ETable *etable; int row; + model = e_calendar_table_get_model (cal_table); etable = e_calendar_table_get_table (cal_table); if (e_table_selected_count (etable) != 1) return NULL; @@ -988,7 +1036,7 @@ get_selected_comp (ECalendarTable *cal_table) &row); g_return_val_if_fail (row != -1, NULL); - return e_cal_model_get_component_at (cal_table->model, row); + return e_cal_model_get_component_at (model, row); } struct get_selected_uids_closure { @@ -1000,12 +1048,12 @@ struct get_selected_uids_closure { static void add_uid_cb (int model_row, gpointer data) { - struct get_selected_uids_closure *closure; + struct get_selected_uids_closure *closure = data; ECalModelComponent *comp_data; + ECalModel *model; - closure = data; - - comp_data = e_cal_model_get_component_at (closure->cal_table->model, model_row); + model = e_calendar_table_get_model (closure->cal_table); + comp_data = e_cal_model_get_component_at (model, model_row); closure->objects = g_slist_prepend (closure->objects, comp_data); } @@ -1221,6 +1269,7 @@ copy_row_cb (int model_row, gpointer data) { ECalendarTable *cal_table; ECalModelComponent *comp_data; + ECalModel *model; gchar *comp_str; icalcomponent *child; @@ -1228,7 +1277,8 @@ copy_row_cb (int model_row, gpointer data) g_return_if_fail (cal_table->tmp_vcal != NULL); - comp_data = e_cal_model_get_component_at (cal_table->model, model_row); + model = e_calendar_table_get_model (cal_table); + comp_data = e_cal_model_get_component_at (model, model_row); if (!comp_data) return; @@ -1289,6 +1339,7 @@ clipboard_get_calendar_data (ECalendarTable *cal_table, const gchar *text) icalcomponent *icalcomp; char *uid; ECalComponent *comp; + ECalModel *model; ECal *client; icalcomponent_kind kind; const gchar *status_message; @@ -1311,7 +1362,8 @@ clipboard_get_calendar_data (ECalendarTable *cal_table, const gchar *text) return; } - client = e_cal_model_get_default_client (cal_table->model); + model = e_calendar_table_get_model (cal_table); + client = e_cal_model_get_default_client (model); status_message = _("Updating objects"); calendar_table_emit_status_message (cal_table, status_message, -1.0); diff --git a/calendar/gui/e-calendar-table.h b/calendar/gui/e-calendar-table.h index edd9b2b53f..4f9bced553 100644 --- a/calendar/gui/e-calendar-table.h +++ b/calendar/gui/e-calendar-table.h @@ -61,9 +61,6 @@ typedef struct _ECalendarTablePrivate ECalendarTablePrivate; struct _ECalendarTable { GtkTable parent; - /* The model that we use */ - ECalModel *model; - GtkWidget *etable; /* The ECell used to view & edit dates. */ @@ -90,7 +87,8 @@ struct _ECalendarTableClass { }; GType e_calendar_table_get_type (void); -GtkWidget * e_calendar_table_new (EShellView *shell_view); +GtkWidget * e_calendar_table_new (EShellView *shell_view, + ECalModel *model); ECalModel * e_calendar_table_get_model (ECalendarTable *cal_table); ETable * e_calendar_table_get_table (ECalendarTable *cal_table); EShellView * e_calendar_table_get_shell_view (ECalendarTable *cal_table); diff --git a/calendar/gui/e-memo-table.c b/calendar/gui/e-memo-table.c index b844030264..1fc947b7ea 100644 --- a/calendar/gui/e-memo-table.c +++ b/calendar/gui/e-memo-table.c @@ -66,10 +66,12 @@ struct _EMemoTablePrivate { gpointer shell_view; /* weak pointer */ + ECalModel *model; }; enum { PROP_0, + PROP_MODEL, PROP_SHELL_VIEW }; @@ -176,9 +178,11 @@ memo_table_double_click_cb (EMemoTable *memo_table, gint col, GdkEvent *event) { + ECalModel *model; ECalModelComponent *comp_data; - comp_data = e_cal_model_get_component_at (memo_table->model, row); + model = e_memo_table_get_model (memo_table); + comp_data = e_cal_model_get_component_at (model, row); memo_table_emit_open_component (memo_table, comp_data); } @@ -208,6 +212,7 @@ memo_table_query_tooltip_cb (EMemoTable *memo_table, gboolean keyboard_mode, GtkTooltip *tooltip) { + ECalModel *model; ECalModelComponent *comp_data; int row = -1, col = -1; GtkWidget *box, *l, *w; @@ -242,7 +247,8 @@ memo_table_query_tooltip_cb (EMemoTable *memo_table, if (esm && esm->sorter && e_sorter_needs_sorting (esm->sorter)) row = e_sorter_sorted_to_model (esm->sorter, row); - comp_data = e_cal_model_get_component_at (memo_table->model, row); + model = e_memo_table_get_model (memo_table); + comp_data = e_cal_model_get_component_at (model, row); if (!comp_data || !comp_data->icalcomp) return FALSE; @@ -313,7 +319,7 @@ memo_table_query_tooltip_cb (EMemoTable *memo_table, e_cal_component_get_dtstart (new_comp, &dtstart); e_cal_component_get_due (new_comp, &dtdue); - default_zone = e_cal_model_get_timezone (memo_table->model); + default_zone = e_cal_model_get_timezone (model); if (dtstart.tzid) { zone = icalcomponent_get_timezone (e_cal_component_get_icalcomponent (new_comp), dtstart.tzid); @@ -425,6 +431,29 @@ memo_table_right_click_cb (EMemoTable *memo_table, } static void +memo_table_set_model (EMemoTable *memo_table, + ECalModel *model) +{ + g_return_if_fail (memo_table->priv->model == NULL); + + memo_table->priv->model = g_object_ref (model); + + g_signal_connect_swapped ( + model, "row-appended", + G_CALLBACK (memo_table_emit_user_created), memo_table); + + g_signal_connect_swapped ( + model, "cal-view-progress", + G_CALLBACK (memo_table_model_cal_view_progress_cb), + memo_table); + + g_signal_connect_swapped ( + model, "cal-view-done", + G_CALLBACK (memo_table_model_cal_view_done_cb), + memo_table); +} + +static void memo_table_set_shell_view (EMemoTable *memo_table, EShellView *shell_view) { @@ -444,6 +473,12 @@ memo_table_set_property (GObject *object, GParamSpec *pspec) { switch (property_id) { + case PROP_MODEL: + memo_table_set_model ( + E_MEMO_TABLE (object), + g_value_get_object (value)); + return; + case PROP_SHELL_VIEW: memo_table_set_shell_view ( E_MEMO_TABLE (object), @@ -461,6 +496,12 @@ memo_table_get_property (GObject *object, GParamSpec *pspec) { switch (property_id) { + case PROP_MODEL: + g_value_set_object ( + value, e_memo_table_get_model ( + E_MEMO_TABLE (object))); + return; + case PROP_SHELL_VIEW: g_value_set_object ( value, e_memo_table_get_shell_view ( @@ -474,13 +515,13 @@ memo_table_get_property (GObject *object, static void memo_table_dispose (GObject *object) { - EMemoTable *memo_table; + EMemoTablePrivate *priv; - memo_table = E_MEMO_TABLE (object); + priv = E_MEMO_TABLE_GET_PRIVATE (object); - if (memo_table->model != NULL) { - g_object_unref (memo_table->model); - memo_table->model = NULL; + if (priv->model != NULL) { + g_object_unref (priv->model); + priv->model = NULL; } /* Chain up to parent's dispose() method. */ @@ -488,75 +529,11 @@ memo_table_dispose (GObject *object) } static void -memo_table_class_init (EMemoTableClass *class) -{ - GObjectClass *object_class; - - parent_class = g_type_class_peek_parent (class); - g_type_class_add_private (class, sizeof (EMemoTablePrivate)); - - object_class = G_OBJECT_CLASS (class); - object_class->set_property = memo_table_set_property; - object_class->get_property = memo_table_get_property; - object_class->dispose = memo_table_dispose; - - g_object_class_install_property ( - object_class, - PROP_SHELL_VIEW, - g_param_spec_object ( - "shell-view", - _("Shell View"), - NULL, - E_TYPE_SHELL_VIEW, - G_PARAM_READWRITE | - G_PARAM_CONSTRUCT_ONLY)); - - signals[OPEN_COMPONENT] = g_signal_new ( - "open-component", - G_TYPE_FROM_CLASS (class), - G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, - G_STRUCT_OFFSET (EMemoTableClass, open_component), - NULL, NULL, - g_cclosure_marshal_VOID__OBJECT, - G_TYPE_NONE, 1, - E_TYPE_CAL_MODEL_COMPONENT); - - signals[POPUP_EVENT] = g_signal_new ( - "popup-event", - G_TYPE_FROM_CLASS (class), - G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, - G_STRUCT_OFFSET (EMemoTableClass, popup_event), - NULL, NULL, - g_cclosure_marshal_VOID__BOXED, - G_TYPE_NONE, 1, - GDK_TYPE_EVENT | G_SIGNAL_TYPE_STATIC_SCOPE); - - signals[STATUS_MESSAGE] = g_signal_new ( - "status-message", - G_TYPE_FROM_CLASS (class), - G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, - G_STRUCT_OFFSET (EMemoTableClass, status_message), - NULL, NULL, - g_cclosure_marshal_VOID__STRING, - G_TYPE_NONE, 1, - G_TYPE_STRING); - - signals[USER_CREATED] = g_signal_new ( - "user-created", - G_TYPE_FROM_CLASS (class), - G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, - G_STRUCT_OFFSET (EMemoTableClass, user_created), - NULL, NULL, - g_cclosure_marshal_VOID__VOID, - G_TYPE_NONE, 0); - - clipboard_atom = gdk_atom_intern ("CLIPBOARD", FALSE); -} - -static void -memo_table_init (EMemoTable *memo_table) +memo_table_constructed (GObject *object) { + EMemoTable *memo_table; GtkWidget *widget; + ECalModel *model; ETable *table; ECell *cell, *popup_cell; ETableExtras *extras; @@ -564,25 +541,8 @@ memo_table_init (EMemoTable *memo_table) AtkObject *a11y; gchar *etspecfile; - memo_table->priv = E_MEMO_TABLE_GET_PRIVATE (memo_table); - - /* Create the model */ - - memo_table->model = (ECalModel *) e_cal_model_memos_new (); - - g_signal_connect_swapped ( - memo_table->model, "row-appended", - G_CALLBACK (memo_table_emit_user_created), memo_table); - - g_signal_connect_swapped ( - memo_table->model, "cal-view-progress", - G_CALLBACK (memo_table_model_cal_view_progress_cb), - memo_table); - - g_signal_connect_swapped ( - memo_table->model, "cal-view-done", - G_CALLBACK (memo_table_model_cal_view_done_cb), - memo_table); + memo_table = E_MEMO_TABLE (object); + model = e_memo_table_get_model (memo_table); /* Create the header columns */ @@ -632,7 +592,7 @@ memo_table_init (EMemoTable *memo_table) etspecfile = g_build_filename ( EVOLUTION_ETSPECDIR, "e-memo-table.etspec", NULL); widget = e_table_scrolled_new_from_spec_file ( - E_TABLE_MODEL (memo_table->model), extras, etspecfile, NULL); + E_TABLE_MODEL (model), extras, etspecfile, NULL); gtk_table_attach ( GTK_TABLE (memo_table), widget, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); @@ -660,6 +620,90 @@ memo_table_init (EMemoTable *memo_table) atk_object_set_name (a11y, _("Memos")); } +static void +memo_table_class_init (EMemoTableClass *class) +{ + GObjectClass *object_class; + + parent_class = g_type_class_peek_parent (class); + g_type_class_add_private (class, sizeof (EMemoTablePrivate)); + + object_class = G_OBJECT_CLASS (class); + object_class->set_property = memo_table_set_property; + object_class->get_property = memo_table_get_property; + object_class->dispose = memo_table_dispose; + object_class->constructed = memo_table_constructed; + + g_object_class_install_property ( + object_class, + PROP_MODEL, + g_param_spec_object ( + "model", + _("Model"), + NULL, + E_TYPE_CAL_MODEL, + G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); + + g_object_class_install_property ( + object_class, + PROP_SHELL_VIEW, + g_param_spec_object ( + "shell-view", + _("Shell View"), + NULL, + E_TYPE_SHELL_VIEW, + G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY)); + + signals[OPEN_COMPONENT] = g_signal_new ( + "open-component", + G_TYPE_FROM_CLASS (class), + G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, + G_STRUCT_OFFSET (EMemoTableClass, open_component), + NULL, NULL, + g_cclosure_marshal_VOID__OBJECT, + G_TYPE_NONE, 1, + E_TYPE_CAL_MODEL_COMPONENT); + + signals[POPUP_EVENT] = g_signal_new ( + "popup-event", + G_TYPE_FROM_CLASS (class), + G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, + G_STRUCT_OFFSET (EMemoTableClass, popup_event), + NULL, NULL, + g_cclosure_marshal_VOID__BOXED, + G_TYPE_NONE, 1, + GDK_TYPE_EVENT | G_SIGNAL_TYPE_STATIC_SCOPE); + + signals[STATUS_MESSAGE] = g_signal_new ( + "status-message", + G_TYPE_FROM_CLASS (class), + G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, + G_STRUCT_OFFSET (EMemoTableClass, status_message), + NULL, NULL, + g_cclosure_marshal_VOID__STRING, + G_TYPE_NONE, 1, + G_TYPE_STRING); + + signals[USER_CREATED] = g_signal_new ( + "user-created", + G_TYPE_FROM_CLASS (class), + G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, + G_STRUCT_OFFSET (EMemoTableClass, user_created), + NULL, NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 0); + + clipboard_atom = gdk_atom_intern ("CLIPBOARD", FALSE); +} + +static void +memo_table_init (EMemoTable *memo_table) +{ + memo_table->priv = E_MEMO_TABLE_GET_PRIVATE (memo_table); +} + GType e_memo_table_get_type (void) { @@ -689,19 +733,22 @@ e_memo_table_get_type (void) /** * e_memo_table_new: * @shell_view: an #EShellView + * @model: an #ECalModel for the table * * Returns a new #EMemoTable. * * Returns: a new #EMemoTable **/ GtkWidget * -e_memo_table_new (EShellView *shell_view) +e_memo_table_new (EShellView *shell_view, + ECalModel *model) { g_return_val_if_fail (E_IS_SHELL_VIEW (shell_view), NULL); + g_return_val_if_fail (E_IS_CAL_MODEL (model), NULL); return g_object_new ( E_TYPE_MEMO_TABLE, - "shell-view", shell_view, NULL); + "model", model, "shell-view", shell_view, NULL); } EShellView * @@ -726,7 +773,7 @@ e_memo_table_get_model (EMemoTable *memo_table) g_return_val_if_fail (memo_table != NULL, NULL); g_return_val_if_fail (E_IS_MEMO_TABLE (memo_table), NULL); - return memo_table->model; + return memo_table->priv->model; } @@ -770,9 +817,11 @@ get_selected_row_cb (int model_row, gpointer data) static ECalModelComponent * get_selected_comp (EMemoTable *memo_table) { + ECalModel *model; ETable *etable; int row; + model = e_memo_table_get_model (memo_table); etable = e_memo_table_get_table (memo_table); if (e_table_selected_count (etable) != 1) return NULL; @@ -783,7 +832,7 @@ get_selected_comp (EMemoTable *memo_table) &row); g_return_val_if_fail (row != -1, NULL); - return e_cal_model_get_component_at (memo_table->model, row); + return e_cal_model_get_component_at (model, row); } struct get_selected_uids_closure { @@ -797,10 +846,12 @@ add_uid_cb (int model_row, gpointer data) { struct get_selected_uids_closure *closure; ECalModelComponent *comp_data; + ECalModel *model; closure = data; - comp_data = e_cal_model_get_component_at (closure->memo_table->model, model_row); + model = e_memo_table_get_model (closure->memo_table); + comp_data = e_cal_model_get_component_at (model, model_row); closure->objects = g_slist_prepend (closure->objects, comp_data); } @@ -941,6 +992,7 @@ copy_row_cb (int model_row, gpointer data) { EMemoTable *memo_table; ECalModelComponent *comp_data; + ECalModel *model; gchar *comp_str; icalcomponent *child; @@ -948,7 +1000,8 @@ copy_row_cb (int model_row, gpointer data) g_return_if_fail (memo_table->tmp_vcal != NULL); - comp_data = e_cal_model_get_component_at (memo_table->model, model_row); + model = e_memo_table_get_model (memo_table); + comp_data = e_cal_model_get_component_at (model, model_row); if (!comp_data) return; @@ -1010,6 +1063,7 @@ clipboard_get_calendar_data (EMemoTable *memo_table, const gchar *text) char *uid; ECalComponent *comp; ECal *client; + ECalModel *model; icalcomponent_kind kind; const gchar *status_message; @@ -1031,7 +1085,8 @@ clipboard_get_calendar_data (EMemoTable *memo_table, const gchar *text) return; } - client = e_cal_model_get_default_client (memo_table->model); + model = e_memo_table_get_model (memo_table); + client = e_cal_model_get_default_client (model); status_message = _("Updating objects"); memo_table_emit_status_message (memo_table, status_message, -1.0); diff --git a/calendar/gui/e-memo-table.h b/calendar/gui/e-memo-table.h index 39838b4caa..0a13006262 100644 --- a/calendar/gui/e-memo-table.h +++ b/calendar/gui/e-memo-table.h @@ -67,9 +67,6 @@ typedef struct _EMemoTablePrivate EMemoTablePrivate; struct _EMemoTable { GtkTable parent; - /* The model that we use */ - ECalModel *model; - GtkWidget *etable; /* The ECell used to view & edit dates. */ @@ -96,7 +93,8 @@ struct _EMemoTableClass { }; GType e_memo_table_get_type (void); -GtkWidget * e_memo_table_new (EShellView *shell_view); +GtkWidget * e_memo_table_new (EShellView *shell_view, + ECalModel *model); ECalModel * e_memo_table_get_model (EMemoTable *memo_table); ETable * e_memo_table_get_table (EMemoTable *memo_table); EShellView * e_memo_table_get_shell_view (EMemoTable *memo_table); diff --git a/calendar/modules/e-cal-shell-content.c b/calendar/modules/e-cal-shell-content.c index f8bd9f6ddd..865ae7de5a 100644 --- a/calendar/modules/e-cal-shell-content.c +++ b/calendar/modules/e-cal-shell-content.c @@ -304,10 +304,15 @@ cal_shell_content_constructed (GObject *object) { ECalShellContentPrivate *priv; ECalModelCalendar *cal_model; + ECalModel *memo_model; + ECalModel *task_model; EShellContent *shell_content; EShellModule *shell_module; EShellView *shell_view; + EShellWindow *shell_window; EShellViewClass *shell_view_class; + EShellContent *foreign_content; + EShellView *foreign_view; GalViewCollection *view_collection; GalViewInstance *view_instance; GtkWidget *container; @@ -324,6 +329,7 @@ cal_shell_content_constructed (GObject *object) shell_content = E_SHELL_CONTENT (object); shell_view = e_shell_content_get_shell_view (shell_content); + shell_window = e_shell_view_get_shell_window (shell_view); shell_view_class = E_SHELL_VIEW_GET_CLASS (shell_view); view_collection = shell_view_class->view_collection; @@ -336,6 +342,17 @@ cal_shell_content_constructed (GObject *object) E_CAL_MODEL (cal_model), E_CAL_MODEL_FLAGS_EXPAND_RECURRENCES); + /* We borrow the memopad and taskpad models from the memo + * and task views, loading the views if necessary. */ + + foreign_view = e_shell_window_get_shell_view (shell_window, "memos"); + foreign_content = e_shell_view_get_shell_content (foreign_view); + g_object_get (foreign_content, "model", &memo_model, NULL); + + foreign_view = e_shell_window_get_shell_view (shell_window, "tasks"); + foreign_content = e_shell_view_get_shell_content (foreign_view); + g_object_get (foreign_content, "model", &task_model, NULL); + /* Build content widgets. */ container = GTK_WIDGET (object); @@ -454,7 +471,7 @@ cal_shell_content_constructed (GObject *object) gtk_widget_show (widget); g_free (markup); - widget = e_calendar_table_new (shell_view); + widget = e_calendar_table_new (shell_view, task_model); gtk_box_pack_start (GTK_BOX (container), widget, TRUE, TRUE, 0); priv->task_table = g_object_ref (widget); gtk_widget_show (widget); @@ -478,7 +495,7 @@ cal_shell_content_constructed (GObject *object) gtk_widget_show (widget); g_free (markup); - widget = e_memo_table_new (shell_view); + widget = e_memo_table_new (shell_view, memo_model); gtk_box_pack_start (GTK_BOX (container), widget, TRUE, TRUE, 0); priv->memo_table = g_object_ref (widget); gtk_widget_show (widget); @@ -516,6 +533,9 @@ cal_shell_content_constructed (GObject *object) object); gal_view_instance_load (view_instance); priv->view_instance = view_instance; + + g_object_unref (memo_model); + g_object_unref (task_model); } static void diff --git a/calendar/modules/e-cal-shell-view-memopad.c b/calendar/modules/e-cal-shell-view-memopad.c index 5c2bf19052..7c306fd8eb 100644 --- a/calendar/modules/e-cal-shell-view-memopad.c +++ b/calendar/modules/e-cal-shell-view-memopad.c @@ -351,7 +351,6 @@ e_cal_shell_view_memopad_actions_init (ECalShellView *cal_shell_view) gtk_action_group_add_actions ( action_group, calendar_memopad_entries, G_N_ELEMENTS (calendar_memopad_entries), cal_shell_view); - gtk_ui_manager_insert_action_group (ui_manager, action_group, 0); } void diff --git a/calendar/modules/e-cal-shell-view-private.c b/calendar/modules/e-cal-shell-view-private.c index 3b7bea2449..7f24eddd2e 100644 --- a/calendar/modules/e-cal-shell-view-private.c +++ b/calendar/modules/e-cal-shell-view-private.c @@ -25,6 +25,22 @@ #include "widgets/menus/gal-view-factory-etable.h" static void +cal_shell_view_process_completed_tasks (ECalShellView *cal_shell_view, + gboolean config_changed) +{ +#if 0 + ECalShellContent *cal_shell_content; + ECalendarTable *task_table; + + cal_shell_content = cal_shell_view->priv->cal_shell_content; + task_table = e_cal_shell_content_get_task_table (cal_shell_content); + + e_calendar_table_process_completed_tasks ( + task_table, clients, config_changed); +#endif +} + +static void cal_shell_view_update_timezone (ECalShellView *cal_shell_view) { #if 0 @@ -49,10 +65,21 @@ cal_shell_view_update_timezone (ECalShellView *cal_shell_view) } static void -cal_shell_view_timezone_changed_cb (GConfClient *client, - guint id, - GConfEntry *entry, - gpointer user_data) +cal_shell_view_config_hide_completed_tasks_changed_cb (GConfClient *client, + guint id, + GConfEntry *entry, + gpointer user_data) +{ + ECalShellView *cal_shell_view = user_data; + + /* FIXME */ +} + +static void +cal_shell_view_config_timezone_changed_cb (GConfClient *client, + guint id, + GConfEntry *entry, + gpointer user_data) { ECalShellView *cal_shell_view = user_data; @@ -197,6 +224,7 @@ e_cal_shell_view_private_init (ECalShellView *cal_shell_view, ECalShellViewPrivate *priv = cal_shell_view->priv; ESourceList *source_list; GObject *object; + guint notification_id; object = G_OBJECT (shell_view_class->type_module); source_list = g_object_get_data (object, "source-list"); @@ -227,7 +255,7 @@ e_cal_shell_view_private_constructed (ECalShellView *cal_shell_view) ECalendar *mini_calendar; EMemoTable *memo_table; ECalendarTable *task_table; - guint notification; + guint id; shell_view = E_SHELL_VIEW (cal_shell_view); shell_content = e_shell_view_get_shell_content (shell_view); @@ -249,10 +277,12 @@ e_cal_shell_view_private_constructed (ECalShellView *cal_shell_view) mini_calendar->calitem, (ECalendarItemGetTimeCallback) cal_shell_view_get_current_time, cal_shell_view, NULL); +#if 0 /* KILL-BONOBO */ g_signal_connect_swapped ( calendar, "dates-shown-changed", G_CALLBACK (e_cal_shell_view_update_sidebar), cal_shell_view); +#endif g_signal_connect_swapped ( mini_calendar, "scroll-event", @@ -291,13 +321,27 @@ e_cal_shell_view_private_constructed (ECalShellView *cal_shell_view) /* Listen for configuration changes. */ -#if 0 - notification = calendar_config_add_notification_timezone ( - cal_shell_view_timezone_changed_cb, cal_shell_view); + /* Timezone */ + id = calendar_config_add_notification_timezone ( + cal_shell_view_config_timezone_changed_cb, cal_shell_view); priv->notifications = g_list_prepend ( - priv->notifications, GUINT_TO_POINTER (notification)); + priv->notifications, GUINT_TO_POINTER (id)); cal_shell_view_update_timezone (cal_shell_view); -#endif + + /* Hide Completed Tasks (enable/units/value) */ + id = calendar_config_add_notification_hide_completed_tasks ( + cal_shell_view_config_hide_completed_tasks_changed_cb, + cal_shell_view); + priv->notifications = g_list_prepend ( + priv->notifications, GUINT_TO_POINTER (id)); + id = calendar_config_add_notification_hide_completed_tasks_units ( + cal_shell_view_config_hide_completed_tasks_changed_cb, + cal_shell_view); + priv->notifications = g_list_prepend ( + priv->notifications, GUINT_TO_POINTER (id)); + id = calendar_config_add_notification_hide_completed_tasks_value ( + cal_shell_view_config_hide_completed_tasks_changed_cb, + cal_shell_view); e_categories_register_change_listener ( G_CALLBACK (e_cal_shell_view_update_search_filter), @@ -312,6 +356,7 @@ void e_cal_shell_view_private_dispose (ECalShellView *cal_shell_view) { ECalShellViewPrivate *priv = cal_shell_view->priv; + GList *iter; DISPOSE (priv->source_list); @@ -321,26 +366,33 @@ e_cal_shell_view_private_dispose (ECalShellView *cal_shell_view) DISPOSE (priv->cal_shell_content); DISPOSE (priv->cal_shell_sidebar); - if (cal_shell_view->priv->calendar_activity != NULL) { + if (priv->calendar_activity != NULL) { /* XXX Activity is not cancellable. */ - e_activity_complete (cal_shell_view->priv->calendar_activity); - g_object_unref (cal_shell_view->priv->calendar_activity); - cal_shell_view->priv->calendar_activity = NULL; + e_activity_complete (priv->calendar_activity); + g_object_unref (priv->calendar_activity); + priv->calendar_activity = NULL; } - if (cal_shell_view->priv->memopad_activity != NULL) { + if (priv->memopad_activity != NULL) { /* XXX Activity is not cancellable. */ - e_activity_complete (cal_shell_view->priv->memopad_activity); - g_object_unref (cal_shell_view->priv->memopad_activity); - cal_shell_view->priv->memopad_activity = NULL; + e_activity_complete (priv->memopad_activity); + g_object_unref (priv->memopad_activity); + priv->memopad_activity = NULL; } - if (cal_shell_view->priv->taskpad_activity != NULL) { + if (priv->taskpad_activity != NULL) { /* XXX Activity is not cancellable. */ - e_activity_complete (cal_shell_view->priv->taskpad_activity); - g_object_unref (cal_shell_view->priv->taskpad_activity); - cal_shell_view->priv->taskpad_activity = NULL; + e_activity_complete (priv->taskpad_activity); + g_object_unref (priv->taskpad_activity); + priv->taskpad_activity = NULL; + } + + for (iter = priv->notifications; iter != NULL; iter = iter->next) { + guint notification_id = GPOINTER_TO_UINT (iter->data); + calendar_config_remove_notification (notification_id); } + g_list_free (priv->notifications); + priv->notifications = NULL; } void diff --git a/calendar/modules/e-cal-shell-view-private.h b/calendar/modules/e-cal-shell-view-private.h index f1116f9c35..66083a0903 100644 --- a/calendar/modules/e-cal-shell-view-private.h +++ b/calendar/modules/e-cal-shell-view-private.h @@ -33,6 +33,7 @@ #include "e-util/e-dialog-utils.h" #include "e-util/e-util.h" +#include "calendar/gui/calendar-config.h" #include "calendar/gui/comp-util.h" #include "calendar/gui/e-cal-list-view.h" #include "calendar/gui/e-cal-model-tasks.h" @@ -107,6 +108,9 @@ struct _ECalShellViewPrivate { EActivity *calendar_activity; EActivity *memopad_activity; EActivity *taskpad_activity; + + /* GConf notification IDs */ + GList *notifications; }; void e_cal_shell_view_private_init diff --git a/calendar/modules/e-cal-shell-view-taskpad.c b/calendar/modules/e-cal-shell-view-taskpad.c index aa3a73cbab..082572b4c8 100644 --- a/calendar/modules/e-cal-shell-view-taskpad.c +++ b/calendar/modules/e-cal-shell-view-taskpad.c @@ -439,7 +439,6 @@ e_cal_shell_view_taskpad_actions_init (ECalShellView *cal_shell_view) gtk_action_group_add_actions ( action_group, calendar_taskpad_entries, G_N_ELEMENTS (calendar_taskpad_entries), cal_shell_view); - gtk_ui_manager_insert_action_group (ui_manager, action_group, 0); } void diff --git a/calendar/modules/e-memo-shell-content.c b/calendar/modules/e-memo-shell-content.c index fc245b8f44..f3d0d5bcbd 100644 --- a/calendar/modules/e-memo-shell-content.c +++ b/calendar/modules/e-memo-shell-content.c @@ -26,6 +26,7 @@ #include "e-util/gconf-bridge.h" #include "calendar/gui/calendar-config.h" +#include "calendar/gui/e-cal-model-memos.h" #include "calendar/gui/e-memo-table.h" #include "calendar/gui/e-memo-table-config.h" @@ -49,6 +50,7 @@ struct _EMemoShellContentPrivate { GtkWidget *memo_table; GtkWidget *memo_preview; + ECalModel *memo_model; EMemoTableConfig *table_config; GalViewInstance *view_instance; @@ -57,6 +59,7 @@ struct _EMemoShellContentPrivate { enum { PROP_0, + PROP_MODEL, PROP_PREVIEW_VISIBLE }; @@ -96,7 +99,7 @@ memo_shell_content_display_view_cb (EMemoShellContent *memo_shell_content, if (!GAL_IS_VIEW_ETABLE (gal_view)) return; - memo_table = E_MEMO_TABLE (memo_shell_content->priv->memo_table); + memo_table = e_memo_shell_content_get_memo_table (memo_shell_content); table = e_memo_table_get_table (memo_table); gal_view_etable_attach_table (GAL_VIEW_ETABLE (gal_view), table); @@ -133,23 +136,22 @@ memo_shell_content_cursor_change_cb (EMemoShellContent *memo_shell_content, { ECalComponentPreview *memo_preview; EMemoTable *memo_table; - ECalModel *model; + ECalModel *memo_model; ECalModelComponent *comp_data; ECalComponent *comp; const gchar *uid; - memo_preview = E_CAL_COMPONENT_PREVIEW ( - memo_shell_content->priv->memo_preview); - memo_table = E_MEMO_TABLE (memo_shell_content->priv->memo_table); + memo_model = e_memo_shell_content_get_memo_model (memo_shell_content); + memo_table = e_memo_shell_content_get_memo_table (memo_shell_content); + memo_preview = e_memo_shell_content_get_memo_preview (memo_shell_content); if (e_table_selected_count (table) != 1) { e_cal_component_preview_clear (memo_preview); return; } - model = e_memo_table_get_model (memo_table); row = e_table_get_cursor_row (table); - comp_data = e_cal_model_get_component_at (model, row); + comp_data = e_cal_model_get_component_at (memo_model, row); comp = e_cal_component_new (); e_cal_component_set_icalcomponent ( @@ -170,8 +172,7 @@ memo_shell_content_selection_change_cb (EMemoShellContent *memo_shell_content, { ECalComponentPreview *memo_preview; - memo_preview = E_CAL_COMPONENT_PREVIEW ( - memo_shell_content->priv->memo_preview); + memo_preview = e_memo_shell_content_get_memo_preview (memo_shell_content); /* XXX Old code emits a "selection-changed" signal here. */ @@ -202,7 +203,7 @@ memo_shell_content_model_row_changed_cb (EMemoShellContent *memo_shell_content, if (g_strcmp0 (uid, current_uid) != 0) return; - memo_table = E_MEMO_TABLE (memo_shell_content->priv->memo_table); + memo_table = e_memo_shell_content_get_memo_table (memo_shell_content); table = e_memo_table_get_table (memo_table); memo_shell_content_cursor_change_cb (memo_shell_content, 0, table); @@ -232,6 +233,12 @@ memo_shell_content_get_property (GObject *object, GParamSpec *pspec) { switch (property_id) { + case PROP_MODEL: + g_value_set_object ( + value, e_memo_shell_content_get_memo_model ( + E_MEMO_SHELL_CONTENT (object))); + return; + case PROP_PREVIEW_VISIBLE: g_value_set_boolean ( value, e_memo_shell_content_get_preview_visible ( @@ -264,6 +271,11 @@ memo_shell_content_dispose (GObject *object) priv->memo_preview = NULL; } + if (priv->memo_model != NULL) { + g_object_unref (priv->memo_model); + priv->memo_model = NULL; + } + if (priv->table_config != NULL) { g_object_unref (priv->table_config); priv->table_config = NULL; @@ -300,7 +312,6 @@ memo_shell_content_constructed (GObject *object) EShellViewClass *shell_view_class; GalViewCollection *view_collection; GalViewInstance *view_instance; - ECalModel *model; ETable *table; GConfBridge *bridge; GtkWidget *container; @@ -328,7 +339,7 @@ memo_shell_content_constructed (GObject *object) container = widget; - widget = e_memo_table_new (shell_view); + widget = e_memo_table_new (shell_view, priv->memo_model); gtk_paned_add1 (GTK_PANED (container), widget); priv->memo_table = g_object_ref (widget); gtk_widget_show (widget); @@ -356,7 +367,6 @@ memo_shell_content_constructed (GObject *object) widget = E_MEMO_TABLE (priv->memo_table)->etable; table = e_table_scrolled_get_table (E_TABLE_SCROLLED (widget)); - model = e_memo_table_get_model (E_MEMO_TABLE (priv->memo_table)); priv->table_config = e_memo_table_config_new ( E_MEMO_TABLE (priv->memo_table)); @@ -389,7 +399,7 @@ memo_shell_content_constructed (GObject *object) object); g_signal_connect_swapped ( - model, "model-row-changed", + priv->memo_model, "model-row-changed", G_CALLBACK (memo_shell_content_model_row_changed_cb), object); @@ -482,6 +492,16 @@ memo_shell_content_class_init (EMemoShellContentClass *class) g_object_class_install_property ( object_class, + PROP_MODEL, + g_param_spec_object ( + "model", + _("Model"), + _("The memo table model"), + E_TYPE_CAL_MODEL, + G_PARAM_READABLE)); + + g_object_class_install_property ( + object_class, PROP_PREVIEW_VISIBLE, g_param_spec_boolean ( "preview-visible", @@ -497,6 +517,8 @@ memo_shell_content_init (EMemoShellContent *memo_shell_content) memo_shell_content->priv = E_MEMO_SHELL_CONTENT_GET_PRIVATE (memo_shell_content); + memo_shell_content->priv->memo_model = e_cal_model_memos_new (); + /* Postpone widget construction until we have a shell view. */ } @@ -537,6 +559,15 @@ e_memo_shell_content_new (EShellView *shell_view) "shell-view", shell_view, NULL); } +ECalModel * +e_memo_shell_content_get_memo_model (EMemoShellContent *memo_shell_content) +{ + g_return_val_if_fail ( + E_IS_MEMO_SHELL_CONTENT (memo_shell_content), NULL); + + return memo_shell_content->priv->memo_model; +} + ECalComponentPreview * e_memo_shell_content_get_memo_preview (EMemoShellContent *memo_shell_content) { diff --git a/calendar/modules/e-memo-shell-content.h b/calendar/modules/e-memo-shell-content.h index 036a04be56..9edb986cc1 100644 --- a/calendar/modules/e-memo-shell-content.h +++ b/calendar/modules/e-memo-shell-content.h @@ -73,6 +73,8 @@ struct _EMemoShellContentClass { GType e_memo_shell_content_get_type (void); GtkWidget * e_memo_shell_content_new (EShellView *shell_view); +ECalModel * e_memo_shell_content_get_memo_model + (EMemoShellContent *memo_shell_conent); ECalComponentPreview * e_memo_shell_content_get_memo_preview (EMemoShellContent *memo_shell_content); diff --git a/calendar/modules/e-task-shell-content.c b/calendar/modules/e-task-shell-content.c index 40b8372c46..b45daedd21 100644 --- a/calendar/modules/e-task-shell-content.c +++ b/calendar/modules/e-task-shell-content.c @@ -26,6 +26,7 @@ #include "e-util/gconf-bridge.h" #include "calendar/gui/calendar-config.h" +#include "calendar/gui/e-cal-model-tasks.h" #include "calendar/gui/e-calendar-table.h" #include "calendar/gui/e-calendar-table-config.h" @@ -50,6 +51,7 @@ struct _ETaskShellContentPrivate { GtkWidget *task_table; GtkWidget *task_preview; + ECalModel *task_model; ECalendarTableConfig *table_config; GalViewInstance *view_instance; @@ -58,6 +60,7 @@ struct _ETaskShellContentPrivate { enum { PROP_0, + PROP_MODEL, PROP_PREVIEW_VISIBLE }; @@ -97,7 +100,7 @@ task_shell_content_display_view_cb (ETaskShellContent *task_shell_content, if (!GAL_IS_VIEW_ETABLE (gal_view)) return; - task_table = E_CALENDAR_TABLE (task_shell_content->priv->task_table); + task_table = e_task_shell_content_get_task_table (task_shell_content); table = e_calendar_table_get_table (task_table); gal_view_etable_attach_table (GAL_VIEW_ETABLE (gal_view), table); @@ -134,23 +137,22 @@ task_shell_content_cursor_change_cb (ETaskShellContent *task_shell_content, { ECalComponentPreview *task_preview; ECalendarTable *task_table; - ECalModel *model; + ECalModel *task_model; ECalModelComponent *comp_data; ECalComponent *comp; const gchar *uid; - task_preview = E_CAL_COMPONENT_PREVIEW ( - task_shell_content->priv->task_preview); - task_table = E_CALENDAR_TABLE (task_shell_content->priv->task_table); + task_model = e_task_shell_content_get_task_model (task_shell_content); + task_table = e_task_shell_content_get_task_table (task_shell_content); + task_preview = e_task_shell_content_get_task_preview (task_shell_content); if (e_table_selected_count (table) != 1) { e_cal_component_preview_clear (task_preview); return; } - model = e_calendar_table_get_model (task_table); row = e_table_get_cursor_row (table); - comp_data = e_cal_model_get_component_at (model, row); + comp_data = e_cal_model_get_component_at (task_model, row); comp = e_cal_component_new (); e_cal_component_set_icalcomponent ( @@ -171,8 +173,7 @@ task_shell_content_selection_change_cb (ETaskShellContent *task_shell_content, { ECalComponentPreview *task_preview; - task_preview = E_CAL_COMPONENT_PREVIEW ( - task_shell_content->priv->task_preview); + task_preview = e_task_shell_content_get_task_preview (task_shell_content); /* XXX Old code emits a "selection-changed" signal here. */ @@ -203,7 +204,7 @@ task_shell_content_model_row_changed_cb (ETaskShellContent *task_shell_content, if (g_strcmp0 (uid, current_uid) != 0) return; - task_table = E_CALENDAR_TABLE (task_shell_content->priv->task_table); + task_table = e_task_shell_content_get_task_table (task_shell_content); table = e_calendar_table_get_table (task_table); task_shell_content_cursor_change_cb (task_shell_content, 0, table); @@ -233,6 +234,12 @@ task_shell_content_get_property (GObject *object, GParamSpec *pspec) { switch (property_id) { + case PROP_MODEL: + g_value_set_object ( + value, e_task_shell_content_get_task_model ( + E_TASK_SHELL_CONTENT (object))); + return; + case PROP_PREVIEW_VISIBLE: g_value_set_boolean ( value, e_task_shell_content_get_preview_visible ( @@ -265,6 +272,11 @@ task_shell_content_dispose (GObject *object) priv->task_preview = NULL; } + if (priv->task_model != NULL) { + g_object_unref (priv->task_model); + priv->task_model = NULL; + } + if (priv->table_config != NULL) { g_object_unref (priv->table_config); priv->table_config = NULL; @@ -301,7 +313,6 @@ task_shell_content_constructed (GObject *object) EShellViewClass *shell_view_class; GalViewCollection *view_collection; GalViewInstance *view_instance; - ECalModel *model; ETable *table; GConfBridge *bridge; GtkWidget *container; @@ -329,7 +340,7 @@ task_shell_content_constructed (GObject *object) container = widget; - widget = e_calendar_table_new (shell_view); + widget = e_calendar_table_new (shell_view, priv->task_model); gtk_paned_add1 (GTK_PANED (container), widget); priv->task_table = g_object_ref (widget); gtk_widget_show (widget); @@ -357,7 +368,6 @@ task_shell_content_constructed (GObject *object) widget = E_CALENDAR_TABLE (priv->task_table)->etable; table = e_table_scrolled_get_table (E_TABLE_SCROLLED (widget)); - model = e_calendar_table_get_model (E_CALENDAR_TABLE (priv->task_table)); priv->table_config = e_calendar_table_config_new ( E_CALENDAR_TABLE (priv->task_table)); @@ -390,7 +400,7 @@ task_shell_content_constructed (GObject *object) object); g_signal_connect_swapped ( - model, "model-row-changed", + priv->task_model, "model-row-changed", G_CALLBACK (task_shell_content_model_row_changed_cb), object); @@ -508,6 +518,16 @@ task_shell_content_class_init (ETaskShellContentClass *class) g_object_class_install_property ( object_class, + PROP_MODEL, + g_param_spec_object ( + "model", + _("Model"), + _("The task table model"), + E_TYPE_CAL_MODEL, + G_PARAM_READABLE)); + + g_object_class_install_property ( + object_class, PROP_PREVIEW_VISIBLE, g_param_spec_boolean ( "preview-visible", @@ -523,6 +543,8 @@ task_shell_content_init (ETaskShellContent *task_shell_content) task_shell_content->priv = E_TASK_SHELL_CONTENT_GET_PRIVATE (task_shell_content); + task_shell_content->priv->task_model = e_cal_model_tasks_new (); + /* Postpone widget construction until we have a shell view. */ } @@ -563,6 +585,15 @@ e_task_shell_content_new (EShellView *shell_view) "shell-view", shell_view, NULL); } +ECalModel * +e_task_shell_content_get_task_model (ETaskShellContent *task_shell_content) +{ + g_return_val_if_fail ( + E_IS_TASK_SHELL_CONTENT (task_shell_content), NULL); + + return task_shell_content->priv->task_model; +} + ECalComponentPreview * e_task_shell_content_get_task_preview (ETaskShellContent *task_shell_content) { diff --git a/calendar/modules/e-task-shell-content.h b/calendar/modules/e-task-shell-content.h index 361b289f77..e6f64f7406 100644 --- a/calendar/modules/e-task-shell-content.h +++ b/calendar/modules/e-task-shell-content.h @@ -25,6 +25,7 @@ #include <shell/e-shell-content.h> #include <shell/e-shell-view.h> +#include <calendar/gui/e-cal-model.h> #include <calendar/gui/e-calendar-table.h> #include <calendar/gui/e-cal-component-preview.h> @@ -76,6 +77,8 @@ struct _ETaskShellContentClass { GType e_task_shell_content_get_type (void); GtkWidget * e_task_shell_content_new (EShellView *shell_view); +ECalModel * e_task_shell_content_get_task_model + (ETaskShellContent *task_shell_content); ECalComponentPreview * e_task_shell_content_get_task_preview (ETaskShellContent *task_shell_content); diff --git a/shell/e-shell-view.c b/shell/e-shell-view.c index e307847116..3ab67b6ab0 100644 --- a/shell/e-shell-view.c +++ b/shell/e-shell-view.c @@ -136,13 +136,6 @@ shell_view_set_action (EShellView *shell_view, } static void -shell_view_set_page_num (EShellView *shell_view, - gint page_num) -{ - shell_view->priv->page_num = page_num; -} - -static void shell_view_set_shell_window (EShellView *shell_view, GtkWidget *shell_window) { @@ -169,7 +162,7 @@ shell_view_set_property (GObject *object, return; case PROP_PAGE_NUM: - shell_view_set_page_num ( + e_shell_view_set_page_num ( E_SHELL_VIEW (object), g_value_get_int (value)); return; @@ -406,8 +399,7 @@ shell_view_class_init (EShellViewClass *class) -1, G_MAXINT, -1, - G_PARAM_READWRITE | - G_PARAM_CONSTRUCT_ONLY)); + G_PARAM_READWRITE)); /** * EShellView:title @@ -814,6 +806,26 @@ e_shell_view_get_page_num (EShellView *shell_view) } /** + * e_shell_view_set_page_num: + * @shell_view: an #EShellView + * @page_num: a notebook page number + * + * This function is only interesting to #EShellWindow. It sets the + * #GtkNotebook page number for @shell_view. The rest of the application + * must never call this because it could mess up shell view switching. + **/ +void +e_shell_view_set_page_num (EShellView *shell_view, + gint page_num) +{ + g_return_if_fail (E_IS_SHELL_VIEW (shell_view)); + + shell_view->priv->page_num = page_num; + + g_object_notify (G_OBJECT (shell_view), "page-num"); +} + +/** * e_shell_view_get_size_group: * @shell_view: an #EShellView * diff --git a/shell/e-shell-view.h b/shell/e-shell-view.h index 28392d2963..1b1fffd87d 100644 --- a/shell/e-shell-view.h +++ b/shell/e-shell-view.h @@ -162,6 +162,8 @@ void e_shell_view_set_view_id (EShellView *shell_view, const gchar *view_id); gboolean e_shell_view_is_active (EShellView *shell_view); gint e_shell_view_get_page_num (EShellView *shell_view); +void e_shell_view_set_page_num (EShellView *shell_view, + gint page_num); GtkSizeGroup * e_shell_view_get_size_group (EShellView *shell_view); EShellContent * e_shell_view_get_shell_content (EShellView *shell_view); EShellSidebar * e_shell_view_get_shell_sidebar (EShellView *shell_view); diff --git a/shell/e-shell-window.c b/shell/e-shell-window.c index 467e59d6cd..d1cebe78e1 100644 --- a/shell/e-shell-window.c +++ b/shell/e-shell-window.c @@ -52,7 +52,6 @@ shell_window_new_view (EShellWindow *shell_window, /* Determine the page number for the new shell view. */ notebook = GTK_NOTEBOOK (shell_window->priv->content_notebook); - page_num = gtk_notebook_get_n_pages (notebook); /* Get the switcher action for this view. */ action = e_shell_window_get_shell_view_action ( @@ -64,11 +63,19 @@ shell_window_new_view (EShellWindow *shell_window, page_num, "shell-window", shell_window, NULL); /* Register the shell view. */ + g_debug ("Loaded view '%s' (page %d)", view_name, page_num); loaded_views = shell_window->priv->loaded_views; g_hash_table_insert (loaded_views, g_strdup (view_name), shell_view); /* Add pages to the various shell window notebooks. */ + /* We can't determine the shell view's page number until after the + * shell view is fully initialized because the shell view may load + * other shell views during initialization, and those other shell + * views will append their widgets to the notebooks before us. */ + page_num = gtk_notebook_get_n_pages (notebook); + e_shell_view_set_page_num (shell_view, page_num); + notebook = GTK_NOTEBOOK (shell_window->priv->content_notebook); widget = GTK_WIDGET (e_shell_view_get_shell_content (shell_view)); gtk_notebook_append_page (notebook, widget, NULL); |