Define .error files correctly and external-editor crash fix

** Fix for bug #561188
This commit is contained in:
Milan Crha
2009-04-27 11:34:11 +02:00
parent 631d0bfd08
commit 0f7060ee7d
15 changed files with 137 additions and 88 deletions

View File

@ -1,3 +1,10 @@
2009-04-27 Milan Crha <mcrha@redhat.com>
** Fix for bug #561188
* e-error.c: (e_error_newv): Do not localize already localized text.
Use default title for empty titles too, not only for NULL titles.
2009-04-24 Milan Crha <mcrha@redhat.com>
** Fix for bug #572348

View File

@ -507,8 +507,8 @@ e_error_newv(GtkWindow *parent, const char *tag, const char *arg0, va_list ap)
out = g_string_new("");
if (e->title) {
ee_build_label(out, dgettext(table->translation_domain, e->title), args, FALSE);
if (e->title && *e->title) {
ee_build_label(out, e->title, args, FALSE);
gtk_window_set_title((GtkWindow *)dialog, out->str);
g_string_truncate(out, 0);
} else
@ -517,19 +517,19 @@ e_error_newv(GtkWindow *parent, const char *tag, const char *arg0, va_list ap)
if (e->primary) {
g_string_append(out, "<span weight=\"bold\" size=\"larger\">");
ee_build_label(out, dgettext(table->translation_domain, e->primary), args, TRUE);
ee_build_label(out, e->primary, args, TRUE);
g_string_append(out, "</span>\n\n");
oerr = g_string_new("");
ee_build_label(oerr, dgettext(table->translation_domain, e->primary), args, FALSE);
ee_build_label(oerr, e->primary, args, FALSE);
perr = g_strdup (oerr->str);
g_string_free (oerr, TRUE);
} else
perr = g_strdup (gtk_window_get_title (GTK_WINDOW (dialog)));
if (e->secondary) {
ee_build_label(out, dgettext(table->translation_domain, e->secondary), args, TRUE);
ee_build_label(out, e->secondary, args, TRUE);
oerr = g_string_new("");
ee_build_label(oerr, dgettext(table->translation_domain, e->secondary), args, TRUE);
ee_build_label(oerr, e->secondary, args, TRUE);
serr = g_strdup (oerr->str);
g_string_free (oerr, TRUE);
}

View File

@ -1,3 +1,14 @@
2009-04-27 Milan Crha <mcrha@redhat.com>
** Fix for bug #561188
* external-editor.c: (show_error), (read_file),
(async_external_editor), (show_composer_dialog):
Do more things in main thread.
* Makefile.am:
* org-gnome-external-editor-errors.xml: Renamed to:
* org-gnome-external-editor.error.xml: Create .error file properly.
2009-01-28 Tor Lillqvist <tml@novell.com>
Windows port by Fridrich Strba.

View File

@ -21,7 +21,7 @@ INCLUDES = \
@EVO_PLUGIN_RULE@
error_DATA = org-gnome-external-editor-errors.xml
error_DATA = org-gnome-external-editor.error
errordir = $(privdatadir)/errors
plugin_DATA = \
@ -53,12 +53,12 @@ install-data-local:
EXTRA_DIST = \
org-gnome-external-editor.eplug.xml \
org-gnome-external-editor-errors.xml \
org-gnome-external-editor.error.xml \
org-gnome-external-editor.xml \
$(schema_in_files)
BUILT_SOURCES = org-gnome-external-editor.eplug \
$(error_i18n)
org-gnome-external-editor.error
CLEANFILES = $(BUILT_SOURCES)

View File

@ -54,8 +54,6 @@
void org_gnome_external_editor (EPlugin *ep, EMMenuTargetSelect *select);
void ee_editor_command_changed (GtkWidget *textbox);
GtkWidget * e_plugin_lib_get_configure_widget (EPlugin *epl);
void async_external_editor (GArray *array);
static gboolean show_composer_dialog (EMsgComposer *composer);
/* Utility function to convert an email address to CamelInternetAddress.
May be this should belong to CamelInternetAddress.h file itself. */
@ -132,7 +130,76 @@ e_plugin_lib_get_configure_widget (EPlugin *epl)
return vbox;
}
void
static gboolean
show_error (const char *id)
{
if (id)
e_error_run (NULL, id, NULL);
return FALSE;
}
static gboolean
read_file (char *filename)
{
gchar *buf;
CamelMimeMessage *message;
EMsgComposer *composer;
message = camel_mime_message_new ();
if (filename && g_file_get_contents (filename, &buf, NULL, NULL)) {
gchar **tokens;
int i, j;
tokens = g_strsplit (buf, "###|||", 6);
for (i = 1; tokens[i]; ++i) {
for (j = 0; tokens[i][j] && tokens[i][j] != '\n'; ++j) {
tokens [i][j] = ' ';
}
if (tokens[i][j] == '\n')
tokens[i][j] = ' ';
d(printf ("\nstripped off token[%d] is : %s \n", i, tokens[i]));
}
camel_mime_message_set_recipients (message, "To", convert_to_camel_internet_address(g_strchug(g_strdup(tokens[1]))));
camel_mime_message_set_recipients (message, "Cc", convert_to_camel_internet_address(g_strchug(g_strdup(tokens[2]))));
camel_mime_message_set_recipients (message, "Bcc", convert_to_camel_internet_address(g_strchug(g_strdup(tokens[3]))));
camel_mime_message_set_subject (message, tokens[4]);
camel_mime_part_set_content ((CamelMimePart *)message, tokens [5], strlen (tokens [5]), "text/plain");
/* FIXME: We need to make mail-remote working properly.
So that we neednot invoke composer widget at all.
May be we can do it now itself by invoking local CamelTransport.
But all that is not needed for the first release.
People might want to format mails using their editor (80 cols width etc.)
But might want to use evolution addressbook for auto-completion etc.
So starting the composer window anyway.
*/
composer = e_msg_composer_new_with_message (message);
g_signal_connect (GTK_OBJECT (composer), "send", G_CALLBACK (em_utils_composer_send_cb), NULL);
g_signal_connect (GTK_OBJECT (composer), "save-draft", G_CALLBACK (em_utils_composer_save_draft_cb), NULL);
gtk_widget_show (GTK_WIDGET (composer));
g_strfreev (tokens);
/* We no longer need that temporary file */
g_remove (filename);
}
g_free (filename);
return FALSE;
}
static void
async_external_editor (GArray *array)
{
char *filename = NULL;
@ -148,9 +215,9 @@ async_external_editor (GArray *array)
if (!g_spawn_sync (NULL, argv, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, NULL, NULL, &status, NULL))
{
g_warning ("Unable to launch %s: ", argv[0]);
e_error_run (NULL, "org.gnome.evolution.plugins.external-editor:editor-not-launchable", NULL);
g_idle_add ((GSourceFunc)show_error, "org.gnome.evolution.plugins.external-editor:editor-not-launchable");
g_free (filename);
return ;
return;
}
#ifdef HAVE_SYS_WAIT_H
@ -159,73 +226,13 @@ async_external_editor (GArray *array)
if (status) {
#endif
d(printf ("\n\nsome problem here with external editor\n\n"));
return ;
g_free (filename);
return;
} else {
gchar *buf;
CamelMimeMessage *message;
EMsgComposer *composer;
message = camel_mime_message_new ();
if (g_file_get_contents (filename, &buf, NULL, NULL)) {
gchar **tokens;
int i, j;
tokens = g_strsplit (buf, "###|||", 6);
for (i = 1; tokens[i]; ++i) {
for (j = 0; tokens[i][j] && tokens[i][j] != '\n'; ++j) {
tokens [i][j] = ' ';
}
if (tokens[i][j] == '\n')
tokens[i][j] = ' ';
d(printf ("\nstripped off token[%d] is : %s \n", i, tokens[i]));
}
camel_mime_message_set_recipients (message, "To", convert_to_camel_internet_address(g_strchug(g_strdup(tokens[1]))));
camel_mime_message_set_recipients (message, "Cc", convert_to_camel_internet_address(g_strchug(g_strdup(tokens[2]))));
camel_mime_message_set_recipients (message, "Bcc", convert_to_camel_internet_address(g_strchug(g_strdup(tokens[3]))));
camel_mime_message_set_subject (message, tokens[4]);
camel_mime_part_set_content ((CamelMimePart *)message, tokens [5], strlen (tokens [5]), "text/plain");
/* FIXME: We need to make mail-remote working properly.
So that we neednot invoke composer widget at all.
May be we can do it now itself by invoking local CamelTransport.
But all that is not needed for the first release.
People might want to format mails using their editor (80 cols width etc.)
But might want to use evolution addressbook for auto-completion etc.
So starting the composer window anyway.
*/
composer = e_msg_composer_new_with_message (message);
g_signal_connect (GTK_OBJECT (composer), "send", G_CALLBACK (em_utils_composer_send_cb), NULL);
g_signal_connect (GTK_OBJECT (composer), "save-draft", G_CALLBACK (em_utils_composer_save_draft_cb), NULL);
/* Composer cannot be shown in any random thread. Should happen in main thread */
g_idle_add ((GSourceFunc) show_composer_dialog, composer);
g_strfreev (tokens);
/* We no longer need that temporary file */
g_remove (filename);
g_free (filename);
}
g_idle_add ((GSourceFunc)read_file, filename);
}
}
static gboolean
show_composer_dialog (EMsgComposer *composer)
{
gtk_widget_show (GTK_WIDGET(composer));
return FALSE;
}
void org_gnome_external_editor (EPlugin *ep, EMMenuTargetSelect *select)
{
/* The template to be used in the external editor */

View File

@ -1,3 +1,11 @@
2009-04-27 Milan Crha <mcrha@redhat.com>
** Part of fix for bug #561188
* Makefile.am:
* org-gnome-face.errors.xml: Renamed to:
* org-gnome-face.error.xml: Create .error file properly.
2008-08-27 Sankar P <psankar@novell.com>
License Changes

View File

@ -29,16 +29,16 @@ liborg_gnome_face_la_LIBADD = \
liborg_gnome_face_la_LDFLAGS = -module -avoid-version $(NO_UNDEFINED)
error_DATA = \
org-gnome-face.errors.xml
org-gnome-face.error
errordir = $(privdatadir)/errors
EXTRA_DIST = \
org-gnome-face.eplug.xml \
$(error_DATA)
org-gnome-face.error.xml
BUILT_SOURCES = \
org-gnome-face.eplug \
$(error_i18n)
org-gnome-face.error
CLEANFILES = $(BUILT_SOURCES)

View File

@ -1,3 +1,18 @@
2009-04-27 Milan Crha <mcrha@redhat.com>
** Part of fix for bug #561188
* Makefile.am:
* org-gnome-proxy-login-errors.xml: Renamed to:
* org-gnome-proxy-login.error.xml:
* org-gnome-mail-retract-errors.xml: Renamed to:
* org-gnome-mail-retract.error.xml:
* org-gnome-shared-folder.errors.xml: Renamed to:
* org-gnome-shared-folder.error.xml:
* org-gnome-proxy-errors.xml: Renamed to:
* org-gnome-proxy.error.xml:
Create .error files properly.
2009-01-21 Suman Manjunath <msuman@novell.com>
** Fix for bug #541209

View File

@ -62,22 +62,23 @@ glade_DATA = \
proxy-listing.glade \
proxy-login-dialog.glade
error_DATA = \
org-gnome-shared-folder.errors.xml \
org-gnome-proxy-errors.xml \
org-gnome-proxy-login-errors.xml \
org-gnome-mail-retract-errors.xml
error_DATA = \
org-gnome-shared-folder.error \
org-gnome-proxy.error \
org-gnome-proxy-login.error \
org-gnome-mail-retract.error
errordir = $(privdatadir)/errors
BUILT_SOURCES = org-gnome-groupwise-features.eplug $(error_i18n)
EXTRA_DIST = \
$(error_DATA) \
$(glade_DATA) \
org-gnome-compose-send-options.xml \
org-gnome-groupwise-features.eplug.xml \
org-gnome-proxy-login-errors.xml \
org-gnome-mail-retract-errors.xml
org-gnome-shared-folder.error.xml \
org-gnome-proxy.error.xml \
org-gnome-proxy-login.error.xml \
org-gnome-mail-retract.error.xml
CLEANFILES = $(BUILT_SOURCES)