fix bug 4239, 'Preferences: Text Options Header Display modal is not modal' (sic)
[claws.git] / src / addressbook.c
index 342163ed3de1864a790b57a8f6702a6311c635fd..eeba157076d5a58793c9fb6fecc62a8b93f87725 100644 (file)
@@ -403,7 +403,7 @@ static GtkActionEntry addressbook_entries[] =
        {"Menu",                                NULL, "Menu", NULL, NULL, NULL },
 /* menus */
        {"Book",                        NULL, N_("_Book"), NULL, NULL, NULL },
-       {"Address",                     NULL, N_("_Edit"), NULL, NULL, NULL },
+       {"Edit",                        NULL, N_("_Edit"), NULL, NULL, NULL },
        {"Tools",                       NULL, N_("_Tools"), NULL, NULL, NULL },
        {"Help",                        NULL, N_("_Help"), NULL, NULL, NULL },
        
@@ -919,6 +919,7 @@ static void addressbook_create(void)
        window = gtkut_window_new(GTK_WINDOW_TOPLEVEL, "addressbook");
        gtk_window_set_title(GTK_WINDOW(window), _("Address book"));
        gtk_window_set_resizable(GTK_WINDOW(window), TRUE);
+       gtk_window_set_type_hint(GTK_WINDOW(window), GDK_WINDOW_TYPE_HINT_DIALOG);
        gtk_widget_realize(window);
 
        g_signal_connect(G_OBJECT(window), "delete_event",
@@ -944,7 +945,7 @@ static void addressbook_create(void)
        MENUITEM_ADDUI_MANAGER(ui_manager, "/", "Menu", NULL, GTK_UI_MANAGER_MENUBAR)
 
        MENUITEM_ADDUI_MANAGER(ui_manager, "/Menu", "Book", "Book", GTK_UI_MANAGER_MENU)
-       MENUITEM_ADDUI_MANAGER(ui_manager, "/Menu", "Address", "Address", GTK_UI_MANAGER_MENU)
+       MENUITEM_ADDUI_MANAGER(ui_manager, "/Menu", "Edit", "Edit", GTK_UI_MANAGER_MENU)
        MENUITEM_ADDUI_MANAGER(ui_manager, "/Menu", "Tools", "Tools", GTK_UI_MANAGER_MENU)
        MENUITEM_ADDUI_MANAGER(ui_manager, "/Menu", "Help", "Help", GTK_UI_MANAGER_MENU)
 
@@ -966,20 +967,20 @@ static void addressbook_create(void)
        MENUITEM_ADDUI_MANAGER(ui_manager, "/Menu/Book", "Close", "Book/Close", GTK_UI_MANAGER_MENUITEM)
 
 /* Address menu */
-       MENUITEM_ADDUI_MANAGER(ui_manager, "/Menu/Address", "SelectAll", "Address/SelectAll", GTK_UI_MANAGER_MENUITEM)
-       MENUITEM_ADDUI_MANAGER(ui_manager, "/Menu/Address", "Separator1", "Address/---", GTK_UI_MANAGER_SEPARATOR)
-       MENUITEM_ADDUI_MANAGER(ui_manager, "/Menu/Address", "Cut", "Address/Cut", GTK_UI_MANAGER_MENUITEM)
-       MENUITEM_ADDUI_MANAGER(ui_manager, "/Menu/Address", "Copy", "Address/Copy", GTK_UI_MANAGER_MENUITEM)
-       MENUITEM_ADDUI_MANAGER(ui_manager, "/Menu/Address", "Paste", "Address/Paste", GTK_UI_MANAGER_MENUITEM)
-       MENUITEM_ADDUI_MANAGER(ui_manager, "/Menu/Address", "Separator2", "Address/---", GTK_UI_MANAGER_SEPARATOR)
-       MENUITEM_ADDUI_MANAGER(ui_manager, "/Menu/Address", "Edit", "Address/Edit", GTK_UI_MANAGER_MENUITEM)
-       MENUITEM_ADDUI_MANAGER(ui_manager, "/Menu/Address", "Delete", "Address/Delete", GTK_UI_MANAGER_MENUITEM)
-       MENUITEM_ADDUI_MANAGER(ui_manager, "/Menu/Address", "Separator3", "Address/---", GTK_UI_MANAGER_SEPARATOR)
-       MENUITEM_ADDUI_MANAGER(ui_manager, "/Menu/Address", "NewAddress", "Address/NewAddress", GTK_UI_MANAGER_MENUITEM)
-       MENUITEM_ADDUI_MANAGER(ui_manager, "/Menu/Address", "NewGroup", "Address/NewGroup", GTK_UI_MANAGER_MENUITEM)
-       MENUITEM_ADDUI_MANAGER(ui_manager, "/Menu/Address", "Separator4", "Address/---", GTK_UI_MANAGER_SEPARATOR)
-       MENUITEM_ADDUI_MANAGER(ui_manager, "/Menu/Address", "Mailto", "Address/Mailto", GTK_UI_MANAGER_MENUITEM)
-       MENUITEM_ADDUI_MANAGER(ui_manager, "/Menu/Address", "Merge", "Address/Merge", GTK_UI_MANAGER_MENUITEM)
+       MENUITEM_ADDUI_MANAGER(ui_manager, "/Menu/Edit", "SelectAll", "Address/SelectAll", GTK_UI_MANAGER_MENUITEM)
+       MENUITEM_ADDUI_MANAGER(ui_manager, "/Menu/Edit", "Separator1", "Address/---", GTK_UI_MANAGER_SEPARATOR)
+       MENUITEM_ADDUI_MANAGER(ui_manager, "/Menu/Edit", "Cut", "Address/Cut", GTK_UI_MANAGER_MENUITEM)
+       MENUITEM_ADDUI_MANAGER(ui_manager, "/Menu/Edit", "Copy", "Address/Copy", GTK_UI_MANAGER_MENUITEM)
+       MENUITEM_ADDUI_MANAGER(ui_manager, "/Menu/Edit", "Paste", "Address/Paste", GTK_UI_MANAGER_MENUITEM)
+       MENUITEM_ADDUI_MANAGER(ui_manager, "/Menu/Edit", "Separator2", "Address/---", GTK_UI_MANAGER_SEPARATOR)
+       MENUITEM_ADDUI_MANAGER(ui_manager, "/Menu/Edit", "Edit", "Address/Edit", GTK_UI_MANAGER_MENUITEM)
+       MENUITEM_ADDUI_MANAGER(ui_manager, "/Menu/Edit", "Delete", "Address/Delete", GTK_UI_MANAGER_MENUITEM)
+       MENUITEM_ADDUI_MANAGER(ui_manager, "/Menu/Edit", "Separator3", "Address/---", GTK_UI_MANAGER_SEPARATOR)
+       MENUITEM_ADDUI_MANAGER(ui_manager, "/Menu/Edit", "NewAddress", "Address/NewAddress", GTK_UI_MANAGER_MENUITEM)
+       MENUITEM_ADDUI_MANAGER(ui_manager, "/Menu/Edit", "NewGroup", "Address/NewGroup", GTK_UI_MANAGER_MENUITEM)
+       MENUITEM_ADDUI_MANAGER(ui_manager, "/Menu/Edit", "Separator4", "Address/---", GTK_UI_MANAGER_SEPARATOR)
+       MENUITEM_ADDUI_MANAGER(ui_manager, "/Menu/Edit", "Mailto", "Address/Mailto", GTK_UI_MANAGER_MENUITEM)
+       MENUITEM_ADDUI_MANAGER(ui_manager, "/Menu/Edit", "Merge", "Address/Merge", GTK_UI_MANAGER_MENUITEM)
 
 /* Tools menu */
        MENUITEM_ADDUI_MANAGER(ui_manager, "/Menu/Tools", "ImportLDIF", "Tools/ImportLDIF", GTK_UI_MANAGER_MENUITEM)
@@ -995,6 +996,9 @@ static void addressbook_create(void)
 /* Help menu */
        MENUITEM_ADDUI_MANAGER(ui_manager, "/Menu/Help", "About", "Help/About", GTK_UI_MANAGER_MENUITEM)
 
+       gtk_window_add_accel_group(GTK_WINDOW(window),
+                       gtk_ui_manager_get_accel_group(ui_manager));
+
        menubar = gtk_ui_manager_get_widget(ui_manager, "/Menu");
 
        gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, TRUE, 0);
