static void action_save_cb (GtkAction *action, EMsgComposer *composer) { EHTMLEditor *editor; EHTMLEditorView *view; const gchar *filename; gint fd; GError *error = NULL; editor = e_msg_composer_get_editor (composer); filename = e_html_editor_get_filename (editor); if (filename == NULL) { gtk_action_activate (ACTION (SAVE_AS)); return; } /* Check if the file already exists and we can create it. */ fd = g_open (filename, O_RDONLY | O_CREAT | O_EXCL, 0777); if (fd < 0) { gint errno_saved = errno; if (g_file_test (filename, G_FILE_TEST_IS_REGULAR)) { gint response; response = e_alert_run_dialog_for_args ( GTK_WINDOW (composer), E_ALERT_ASK_FILE_EXISTS_OVERWRITE, filename, NULL); if (response != GTK_RESPONSE_OK) return; } else { e_alert_submit ( E_ALERT_SINK (composer), E_ALERT_NO_SAVE_FILE, filename, g_strerror (errno_saved), NULL); return; } } else close (fd); if (!e_html_editor_save (editor, filename, TRUE, &error)) { e_alert_submit ( E_ALERT_SINK (composer), E_ALERT_NO_SAVE_FILE, filename, error->message, NULL); g_error_free (error); return; } view = e_html_editor_get_view (editor); e_html_editor_view_set_changed (view, TRUE); }
static void cal_component_preview_web_process_crashed_cb (ECalComponentPreview *preview) { EAlertSink *alert_sink; const gchar *tagid; g_return_if_fail (E_IS_CAL_COMPONENT_PREVIEW (preview)); tagid = "system:webkit-web-process-crashed"; if (preview->priv->comp) { ECalComponentVType vtype; vtype = e_cal_component_get_vtype (preview->priv->comp); if (vtype == E_CAL_COMPONENT_EVENT) tagid = "calendar:webkit-web-process-crashed-event"; else if (vtype == E_CAL_COMPONENT_TODO) tagid = "calendar:webkit-web-process-crashed-task"; else if (vtype == E_CAL_COMPONENT_JOURNAL) tagid = "calendar:webkit-web-process-crashed-memo"; } /* Cannot use the EWebView, because it places the alerts inside itself */ alert_sink = e_shell_utils_find_alternate_alert_sink (GTK_WIDGET (preview)); if (alert_sink) e_alert_submit (alert_sink, tagid, NULL); }
static gboolean e_alert_sink_thread_job_done_cb (gpointer user_data) { EAlertSinkThreadJobData *job_data = user_data; EAlertSink *alert_sink; GCancellable *cancellable; g_return_val_if_fail (job_data != NULL, FALSE); g_return_val_if_fail (job_data->func != NULL, FALSE); alert_sink = e_activity_get_alert_sink (job_data->activity); cancellable = e_activity_get_cancellable (job_data->activity); camel_operation_pop_message (cancellable); if (e_activity_handle_cancellation (job_data->activity, job_data->error)) { /* do nothing */ } else if (job_data->error != NULL) { if (job_data->alert_arg_0) { e_alert_submit ( alert_sink, job_data->alert_ident, job_data->alert_arg_0, job_data->error->message, NULL); } else { e_alert_submit ( alert_sink, job_data->alert_ident, job_data->error->message, NULL); } } else { e_activity_set_state (job_data->activity, E_ACTIVITY_COMPLETED); } /* clean-up */ g_clear_object (&job_data->activity); g_clear_error (&job_data->error); g_free (job_data->alert_ident); g_free (job_data->alert_arg_0); if (job_data->free_user_data) job_data->free_user_data (job_data->user_data); g_free (job_data); return FALSE; }
static void address_book_refresh_done_cb (GObject *source_object, GAsyncResult *result, gpointer user_data) { EClient *client; ESource *source; EActivity *activity; EAlertSink *alert_sink; const gchar *display_name; GError *local_error = NULL; g_return_if_fail (E_IS_CLIENT (source_object)); client = E_CLIENT (source_object); source = e_client_get_source (client); activity = user_data; e_client_refresh_finish (client, result, &local_error); alert_sink = e_activity_get_alert_sink (activity); display_name = e_source_get_display_name (source); if (e_activity_handle_cancellation (activity, local_error)) { /* nothing to do */ } else if (local_error != NULL) { e_alert_submit ( alert_sink, "addressbook:refresh-error", display_name, local_error->message, NULL); } else { e_activity_set_state (activity, E_ACTIVITY_COMPLETED); } g_clear_object (&activity); g_clear_error (&local_error); }
static void source_util_remove_cb (GObject *source_object, GAsyncResult *result, gpointer user_data) { ESource *source; EActivity *activity; EAlertSink *alert_sink; AsyncContext *async_context; const gchar *display_name; GError *error = NULL; source = E_SOURCE (source_object); async_context = (AsyncContext *) user_data; activity = async_context->activity; alert_sink = e_activity_get_alert_sink (activity); display_name = e_source_get_display_name (source); e_source_remove_finish (source, result, &error); if (e_activity_handle_cancellation (activity, error)) { g_error_free (error); } else if (error != NULL) { e_alert_submit ( alert_sink, "system:remove-source-fail", display_name, error->message, NULL); g_error_free (error); } else { e_activity_set_state (activity, E_ACTIVITY_COMPLETED); } async_context_free (async_context); }
static void mail_shell_view_got_folder_cb (CamelStore *store, GAsyncResult *result, AsyncContext *context) { EAlertSink *alert_sink; CamelFolder *folder; GError *error = NULL; alert_sink = e_activity_get_alert_sink (context->activity); folder = camel_store_get_folder_finish (store, result, &error); if (e_activity_handle_cancellation (context->activity, error)) { g_warn_if_fail (folder == NULL); async_context_free (context); g_error_free (error); return; } else if (error != NULL) { g_warn_if_fail (folder == NULL); e_alert_submit ( alert_sink, "mail:folder-open", error->message, NULL); async_context_free (context); g_error_free (error); return; } e_mail_reader_set_folder (context->reader, folder); e_shell_view_update_actions_in_idle (context->shell_view); g_object_unref (folder); async_context_free (context); }
void mail_filter_delete_folder (CamelStore *store, const gchar *folder_name, EAlertSink *alert_sink) { CamelSession *session; EMFilterContext *fc; const gchar *config_dir; gchar *user, *system; GList *deleted; gchar *uri; g_return_if_fail (CAMEL_IS_STORE (store)); g_return_if_fail (folder_name != NULL); g_return_if_fail (E_IS_ALERT_SINK (alert_sink)); session = camel_service_ref_session (CAMEL_SERVICE (store)); uri = e_mail_folder_uri_build (store, folder_name); fc = em_filter_context_new (E_MAIL_SESSION (session)); config_dir = mail_session_get_config_dir (); user = g_build_filename (config_dir, "filters.xml", NULL); system = g_build_filename (EVOLUTION_PRIVDATADIR, "filtertypes.xml", NULL); e_rule_context_load ((ERuleContext *) fc, system, user); g_free (system); deleted = e_rule_context_delete_uri ( (ERuleContext *) fc, uri, g_str_equal); if (deleted) { GString *s; guint s_count; gchar *info; GList *l; s = g_string_new (""); s_count = 0; for (l = deleted; l; l = l->next) { const gchar *name = (const gchar *) l->data; if (s_count == 0) { g_string_append (s, name); } else { if (s_count == 1) { g_string_prepend (s, " "); g_string_append (s, "\n"); } g_string_append_printf (s, " %s\n", name); } s_count++; } info = g_strdup_printf (ngettext ( /* Translators: The first %s is name of the affected * filter rule(s), the second %s is URI of the removed * folder. For more than one filter rule is each of * them on a separate line, with four spaces in front * of its name, without quotes. */ "The filter rule \"%s\" has been modified to account " "for the deleted folder\n\"%s\".", "The following filter rules\n%s have been modified " "to account for the deleted folder\n\"%s\".", s_count), s->str, folder_name); e_alert_submit ( alert_sink, "mail:filter-updated", info, NULL); g_string_free (s, TRUE); g_free (info); if (e_rule_context_save ((ERuleContext *) fc, user) == -1) g_warning ("Could not write out changed filter rules\n"); e_rule_context_free_uri_list ((ERuleContext *) fc, deleted); } g_free (user); g_object_unref (fc); g_free (uri); g_object_unref (session); }