diff options
Diffstat (limited to 'mail/mail-signature-editor.c')
-rw-r--r-- | mail/mail-signature-editor.c | 85 |
1 files changed, 48 insertions, 37 deletions
diff --git a/mail/mail-signature-editor.c b/mail/mail-signature-editor.c index b34644676e..8ee79f9243 100644 --- a/mail/mail-signature-editor.c +++ b/mail/mail-signature-editor.c @@ -136,12 +136,13 @@ static void menu_file_save_cb (BonoboUIComponent *uic, void *user_data, const char *path) { ESignatureEditor *editor = user_data; + ESignature *signature; Bonobo_PersistStream pstream_iface; - char *dirname, *base, *filename; + char *dirname, *base, *filename, *name; CORBA_Environment ev; GByteArray *text; int fd; - + d(printf ("editor->sig->filename = %s\n", editor->sig->filename)); dirname = g_path_get_dirname (editor->sig->filename); d(printf ("dirname = %s\n", dirname)); @@ -151,40 +152,57 @@ menu_file_save_cb (BonoboUIComponent *uic, void *user_data, const char *path) d(printf ("filename = %s\n", filename)); g_free (dirname); g_free (base); - + CORBA_exception_init (&ev); pstream_iface = Bonobo_Unknown_queryInterface - (bonobo_widget_get_objref (BONOBO_WIDGET (editor->control)), - "IDL:Bonobo/PersistStream:1.0", &ev); - + (bonobo_widget_get_objref (BONOBO_WIDGET (editor->control)), + "IDL:Bonobo/PersistStream:1.0", &ev); + if (ev._major != CORBA_NO_EXCEPTION) goto exception; - + if ((fd = open (filename, O_WRONLY | O_TRUNC | O_CREAT, 0666)) == -1) goto exception; - + text = get_text (pstream_iface, editor->html ? "text/html" : "text/plain", &ev); if (ev._major != CORBA_NO_EXCEPTION) { close (fd); goto exception; } - + if (write_all (fd, text->data, text->len) == -1) { g_byte_array_free (text, TRUE); close (fd); goto exception; } - + g_byte_array_free (text, TRUE); close (fd); - + if (rename (filename, editor->sig->filename) == -1) goto exception; - + g_free (filename); - + editor->sig->html = editor->html; + + name = g_strstrip (g_strdup (gtk_entry_get_text (GTK_ENTRY (editor->name_entry)))); + + if (g_str_equal(name, "") ) { + e_error_run ((GtkWindow *)editor->win, "mail:blank-signature", NULL); + return; + } + if ( (signature = (ESignature *)e_signature_list_find (mail_config_get_signatures (), E_SIGNATURE_FIND_NAME, name)) && !g_str_equal(signature->uid, editor->sig->uid) ) { + e_error_run ((GtkWindow *)editor->win, "mail:signature-already-exists", name, NULL); + return; + } + + if (editor->sig->name) + g_free (editor->sig->name); + + editor->sig->name = name; + /* if the signature isn't already saved in the config, save it there now... */ if (editor->is_new) { mail_config_add_signature (editor->sig); @@ -192,11 +210,12 @@ menu_file_save_cb (BonoboUIComponent *uic, void *user_data, const char *path) } else { e_signature_list_change (mail_config_get_signatures (), editor->sig); } - + + destroy_editor (editor); + return; - - exception: - + +exception: menu_file_save_error (uic, &ev); CORBA_exception_free (&ev); unlink (filename); @@ -220,26 +239,26 @@ static void do_exit (ESignatureEditor *editor) { CORBA_Environment ev; - + CORBA_exception_init (&ev); - - if (GNOME_GtkHTML_Editor_Engine_hasUndo (editor->engine, &ev)) { + + if (GNOME_GtkHTML_Editor_Engine_hasUndo (editor->engine, &ev) || GPOINTER_TO_INT( g_object_get_data( G_OBJECT(editor->win), "name-changed"))) { int button; button = e_error_run((GtkWindow *)editor->win, "mail:ask-signature-changed", NULL); exit_dialog_cb (button, editor); - } else + } else destroy_editor (editor); - + CORBA_exception_free (&ev); } -static int +static int delete_event_cb (GtkWidget *w, GdkEvent *event, ESignatureEditor *editor) { do_exit (editor); - return FALSE; + return TRUE; } static void @@ -259,7 +278,6 @@ menu_file_save_close_cb (BonoboUIComponent *uic, gpointer data, const char *path editor = E_SIGNATURE_EDITOR (data); menu_file_save_cb (uic, editor, path); - destroy_editor (editor); } static BonoboUIVerb verbs [] = { @@ -280,8 +298,7 @@ load_signature (ESignatureEditor *editor) Bonobo_PersistFile pfile_iface; CORBA_exception_init (&ev); - pfile_iface = Bonobo_Unknown_queryInterface (bonobo_widget_get_objref (BONOBO_WIDGET (editor->control)), - "IDL:Bonobo/PersistFile:1.0", &ev); + pfile_iface = Bonobo_Unknown_queryInterface (bonobo_widget_get_objref (BONOBO_WIDGET (editor->control)),"IDL:Bonobo/PersistFile:1.0", &ev); Bonobo_PersistFile_load (pfile_iface, editor->sig->filename, &ev); CORBA_exception_free (&ev); } else { @@ -323,15 +340,7 @@ load_signature (ESignatureEditor *editor) static void sig_name_changed (GtkWidget *w, ESignatureEditor *editor) { - const char *name; - - name = gtk_entry_get_text (GTK_ENTRY (editor->name_entry)); - - g_free (editor->sig->name); - editor->sig->name = g_strdup (name); - - if (!editor->is_new) - e_signature_list_change (mail_config_get_signatures (), editor->sig); + g_object_set_data ( G_OBJECT(editor->win), "name-changed", GINT_TO_POINTER(1)); } static void @@ -368,13 +377,15 @@ mail_signature_editor (ESignature *sig, GtkWindow *parent, gboolean is_new) editor->sig = sig; editor->html = sig->html; editor->is_new = is_new; - + editor->win = bonobo_window_new ("e-sig-editor", _("Edit signature")); gtk_window_set_type_hint (GTK_WINDOW (editor->win), GDK_WINDOW_TYPE_HINT_DIALOG); gtk_window_set_default_size (GTK_WINDOW (editor->win), DEFAULT_WIDTH, DEFAULT_HEIGHT); if (parent != NULL) gtk_window_set_transient_for (GTK_WINDOW (editor->win), parent); g_object_set (editor->win, "allow_shrink", FALSE, "allow_grow", TRUE, NULL); + + g_object_set_data (G_OBJECT(editor->win), "name-changed", GINT_TO_POINTER(0)); container = bonobo_window_get_ui_container (BONOBO_WINDOW(editor->win)); |