fix bug 4239, 'Preferences: Text Options Header Display modal is not modal' (sic)
[claws.git] / src / editaddress.c
index 9b158ed587be8db4ef66dc2e4e40b38a02cfe3dc..0dc34d5ccd6b055e6b1f397ccd17f63c54e51eb3 100644 (file)
@@ -44,6 +44,7 @@
 #include "prefs_common.h"
 #include "menu.h"
 #include "combobox.h"
+#include "file-utils.h"
 
 /* transient data */
 static struct _PersonEdit_dlg personeditdlg;
@@ -542,16 +543,22 @@ static void edit_person_email_add( gpointer data ) {
        GtkTreeModel *model;
        GtkTreeIter iter, otheriter;
        GtkTreeSelection *sel;
-       gboolean errFlg = FALSE;
+       gboolean errFlg = FALSE, prev_exists = FALSE;
        ItemEMail *email = NULL;
 
        email = gtkut_tree_view_get_selected_pointer(
                        GTK_TREE_VIEW(personeditdlg.view_email), EMAIL_COL_PTR,
                        &model, &sel, &otheriter);
+       if (email != NULL)
+               prev_exists = TRUE;
 
        email = edit_person_email_edit( &errFlg, NULL );
        if( ! errFlg ) {
-               gtk_list_store_insert_after(GTK_LIST_STORE(model), &iter, &otheriter);
+               if (prev_exists)
+                       gtk_list_store_insert_after(GTK_LIST_STORE(model), &iter, &otheriter);
+               else /* list is empty */
+                       gtk_list_store_append(GTK_LIST_STORE(model), &iter);
+
                gtk_list_store_set(GTK_LIST_STORE(model), &iter,
                                        EMAIL_COL_EMAIL, email->address,
 #ifndef GENERIC_UMPC
@@ -735,14 +742,18 @@ static void edit_person_attrib_add(gpointer data) {
        GtkTreeModel *model;
        GtkTreeSelection *sel;
        GtkTreeIter iter, iter2;
-       UserAttribute *attrib;
+       UserAttribute *prev_attrib, *attrib;
 
-       attrib = gtkut_tree_view_get_selected_pointer(
+       attrib = edit_person_attrib_edit(&errFlg, NULL);
+       if (attrib == NULL) /* input for new attribute is not valid */
+               return;
+
+       prev_attrib = gtkut_tree_view_get_selected_pointer(
                        GTK_TREE_VIEW(personeditdlg.view_attrib), ATTRIB_COL_PTR,
                        &model, &sel, &iter);
 
-       if (attrib == NULL) {
-               /* No row selected, or list empty, add it as first row. */
+       if (prev_attrib == NULL) {
+               /* No row selected, or list empty, add new attribute as first row. */
                gtk_list_store_insert(GTK_LIST_STORE(model), &iter, 0);
        } else {
                /* Add it after the currently selected row. */
@@ -751,17 +762,14 @@ static void edit_person_attrib_add(gpointer data) {
                iter = iter2;
        }
 
-       /* Grab the values from text entries, and fill out the new row. */
-       attrib = edit_person_attrib_edit(&errFlg, NULL);
-       if (!errFlg) {
-               gtk_list_store_set(GTK_LIST_STORE(model), &iter,
-                               ATTRIB_COL_NAME, attrib->name,
-                               ATTRIB_COL_VALUE, attrib->value,
-                               ATTRIB_COL_PTR, attrib,
-                               -1);
-               gtk_tree_selection_select_iter(sel, &iter);
-               edit_person_attrib_clear(NULL);
-       }
+       /* Fill out the new row. */
+       gtk_list_store_set(GTK_LIST_STORE(model), &iter,
+                       ATTRIB_COL_NAME, attrib->name,
+                       ATTRIB_COL_VALUE, attrib->value,
+                       ATTRIB_COL_PTR, attrib,
+                       -1);
+       gtk_tree_selection_select_iter(sel, &iter);
+       edit_person_attrib_clear(NULL);
 }
 
 /*!
@@ -842,7 +850,8 @@ static void addressbook_edit_person_dialog_create( gboolean *cancelled ) {
        /* gtk_container_set_border_width(GTK_CONTAINER(window), 0); */
        gtk_window_set_title(GTK_WINDOW(window), _("Edit Person Data"));
        gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
-       gtk_window_set_modal(GTK_WINDOW(window), TRUE); 
+       gtk_window_set_modal(GTK_WINDOW(window), FALSE);
+       gtk_window_set_type_hint(GTK_WINDOW(window), GDK_WINDOW_TYPE_HINT_DIALOG);
        g_signal_connect(G_OBJECT(window), "delete_event",
                         G_CALLBACK(edit_person_delete_event),
                         cancelled);
@@ -978,7 +987,7 @@ static void addressbook_edit_person_unset_picture_menu_cb (GtkAction *action, gp
 static GtkWidget *editaddr_popup_menu = NULL;
 static GtkActionEntry editaddr_popup_entries[] =
 {
-       {"EditAddressPopup",                    NULL, "EditAddressPopup" },
+       {"EditAddressPopup",                    NULL, "EditAddressPopup", NULL, NULL, NULL },
        {"EditAddressPopup/SetPicture",         NULL, N_("_Set picture"), NULL, NULL, G_CALLBACK(addressbook_edit_person_set_picture_menu_cb) },
        {"EditAddressPopup/UnsetPicture",       NULL, N_("_Unset picture"), NULL, NULL, G_CALLBACK(addressbook_edit_person_unset_picture_menu_cb) },
 };
@@ -1932,8 +1941,8 @@ no_img:
        model = gtk_tree_view_get_model(GTK_TREE_VIEW(personeditdlg.view_attrib));
        if (gtk_tree_model_get_iter_first(model, &iter))
                gtk_tree_selection_select_iter(sel, &iter);
-               edit_person_attrib_cursor_changed(
-                               GTK_TREE_VIEW(personeditdlg.view_attrib), NULL);
+       edit_person_attrib_cursor_changed(
+                       GTK_TREE_VIEW(personeditdlg.view_attrib), NULL);
 
        edit_person_email_clear( NULL );
        edit_person_attrib_clear( NULL );