@@ -1016,7 +1020,6 @@ static void addressbook_create(void)
        gtk_container_add(GTK_CONTAINER(ctree_swin), ctree);
        gtk_cmclist_set_selection_mode(GTK_CMCLIST(ctree), GTK_SELECTION_BROWSE);
        gtk_cmclist_set_column_width(GTK_CMCLIST(ctree), 0, COL_FOLDER_WIDTH);
-       gtk_cmctree_set_line_style(GTK_CMCTREE(ctree), GTK_CMCTREE_LINES_NONE);
        gtk_cmctree_set_expander_style(GTK_CMCTREE(ctree),
                             GTK_CMCTREE_EXPANDER_TRIANGLE);
        gtk_sctree_set_stripes(GTK_SCTREE(ctree), prefs_common.use_stripes_in_summaries);
@@ -1065,7 +1068,6 @@ static void addressbook_create(void)
        clist = gtk_sctree_new_with_titles(N_LIST_COLS, 0, list_titles);
        gtk_container_add(GTK_CONTAINER(clist_swin), clist);
        gtk_cmclist_set_selection_mode(GTK_CMCLIST(clist), GTK_SELECTION_MULTIPLE);
-       gtk_cmctree_set_line_style(GTK_CMCTREE(clist), GTK_CMCTREE_LINES_NONE);
        gtk_cmctree_set_expander_style(GTK_CMCTREE(clist),
                             GTK_CMCTREE_EXPANDER_TRIANGLE);
        gtk_sctree_set_stripes(GTK_SCTREE(ctree), prefs_common.use_stripes_in_summaries);
