diff options
author | Matthew Barnes <mbarnes@src.gnome.org> | 2008-10-31 04:51:26 +0800 |
---|---|---|
committer | Matthew Barnes <mbarnes@src.gnome.org> | 2008-10-31 04:51:26 +0800 |
commit | 80e6c5adad4e89846c004efb2029d4db9ec2e64f (patch) | |
tree | 4a1252574114d2c70040d9013bdebd9941c2c1c1 /calendar/modules | |
parent | d6b8b58bb45b16c1cb3a575c277ffdc77441e2df (diff) | |
download | gsoc2013-evolution-80e6c5adad4e89846c004efb2029d4db9ec2e64f.tar gsoc2013-evolution-80e6c5adad4e89846c004efb2029d4db9ec2e64f.tar.gz gsoc2013-evolution-80e6c5adad4e89846c004efb2029d4db9ec2e64f.tar.bz2 gsoc2013-evolution-80e6c5adad4e89846c004efb2029d4db9ec2e64f.tar.lz gsoc2013-evolution-80e6c5adad4e89846c004efb2029d4db9ec2e64f.tar.xz gsoc2013-evolution-80e6c5adad4e89846c004efb2029d4db9ec2e64f.tar.zst gsoc2013-evolution-80e6c5adad4e89846c004efb2029d4db9ec2e64f.zip |
Add popup menus to the calendar memopad and taskpad.
Implement support for "hide completed tasks" option (not yet tested).
Flesh out most of the Preferences window. Still need Certificates page.
svn path=/branches/kill-bonobo/; revision=36701
Diffstat (limited to 'calendar/modules')
-rw-r--r-- | calendar/modules/e-cal-shell-module.c | 20 | ||||
-rw-r--r-- | calendar/modules/e-cal-shell-sidebar.c | 45 | ||||
-rw-r--r-- | calendar/modules/e-cal-shell-sidebar.h | 3 | ||||
-rw-r--r-- | calendar/modules/e-cal-shell-view-actions.c | 4 | ||||
-rw-r--r-- | calendar/modules/e-cal-shell-view-private.c | 132 | ||||
-rw-r--r-- | calendar/modules/e-cal-shell-view-private.h | 2 | ||||
-rw-r--r-- | calendar/modules/e-task-shell-content.c | 2 | ||||
-rw-r--r-- | calendar/modules/e-task-shell-sidebar.c | 48 | ||||
-rw-r--r-- | calendar/modules/e-task-shell-sidebar.h | 1 | ||||
-rw-r--r-- | calendar/modules/e-task-shell-view-private.c | 149 | ||||
-rw-r--r-- | calendar/modules/e-task-shell-view-private.h | 6 |
11 files changed, 281 insertions, 131 deletions
diff --git a/calendar/modules/e-cal-shell-module.c b/calendar/modules/e-cal-shell-module.c index 88f743f1ee..b6e1aa4208 100644 --- a/calendar/modules/e-cal-shell-module.c +++ b/calendar/modules/e-cal-shell-module.c @@ -30,10 +30,12 @@ #include "shell/e-shell.h" #include "shell/e-shell-module.h" #include "shell/e-shell-window.h" +#include "widgets/misc/e-preferences-window.h" #include "calendar/common/authentication.h" #include "calendar/gui/calendar-config.h" #include "calendar/gui/comp-util.h" +#include "calendar/gui/dialogs/cal-prefs-dialog.h" #include "calendar/gui/dialogs/calendar-setup.h" #include "calendar/gui/dialogs/event-editor.h" @@ -404,6 +406,22 @@ static GtkActionEntry source_entries[] = { G_CALLBACK (action_calendar_new_cb) } }; +static void +cal_module_init_preferences (void) +{ + GtkWidget *preferences_window; + + preferences_window = e_shell_get_preferences_window (); + + e_preferences_window_add_page ( + E_PREFERENCES_WINDOW (preferences_window), + "calendar-and-tasks", + "preferences-calendar-and-tasks", + _("Calendar and Tasks"), + calendar_prefs_dialog_new (), + 600); +} + static gboolean cal_module_handle_uri (EShellModule *shell_module, const gchar *uri) @@ -463,4 +481,6 @@ e_shell_module_init (GTypeModule *type_module) g_signal_connect_swapped ( shell, "window-created", G_CALLBACK (cal_module_window_created), shell_module); + + cal_module_init_preferences (); } diff --git a/calendar/modules/e-cal-shell-sidebar.c b/calendar/modules/e-cal-shell-sidebar.c index 7c2777bf04..312cb8649c 100644 --- a/calendar/modules/e-cal-shell-sidebar.c +++ b/calendar/modules/e-cal-shell-sidebar.c @@ -473,14 +473,6 @@ cal_shell_sidebar_constructed (GObject *object) } static void -cal_shell_sidebar_client_added (ECalShellSidebar *cal_shell_sidebar, - ECal *client) -{ - /* FIXME */ - /*cal_shell_sidebar_update_timezone (cal_shell_sidebar);*/ -} - -static void cal_shell_sidebar_client_removed (ECalShellSidebar *cal_shell_sidebar, ECal *client) { @@ -519,7 +511,6 @@ cal_shell_sidebar_class_init (ECalShellSidebarClass *class) object_class->finalize = cal_shell_sidebar_finalize; object_class->constructed = cal_shell_sidebar_constructed; - class->client_added = cal_shell_sidebar_client_added; class->client_removed = cal_shell_sidebar_client_removed; g_object_class_install_property ( @@ -628,6 +619,19 @@ e_cal_shell_sidebar_new (EShellView *shell_view) "shell-view", shell_view, NULL); } +GList * +e_cal_shell_sidebar_get_clients (ECalShellSidebar *cal_shell_sidebar) +{ + GHashTable *client_table; + + g_return_val_if_fail ( + E_IS_CAL_SHELL_SIDEBAR (cal_shell_sidebar), NULL); + + client_table = cal_shell_sidebar->priv->client_table; + + return g_hash_table_get_values (client_table); +} + ECalendar * e_cal_shell_sidebar_get_mini_calendar (ECalShellSidebar *cal_shell_sidebar) { @@ -721,26 +725,3 @@ e_cal_shell_sidebar_remove_source (ECalShellSidebar *cal_shell_sidebar, cal_shell_sidebar_emit_client_removed (cal_shell_sidebar, client); } - -void -e_cal_shell_sidebar_update_timezone (ECalShellSidebar *cal_shell_sidebar) -{ - GHashTable *client_table; - icaltimezone *timezone; - GList *values; - - g_return_if_fail (E_CAL_SHELL_SIDEBAR (cal_shell_sidebar)); - - timezone = calendar_config_get_icaltimezone (); - client_table = cal_shell_sidebar->priv->client_table; - values = g_hash_table_get_values (client_table); - - while (values != NULL) { - ECal *client = values->data; - - if (e_cal_get_load_state (client) == E_CAL_LOAD_LOADED) - e_cal_set_default_timezone (client, timezone, NULL); - - values = g_list_delete_link (values, values); - } -} diff --git a/calendar/modules/e-cal-shell-sidebar.h b/calendar/modules/e-cal-shell-sidebar.h index ff30541448..d77482eb64 100644 --- a/calendar/modules/e-cal-shell-sidebar.h +++ b/calendar/modules/e-cal-shell-sidebar.h @@ -80,6 +80,7 @@ struct _ECalShellSidebarClass { GType e_cal_shell_sidebar_get_type (void); GtkWidget * e_cal_shell_sidebar_new (EShellView *shell_view); +GList * e_cal_shell_sidebar_get_clients (ECalShellSidebar *cal_shell_sidebar); ECalendar * e_cal_shell_sidebar_get_mini_calendar (ECalShellSidebar *cal_shell_sidebar); ESourceSelector * @@ -89,8 +90,6 @@ void e_cal_shell_sidebar_add_source (ECalShellSidebar *cal_shell_sidebar, void e_cal_shell_sidebar_remove_source (ECalShellSidebar *cal_shell_sidebar, ESource *source); -void e_cal_shell_sidebar_update_timezone - (ECalShellSidebar *cal_shell_sidebar); G_END_DECLS diff --git a/calendar/modules/e-cal-shell-view-actions.c b/calendar/modules/e-cal-shell-view-actions.c index 7de429c3e8..f2c7d47b62 100644 --- a/calendar/modules/e-cal-shell-view-actions.c +++ b/calendar/modules/e-cal-shell-view-actions.c @@ -516,7 +516,6 @@ static void action_search_execute_cb (GtkAction *action, ECalShellView *cal_shell_view) { -#if 0 EShellView *shell_view; /* All shell views respond to the activation of this action, @@ -527,7 +526,6 @@ action_search_execute_cb (GtkAction *action, return; e_cal_shell_view_execute_search (cal_shell_view); -#endif } static void @@ -535,9 +533,7 @@ action_search_filter_cb (GtkRadioAction *action, GtkRadioAction *current, ECalShellView *cal_shell_view) { -#if 0 e_cal_shell_view_execute_search (cal_shell_view); -#endif } static GtkActionEntry calendar_entries[] = { diff --git a/calendar/modules/e-cal-shell-view-private.c b/calendar/modules/e-cal-shell-view-private.c index 7f24eddd2e..8b1f0d9c82 100644 --- a/calendar/modules/e-cal-shell-view-private.c +++ b/calendar/modules/e-cal-shell-view-private.c @@ -41,41 +41,6 @@ cal_shell_view_process_completed_tasks (ECalShellView *cal_shell_view, } static void -cal_shell_view_update_timezone (ECalShellView *cal_shell_view) -{ -#if 0 - ECalShellContent *cal_shell_content; - ECalShellSidebar *cal_shell_sidebar; - GnomeCalendarViewType view_type; - ECalendarView *calendar_view; - icaltimezone *timezone; - - cal_shell_content = cal_shell_view->priv->cal_shell_content; - cal_shell_sidebar = cal_shell_view->priv->cal_shell_sidebar; - - e_cal_shell_sidebar_update_timezone (cal_shell_sidebar); - - view_type = e_cal_shell_content_get_current_view (cal_shell_content); - calendar_view = e_cal_shell_content_get_calendar_view ( - cal_shell_content, view_type); - - timezone = calendar_config_get_icaltimezone (); - e_calendar_view_get_icaltimezone (calendar_view, timezone); -#endif -} - -static void -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, @@ -83,7 +48,7 @@ cal_shell_view_config_timezone_changed_cb (GConfClient *client, { ECalShellView *cal_shell_view = user_data; - cal_shell_view_update_timezone (cal_shell_view); + e_cal_shell_view_update_timezone (cal_shell_view); } static struct tm @@ -152,6 +117,26 @@ cal_shell_view_mini_calendar_scroll_event_cb (ECalShellView *cal_shell_view, } static void +cal_shell_view_memopad_popup_event_cb (EShellView *shell_view, + GdkEventButton *event) +{ + const gchar *widget_path; + + widget_path = "/calendar-memopad-popup"; + e_shell_view_show_popup_menu (shell_view, widget_path, event); +} + +static void +cal_shell_view_taskpad_popup_event_cb (EShellView *shell_view, + GdkEventButton *event) +{ + const gchar *widget_path; + + widget_path = "/calendar-taskpad-popup"; + e_shell_view_show_popup_menu (shell_view, widget_path, event); +} + +static void cal_shell_view_load_view_collection (EShellViewClass *shell_view_class) { GalViewCollection *collection; @@ -300,11 +285,21 @@ e_cal_shell_view_private_constructed (ECalShellView *cal_shell_view) cal_shell_view); g_signal_connect_swapped ( + memo_table, "popup-event", + G_CALLBACK (cal_shell_view_memopad_popup_event_cb), + cal_shell_view); + + g_signal_connect_swapped ( memo_table, "status-message", G_CALLBACK (e_cal_shell_view_memopad_set_status_message), cal_shell_view); g_signal_connect_swapped ( + task_table, "popup-event", + G_CALLBACK (cal_shell_view_taskpad_popup_event_cb), + cal_shell_view); + + g_signal_connect_swapped ( task_table, "status-message", G_CALLBACK (e_cal_shell_view_taskpad_set_status_message), cal_shell_view); @@ -319,6 +314,10 @@ e_cal_shell_view_private_constructed (ECalShellView *cal_shell_view) G_CALLBACK (e_cal_shell_view_taskpad_actions_update), cal_shell_view); + e_categories_register_change_listener ( + G_CALLBACK (e_cal_shell_view_update_search_filter), + cal_shell_view); + /* Listen for configuration changes. */ /* Timezone */ @@ -326,30 +325,11 @@ e_cal_shell_view_private_constructed (ECalShellView *cal_shell_view) cal_shell_view_config_timezone_changed_cb, cal_shell_view); priv->notifications = g_list_prepend ( priv->notifications, GUINT_TO_POINTER (id)); - cal_shell_view_update_timezone (cal_shell_view); - - /* 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), - cal_shell_view); e_cal_shell_view_actions_init (cal_shell_view); e_cal_shell_view_update_sidebar (cal_shell_view); e_cal_shell_view_update_search_filter (cal_shell_view); + e_cal_shell_view_update_timezone (cal_shell_view); } void @@ -402,6 +382,12 @@ e_cal_shell_view_private_finalize (ECalShellView *cal_shell_view) } void +e_cal_shell_view_execute_search (ECalShellView *cal_shell_view) +{ + /* FIXME */ +} + +void e_cal_shell_view_open_event (ECalShellView *cal_shell_view, ECalModelComponent *comp_data) { @@ -610,3 +596,37 @@ e_cal_shell_view_update_sidebar (ECalShellView *cal_shell_view) e_shell_sidebar_set_secondary_text (shell_sidebar, buffer); #endif } + +void +e_cal_shell_view_update_timezone (ECalShellView *cal_shell_view) +{ +#if 0 + ECalShellContent *cal_shell_content; + ECalShellSidebar *cal_shell_sidebar; + GnomeCalendarViewType view_type; + ECalendarView *calendar_view; + icaltimezone *timezone; + GList *clients, *iter; + + cal_shell_content = cal_shell_view->priv->cal_shell_content; + view_type = e_cal_shell_content_get_current_view (cal_shell_content); + calendar_view = e_cal_shell_content_get_calendar_view ( + cal_shell_content, view_type); + + cal_shell_sidebar = cal_shell_view->priv->cal_shell_sidebar; + clients = e_cal_shell_sidebar_get_clients (cal_shell_sidebar); + + timezone = calendar_config_get_icaltimezone (); + + for (iter = clients; iter != NULL; iter = iter->next) { + ECal *client = iter->data; + + if (e_cal_get_load_state (client) == E_CAL_LOAD_LOADED) + e_cal_set_default_timezone (client, timezone, NULL); + } + + e_calendar_view_set_icaltimezone (calendar_view, timezone); + + g_list_free (clients); +#endif +} diff --git a/calendar/modules/e-cal-shell-view-private.h b/calendar/modules/e-cal-shell-view-private.h index 66083a0903..3407b660d6 100644 --- a/calendar/modules/e-cal-shell-view-private.h +++ b/calendar/modules/e-cal-shell-view-private.h @@ -140,6 +140,8 @@ void e_cal_shell_view_update_sidebar (ECalShellView *cal_shell_view); void e_cal_shell_view_update_search_filter (ECalShellView *cal_shell_view); +void e_cal_shell_view_update_timezone + (ECalShellView *cal_shell_view); /* Memo Pad Utilities */ diff --git a/calendar/modules/e-task-shell-content.c b/calendar/modules/e-task-shell-content.c index b45daedd21..dec1760151 100644 --- a/calendar/modules/e-task-shell-content.c +++ b/calendar/modules/e-task-shell-content.c @@ -175,8 +175,6 @@ task_shell_content_selection_change_cb (ETaskShellContent *task_shell_content, task_preview = e_task_shell_content_get_task_preview (task_shell_content); - /* XXX Old code emits a "selection-changed" signal here. */ - if (e_table_selected_count (table) != 1) e_cal_component_preview_clear (task_preview); } diff --git a/calendar/modules/e-task-shell-sidebar.c b/calendar/modules/e-task-shell-sidebar.c index f58df26dfc..bce2684515 100644 --- a/calendar/modules/e-task-shell-sidebar.c +++ b/calendar/modules/e-task-shell-sidebar.c @@ -88,33 +88,6 @@ task_shell_sidebar_emit_status_message (ETaskShellSidebar *task_shell_sidebar, } static void -task_shell_sidebar_update_timezone (ETaskShellSidebar *task_shell_sidebar) -{ - GHashTable *client_table; - icaltimezone *zone; - GList *values; - - zone = calendar_config_get_icaltimezone (); - client_table = task_shell_sidebar->priv->client_table; - values = g_hash_table_get_values (client_table); - - while (values != NULL) { - ECal *client = values->data; - - if (e_cal_get_load_state (client) == E_CAL_LOAD_LOADED) - e_cal_set_default_timezone (client, zone, NULL); - - values = g_list_delete_link (values, values); - } - - /* XXX Need to call e_cal_component_preview_set_default_timezone() - * here but the sidebar is not really supposed to access content - * stuff. I guess we could emit an "update-timezone" signal - * here, but that feels wrong. Maybe this whole thing should - * be in ETaskShellView instead. */ -} - -static void task_shell_sidebar_backend_died_cb (ETaskShellSidebar *task_shell_sidebar, ECal *client) { @@ -471,13 +444,6 @@ task_shell_sidebar_check_state (EShellSidebar *shell_sidebar) } static void -task_shell_sidebar_client_added (ETaskShellSidebar *task_shell_sidebar, - ECal *client) -{ - task_shell_sidebar_update_timezone (task_shell_sidebar); -} - -static void task_shell_sidebar_client_removed (ETaskShellSidebar *task_shell_sidebar, ECal *client) { @@ -520,7 +486,6 @@ task_shell_sidebar_class_init (ETaskShellSidebarClass *class) shell_sidebar_class = E_SHELL_SIDEBAR_CLASS (class); shell_sidebar_class->check_state = task_shell_sidebar_check_state; - class->client_added = task_shell_sidebar_client_added; class->client_removed = task_shell_sidebar_client_removed; g_object_class_install_property ( @@ -620,6 +585,19 @@ e_task_shell_sidebar_new (EShellView *shell_view) "shell-view", shell_view, NULL); } +GList * +e_task_shell_sidebar_get_clients (ETaskShellSidebar *task_shell_sidebar) +{ + GHashTable *client_table; + + g_return_val_if_fail ( + E_IS_TASK_SHELL_SIDEBAR (task_shell_sidebar), NULL); + + client_table = task_shell_sidebar->priv->client_table; + + return g_hash_table_get_values (client_table); +} + ESourceSelector * e_task_shell_sidebar_get_selector (ETaskShellSidebar *task_shell_sidebar) { diff --git a/calendar/modules/e-task-shell-sidebar.h b/calendar/modules/e-task-shell-sidebar.h index 57f12d3738..2d8fceaeb8 100644 --- a/calendar/modules/e-task-shell-sidebar.h +++ b/calendar/modules/e-task-shell-sidebar.h @@ -78,6 +78,7 @@ struct _ETaskShellSidebarClass { GType e_task_shell_sidebar_get_type (void); GtkWidget * e_task_shell_sidebar_new (EShellView *shell_view); +GList * e_task_shell_sidebar_get_clients(ETaskShellSidebar *task_shell_sidebar); ESourceSelector * e_task_shell_sidebar_get_selector (ETaskShellSidebar *task_shell_sidebar); diff --git a/calendar/modules/e-task-shell-view-private.c b/calendar/modules/e-task-shell-view-private.c index ef2b641ff3..47692fd037 100644 --- a/calendar/modules/e-task-shell-view-private.c +++ b/calendar/modules/e-task-shell-view-private.c @@ -24,6 +24,44 @@ #include <widgets/menus/gal-view-factory-etable.h> static void +task_shell_view_config_hide_completed_tasks_changed_cb (GConfClient *client, + guint id, + GConfEntry *entry, + gpointer user_data) +{ + ETaskShellView *task_shell_view = user_data; + ETaskShellContent *task_shell_content; + ETaskShellSidebar *task_shell_sidebar; + ECalendarTable *task_table; + GList *clients; + + task_shell_content = task_shell_view->priv->task_shell_content; + task_table = e_task_shell_content_get_task_table (task_shell_content); + + task_shell_sidebar = task_shell_view->priv->task_shell_sidebar; + clients = e_task_shell_sidebar_get_clients (task_shell_sidebar); + + e_calendar_table_process_completed_tasks (task_table, clients, TRUE); + + /* Search query takes whether to show completed tasks into account, + * so if the preference has changed we need to update the query. */ + e_task_shell_view_execute_search (task_shell_view); + + g_list_free (clients); +} + +static void +task_shell_view_config_timezone_changed_cb (GConfClient *client, + guint id, + GConfEntry *entry, + gpointer user_data) +{ + ETaskShellView *task_shell_view = user_data; + + e_task_shell_view_update_timezone (task_shell_view); +} + +static void task_shell_view_table_popup_event_cb (EShellView *shell_view, GdkEventButton *event) { @@ -67,6 +105,7 @@ task_shell_view_selector_client_added_cb (ETaskShellView *task_shell_view, model = e_calendar_table_get_model (task_table); e_cal_model_add_client (model, client); + e_task_shell_view_update_timezone (task_shell_view); } static void @@ -97,6 +136,30 @@ task_shell_view_selector_popup_event_cb (EShellView *shell_view, return TRUE; } +static gboolean +task_shell_view_update_timeout_cb (ETaskShellView *task_shell_view) +{ + ETaskShellContent *task_shell_content; + ETaskShellSidebar *task_shell_sidebar; + ECalendarTable *task_table; + ECalModel *model; + GList *clients; + + task_shell_content = task_shell_view->priv->task_shell_content; + task_table = e_task_shell_content_get_task_table (task_shell_content); + model = e_calendar_table_get_model (task_table); + + task_shell_sidebar = task_shell_view->priv->task_shell_sidebar; + clients = e_task_shell_sidebar_get_clients (task_shell_sidebar); + + e_calendar_table_process_completed_tasks (task_table, clients, FALSE); + e_cal_model_tasks_update_due_tasks (E_CAL_MODEL_TASKS (model)); + + g_list_free (clients); + + return TRUE; +} + static void task_shell_view_load_view_collection (EShellViewClass *shell_view_class) { @@ -184,6 +247,7 @@ e_task_shell_view_private_constructed (ETaskShellView *task_shell_view) ECalModel *model; ETable *table; ESourceSelector *selector; + guint id; shell_view = E_SHELL_VIEW (task_shell_view); shell_content = e_shell_view_get_shell_content (shell_view); @@ -270,9 +334,41 @@ e_task_shell_view_private_constructed (ETaskShellView *task_shell_view) G_CALLBACK (e_task_shell_view_update_search_filter), task_shell_view); + task_shell_view_update_timeout_cb (task_shell_view); + priv->update_timeout = g_timeout_add_full ( + G_PRIORITY_LOW, 60000, (GSourceFunc) + task_shell_view_update_timeout_cb, + task_shell_view, NULL); + + /* Listen for configuration changes. */ + + /* Timezone */ + id = calendar_config_add_notification_timezone ( + task_shell_view_config_timezone_changed_cb, task_shell_view); + priv->notifications = g_list_prepend ( + priv->notifications, GUINT_TO_POINTER (id)); + + /* Hide Completed Tasks (enable/units/value) */ + id = calendar_config_add_notification_hide_completed_tasks ( + task_shell_view_config_hide_completed_tasks_changed_cb, + task_shell_view); + priv->notifications = g_list_prepend ( + priv->notifications, GUINT_TO_POINTER (id)); + id = calendar_config_add_notification_hide_completed_tasks_units ( + task_shell_view_config_hide_completed_tasks_changed_cb, + task_shell_view); + priv->notifications = g_list_prepend ( + priv->notifications, GUINT_TO_POINTER (id)); + id = calendar_config_add_notification_hide_completed_tasks_value ( + task_shell_view_config_hide_completed_tasks_changed_cb, + task_shell_view); + priv->notifications = g_list_prepend ( + priv->notifications, GUINT_TO_POINTER (id)); + e_task_shell_view_actions_init (task_shell_view); e_task_shell_view_update_sidebar (task_shell_view); e_task_shell_view_update_search_filter (task_shell_view); + e_task_shell_view_update_timezone (task_shell_view); e_task_shell_view_execute_search (task_shell_view); } @@ -281,6 +377,7 @@ void e_task_shell_view_private_dispose (ETaskShellView *task_shell_view) { ETaskShellViewPrivate *priv = task_shell_view->priv; + GList *iter; DISPOSE (priv->source_list); @@ -296,6 +393,18 @@ e_task_shell_view_private_dispose (ETaskShellView *task_shell_view) g_object_unref (task_shell_view->priv->activity); task_shell_view->priv->activity = NULL; } + + if (priv->update_timeout > 0) { + g_source_remove (priv->update_timeout); + priv->update_timeout = 0; + } + + 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 @@ -453,6 +562,17 @@ e_task_shell_view_execute_search (ETaskShellView *task_shell_view) } } + /* Honor the user's preference to hide completed tasks. */ + temp = calendar_config_get_hide_completed_tasks_sexp (FALSE); + if (temp != NULL) { + gchar *temp2; + + temp2 = g_strdup_printf ("(and %s %s)", temp, query); + g_free (query); + g_free (temp); + query = temp2; + } + /* XXX This is wrong. We need to programmatically construct a * FilterRule, tell it to build code, and pass the resulting * expression string to ECalModel. */ @@ -595,3 +715,32 @@ e_task_shell_view_update_sidebar (ETaskShellView *task_shell_view) g_string_free (string, TRUE); } + +void +e_task_shell_view_update_timezone (ETaskShellView *task_shell_view) +{ + ETaskShellContent *task_shell_content; + ETaskShellSidebar *task_shell_sidebar; + ECalComponentPreview *task_preview; + icaltimezone *timezone; + GList *clients, *iter; + + task_shell_content = task_shell_view->priv->task_shell_content; + task_preview = e_task_shell_content_get_task_preview (task_shell_content); + + task_shell_sidebar = task_shell_view->priv->task_shell_sidebar; + clients = e_task_shell_sidebar_get_clients (task_shell_sidebar); + + timezone = calendar_config_get_icaltimezone (); + + for (iter = clients; iter != NULL; iter = iter->next) { + ECal *client = iter->data; + + if (e_cal_get_load_state (client) == E_CAL_LOAD_LOADED) + e_cal_set_default_timezone (client, timezone, NULL); + } + + e_cal_component_preview_set_default_timezone (task_preview, timezone); + + g_list_free (clients); +} diff --git a/calendar/modules/e-task-shell-view-private.h b/calendar/modules/e-task-shell-view-private.h index ba6e076c12..c0e2d97145 100644 --- a/calendar/modules/e-task-shell-view-private.h +++ b/calendar/modules/e-task-shell-view-private.h @@ -108,6 +108,10 @@ struct _ETaskShellViewPrivate { ETaskShellSidebar *task_shell_sidebar; EActivity *activity; + guint update_timeout; + + /* GConf notification IDs */ + GList *notifications; }; void e_task_shell_view_private_init @@ -137,6 +141,8 @@ void e_task_shell_view_update_sidebar (ETaskShellView *task_shell_view); void e_task_shell_view_update_search_filter (ETaskShellView *task_shell_view); +void e_task_shell_view_update_timezone + (ETaskShellView *task_shell_view); G_END_DECLS |