evolution r35007 - branches/mbarnes-composer/mail
- From: mbarnes svn gnome org
- To: svn-commits-list gnome org
- Subject: evolution r35007 - branches/mbarnes-composer/mail
- Date: Wed, 13 Feb 2008 14:52:47 +0000 (GMT)
Author: mbarnes
Date: Wed Feb 13 14:52:47 2008
New Revision: 35007
URL: http://svn.gnome.org/viewvc/evolution?rev=35007&view=rev
Log:
Fix bugs in the signature editor. Seems to be working nicely now.
Modified:
branches/mbarnes-composer/mail/mail-signature-editor.c
Modified: branches/mbarnes-composer/mail/mail-signature-editor.c
==============================================================================
--- branches/mbarnes-composer/mail/mail-signature-editor.c (original)
+++ branches/mbarnes-composer/mail/mail-signature-editor.c Wed Feb 13 14:52:47 2008
@@ -45,7 +45,7 @@
GtkActionGroup *action_group;
ESignature *signature;
GtkWidget *entry;
- gboolean entry_changed;
+ gchar *original_name;
};
static const gchar *ui =
@@ -82,9 +82,14 @@
ESignatureEditor *editor)
{
gboolean something_changed = FALSE;
+ const gchar *original_name;
+ const gchar *signature_name;
+
+ original_name = editor->priv->original_name;
+ signature_name = gtk_entry_get_text (GTK_ENTRY (editor->priv->entry));
something_changed |= gtkhtml_editor_has_undo (GTKHTML_EDITOR (editor));
- something_changed |= editor->priv->entry_changed;
+ something_changed |= (strcmp (signature_name, original_name) != 0);
if (something_changed) {
gint response;
@@ -100,7 +105,8 @@
action_group, "save-and-close");
gtk_action_activate (action);
return;
- }
+ } else if (response == GTK_RESPONSE_CANCEL)
+ return;
}
gtk_widget_destroy (GTK_WIDGET (editor));
@@ -110,7 +116,7 @@
action_save_and_close_cb (GtkAction *action,
ESignatureEditor *editor)
{
- GtkEntry *signature_entry;
+ GtkWidget *entry;
ESignatureList *signature_list;
ESignature *signature;
ESignature *same_name;
@@ -119,6 +125,7 @@
gboolean html;
GError *error = NULL;
+ entry = editor->priv->entry;
html = gtkhtml_editor_get_html_mode (GTKHTML_EDITOR (editor));
if (editor->priv->signature == NULL)
@@ -142,26 +149,29 @@
signature_list = mail_config_get_signatures ();
- signature_entry = GTK_ENTRY (editor->priv->entry);
- signature_name = g_strdup (gtk_entry_get_text (signature_entry));
+ signature_name = g_strdup (gtk_entry_get_text (GTK_ENTRY (entry)));
g_strstrip (signature_name);
+ /* Make sure the signature name is not blank. */
if (*signature_name == '\0') {
e_error_run (
GTK_WINDOW (editor),
"mail:blank-signature", NULL);
+ gtk_widget_grab_focus (entry);
g_free (signature_name);
return;
}
- /* XXX ESignatureList misuses const. */
+ /* Don't overwrite an existing signature of the same name.
+ * XXX ESignatureList misuses const. */
same_name = (ESignature *) e_signature_list_find (
signature_list, E_SIGNATURE_FIND_NAME, signature_name);
- if (same_name != NULL && strcmp (signature->uid, same_name->uid) == 0) {
+ if (same_name != NULL && strcmp (signature->uid, same_name->uid) != 0) {
e_error_run (
GTK_WINDOW (editor),
"mail:signature-already-exists",
signature_name, NULL);
+ gtk_widget_grab_focus (entry);
g_free (signature_name);
return;
}
@@ -216,13 +226,6 @@
}
static void
-signature_editor_entry_changed_cb (ESignatureEditor *editor,
- GtkEntry *entry)
-{
- editor->priv->entry_changed = TRUE;
-}
-
-static void
signature_editor_set_property (GObject *object,
guint property_id,
const GValue *value,
@@ -283,6 +286,19 @@
}
static void
+signature_editor_finalize (GObject *object)
+{
+ ESignatureEditorPrivate *priv;
+
+ priv = E_SIGNATURE_EDITOR_GET_PRIVATE (object);
+
+ g_free (priv->original_name);
+
+ /* Chain up to parent's finalize() method. */
+ G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static void
signature_editor_class_init (ESignatureEditorClass *class)
{
GObjectClass *object_class;
@@ -294,6 +310,7 @@
object_class->set_property = signature_editor_set_property;
object_class->get_property = signature_editor_get_property;
object_class->dispose = signature_editor_dispose;
+ object_class->finalize = signature_editor_finalize;
g_object_class_install_property (
object_class,
@@ -347,11 +364,8 @@
widget = gtk_entry_new ();
gtk_box_pack_end (GTK_BOX (container), widget, TRUE, TRUE, 0);
- g_signal_connect_swapped (
- widget, "changed",
- G_CALLBACK (signature_editor_entry_changed_cb), editor);
- gtk_widget_show (widget);
editor->priv->entry = g_object_ref_sink (widget);
+ gtk_widget_show (widget);
widget = gtk_label_new_with_mnemonic (_("_Signature Name:"));
gtk_label_set_mnemonic_widget (GTK_LABEL (widget), editor->priv->entry);
@@ -361,6 +375,8 @@
g_signal_connect (
editor, "delete-event",
G_CALLBACK (signature_editor_delete_event_cb), NULL);
+
+ e_signature_editor_set_signature (editor, NULL);
}
GType
@@ -409,6 +425,7 @@
ESignature *signature)
{
const gchar *filename;
+ const gchar *signature_name;
gchar *contents;
gsize length;
GError *error = NULL;
@@ -426,6 +443,10 @@
if (signature == NULL)
goto exit;
+ editor->priv->signature = g_object_ref (signature);
+
+ /* Load signature content. */
+
filename = signature->filename;
if (signature->html)
@@ -451,8 +472,27 @@
}
exit:
- gtk_entry_set_text (
- GTK_ENTRY (editor->priv->entry),
- (signature != NULL) ? signature->name : "");
+ if (signature != NULL)
+ signature_name = signature->name;
+ else
+ signature_name = _("Unnamed");
+
+ /* Set the entry text before we grab focus. */
+ g_free (editor->priv->original_name);
+ editor->priv->original_name = g_strdup (signature_name);
+ gtk_entry_set_text (GTK_ENTRY (editor->priv->entry), signature_name);
+
+ /* Set the focus appropriately. If this is a new signature, draw
+ * the user's attention to the signature name entry. Otherwise go
+ * straight to the editing area. */
+ if (signature == NULL)
+ gtk_widget_grab_focus (editor->priv->entry);
+ else {
+ GtkHTML *html;
+
+ html = gtkhtml_editor_get_html (GTKHTML_EDITOR (editor));
+ gtk_widget_grab_focus (GTK_WIDGET (html));
+ }
+
g_object_notify (G_OBJECT (editor), "signature");
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]