@@ -1792,15 +1794,15 @@ static void addressbook_menubar_set_sensitive( gboolean sensitive ) {
        cm_menu_set_sensitive_full( addrbook.ui_manager, "Menu/Book/DeleteBook", sensitive );
        cm_menu_set_sensitive_full( addrbook.ui_manager, "Menu/Book/NewFolder",  sensitive );
 
-       cm_menu_set_sensitive_full( addrbook.ui_manager, "Menu/Address/SelectAll",    TRUE );
-       cm_menu_set_sensitive_full( addrbook.ui_manager, "Menu/Address/Cut",    sensitive );
-       cm_menu_set_sensitive_full( addrbook.ui_manager, "Menu/Address/Copy",   sensitive );
-       cm_menu_set_sensitive_full( addrbook.ui_manager, "Menu/Address/Paste",  sensitive );
+       cm_menu_set_sensitive_full( addrbook.ui_manager, "Menu/Edit/SelectAll",    TRUE );
+       cm_menu_set_sensitive_full( addrbook.ui_manager, "Menu/Edit/Cut",    sensitive );
+       cm_menu_set_sensitive_full( addrbook.ui_manager, "Menu/Edit/Copy",   sensitive );
+       cm_menu_set_sensitive_full( addrbook.ui_manager, "Menu/Edit/Paste",  sensitive );
 
-       cm_menu_set_sensitive_full( addrbook.ui_manager, "Menu/Address/NewAddress", sensitive );
-       cm_menu_set_sensitive_full( addrbook.ui_manager, "Menu/Address/NewGroup",   sensitive );
-       cm_menu_set_sensitive_full( addrbook.ui_manager, "Menu/Address/Mailto",     sensitive );
-       cm_menu_set_sensitive_full( addrbook.ui_manager, "Menu/Address/Merge",      sensitive );
+       cm_menu_set_sensitive_full( addrbook.ui_manager, "Menu/Edit/NewAddress", sensitive );
+       cm_menu_set_sensitive_full( addrbook.ui_manager, "Menu/Edit/NewGroup",   sensitive );
+       cm_menu_set_sensitive_full( addrbook.ui_manager, "Menu/Edit/Mailto",     sensitive );
+       cm_menu_set_sensitive_full( addrbook.ui_manager, "Menu/Edit/Merge",      sensitive );
        gtk_widget_set_sensitive( addrbook.edit_btn, sensitive );
        gtk_widget_set_sensitive( addrbook.del_btn, sensitive );
 }
@@ -1867,14 +1869,14 @@ static void addressbook_menuitem_set_sensitive( AddressObject *obj, GtkCMCTreeNo
                canEdit = FALSE;
 
        /* Enable add */
-       cm_menu_set_sensitive_full( addrbook.ui_manager, "Menu/Address/NewAddress", editAddress );
-       cm_menu_set_sensitive_full( addrbook.ui_manager, "Menu/Address/NewGroup",   canAdd );
+       cm_menu_set_sensitive_full( addrbook.ui_manager, "Menu/Edit/NewAddress", editAddress );
+       cm_menu_set_sensitive_full( addrbook.ui_manager, "Menu/Edit/NewGroup",   canAdd );
        cm_menu_set_sensitive_full( addrbook.ui_manager, "Menu/Book/NewFolder",  canAdd );
        gtk_widget_set_sensitive( addrbook.reg_btn, editAddress );
 
        /* Enable edit */
-       cm_menu_set_sensitive_full( addrbook.ui_manager, "Menu/Address/Edit",   canEdit );
-       cm_menu_set_sensitive_full( addrbook.ui_manager, "Menu/Address/Delete", canDelete );
+       cm_menu_set_sensitive_full( addrbook.ui_manager, "Menu/Edit/Edit",   canEdit );
+       cm_menu_set_sensitive_full( addrbook.ui_manager, "Menu/Edit/Delete", canDelete );
        gtk_widget_set_sensitive( addrbook.edit_btn, canEdit );
        gtk_widget_set_sensitive( addrbook.del_btn, canDelete );
 
@@ -2106,14 +2108,14 @@ static void addressbook_list_menu_setup( void ) {
        cm_menu_set_sensitive_full( addrbook.ui_manager, "Popups/ABListPopup/Mailto",       canCopy );
        cm_menu_set_sensitive_full( addrbook.ui_manager, "Popups/ABListPopup/Merge",        canMerge );
 
-       cm_menu_set_sensitive_full( addrbook.ui_manager, "Menu/Address/Cut",           canCut );
-       cm_menu_set_sensitive_full( addrbook.ui_manager, "Menu/Address/Copy",          canCopy );
-       cm_menu_set_sensitive_full( addrbook.ui_manager, "Menu/Address/Paste",         canPaste );
+       cm_menu_set_sensitive_full( addrbook.ui_manager, "Menu/Edit/Cut",           canCut );
+       cm_menu_set_sensitive_full( addrbook.ui_manager, "Menu/Edit/Copy",          canCopy );
+       cm_menu_set_sensitive_full( addrbook.ui_manager, "Menu/Edit/Paste",         canPaste );
 
-       cm_menu_set_sensitive_full( addrbook.ui_manager, "Menu/Address/Edit",    canEdit );
-       cm_menu_set_sensitive_full( addrbook.ui_manager, "Menu/Address/Delete",  canDelete );
-       cm_menu_set_sensitive_full( addrbook.ui_manager, "Menu/Address/Mailto", canCopy );
-       cm_menu_set_sensitive_full( addrbook.ui_manager, "Menu/Address/Merge",  canMerge );
+       cm_menu_set_sensitive_full( addrbook.ui_manager, "Menu/Edit/Edit",    canEdit );
+       cm_menu_set_sensitive_full( addrbook.ui_manager, "Menu/Edit/Delete",  canDelete );
+       cm_menu_set_sensitive_full( addrbook.ui_manager, "Menu/Edit/Mailto", canCopy );
+       cm_menu_set_sensitive_full( addrbook.ui_manager, "Menu/Edit/Merge",  canMerge );
 
        gtk_widget_set_sensitive( addrbook.edit_btn, canEdit );
        gtk_widget_set_sensitive( addrbook.del_btn, canDelete );
@@ -2388,7 +2390,7 @@ static void addressbook_mail_to_cb( GtkAction *action, gpointer data ) {
        if( ! addrselect_test_empty( _addressSelect_ ) ) {
                listAddress = addrselect_build_list( _addressSelect_ );
                compose_new_with_list( NULL, listAddress );
-               mgu_free_dlist( listAddress );
+               g_list_free_full( listAddress, g_free );
                listAddress = NULL;
        }
 }
@@ -2484,6 +2486,7 @@ static gboolean addressbook_list_button_pressed(GtkWidget *widget,
                                                gpointer data)
 {
        if( ! event ) return FALSE;
+       if( event->window != GTK_CMCLIST(widget)->clist_window ) return FALSE;
 
        addressbook_list_menu_setup();
 
@@ -2541,6 +2544,9 @@ static gboolean addressbook_tree_button_pressed(GtkWidget *ctree,
        if( ! event ) return FALSE;
 /*     if( ! event || event->type != GDK_BUTTON_PRESS) return FALSE;*/
 
+       if( event->window != clist->clist_window )
+               return FALSE;
+
        if (event->button == 1) {
                if (event->type == GDK_2BUTTON_PRESS) {
                        if( gtk_cmclist_get_selection_info( clist, event->x, event->y, &row, &column ) ) {
@@ -2672,9 +2678,9 @@ just_set_sens:
 
        cm_menu_set_sensitive_full( addrbook.ui_manager, "Menu/Book/EditBook",          canEdit );
        cm_menu_set_sensitive_full( addrbook.ui_manager, "Menu/Book/DeleteBook",        canDelete );
-       cm_menu_set_sensitive_full( addrbook.ui_manager, "Menu/Address/Cut",           canCut );
-       cm_menu_set_sensitive_full( addrbook.ui_manager, "Menu/Address/Copy",          canCopy );
-       cm_menu_set_sensitive_full( addrbook.ui_manager, "Menu/Address/Paste",         canPaste );
+       cm_menu_set_sensitive_full( addrbook.ui_manager, "Menu/Edit/Cut",           canCut );
+       cm_menu_set_sensitive_full( addrbook.ui_manager, "Menu/Edit/Copy",          canCopy );
+       cm_menu_set_sensitive_full( addrbook.ui_manager, "Menu/Edit/Paste",         canPaste );
 
        addressbook_show_buttons(addrbook.target_compose == NULL, canLookup,
                        addrbook.target_compose != NULL);
@@ -3159,7 +3165,7 @@ static ItemFolder * addressbook_setup_subf(
                GList *cur = children;
                for (; cur; cur = cur->next) {
                        ItemFolder *child = (ItemFolder *) cur->data;
-                       if (!strcmp2(ADDRITEM_NAME(child), title)) {
+                       if (!g_strcmp0(ADDRITEM_NAME(child), title)) {
                                nNode = gtk_cmctree_find_by_row_data_custom(
                                        ctree, NULL, child,
                                        addressbook_treenode_find_folder_cb );
@@ -3406,7 +3412,7 @@ static void addressbook_edit_address_post_cb( ItemPerson *person )
                AddressBookFile *abf = addressbook_get_book_file();
 
                if (abf && abf->type == ADBOOKTYPE_LDAP) {
-                       if (strcmp2(person->nickName, ADDRITEM_NAME(person)))
+                       if (g_strcmp0(person->nickName, ADDRITEM_NAME(person)))
                                addritem_person_set_nick_name( person, ADDRITEM_NAME(person));
                }
 #endif
@@ -3427,9 +3433,9 @@ void addressbook_address_list_set_focus( void )
 void addressbook_address_list_disable_some_actions(void)
 {
        /* disable address copy/pasting when editing contact's detail (embedded form) */
-       cm_menu_set_sensitive_full( addrbook.ui_manager, "Menu/Address/Cut",   FALSE );
-       cm_menu_set_sensitive_full( addrbook.ui_manager, "Menu/Address/Copy",  FALSE );
-       cm_menu_set_sensitive_full( addrbook.ui_manager, "Menu/Address/Paste", FALSE );
+       cm_menu_set_sensitive_full( addrbook.ui_manager, "Menu/Edit/Cut",   FALSE );
+       cm_menu_set_sensitive_full( addrbook.ui_manager, "Menu/Edit/Copy",  FALSE );
+       cm_menu_set_sensitive_full( addrbook.ui_manager, "Menu/Edit/Paste", FALSE );
 }
 
 static void addressbook_edit_address_cb( GtkAction *action, gpointer data ) {
@@ -3772,7 +3778,6 @@ static void addressbook_folder_load_person( GtkCMCTree *clist, ItemFolder *itemF
                addressbook_folder_load_one_person( clist, cur->data, atci, atciMail );
        }
        /* Free up the list */
-       mgu_clear_list( items );
        g_list_free( items );
 }
 
@@ -3850,7 +3855,6 @@ static void addressbook_folder_load_group( GtkCMCTree *clist, ItemFolder *itemFo
                gtk_sctree_sort_node(clist, NULL);
        }
        /* Free up the list */
-       mgu_clear_list( items );
        g_list_free( items );
 }
 
@@ -5249,7 +5253,6 @@ static void addrbookctl_build_ifselect( void ) {
        g_free( selectStr );
 
        /* Replace existing list */
-       mgu_clear_list( _addressIFaceSelection_ );
        g_list_free( _addressIFaceSelection_ );
        _addressIFaceSelection_ = newList;
        newList = NULL;