commit bc5b1aef39ce116f29023e02532e1da23c4cac4b from: Oliver Lowe date: Sat Aug 16 07:30:54 2025 UTC Start removing address book custom attributes commit - df64897d90df65aa6ae53d6c1a9442261e962c15 commit + bc5b1aef39ce116f29023e02532e1da23c4cac4b blob - 680deef003a6b1fabf0f880f70678b24f5a33114 blob + 28986a35b65cafa84ec61319148cbff98d08c0a7 --- src/Makefile.am +++ src/Makefile.am @@ -22,7 +22,6 @@ bin_PROGRAMS = claws-mail abook_source = \ addrbook.c \ addrclip.c \ - addrcustomattr.c \ addressbook.c \ addressbook_foldersel.c \ addrindex.c \ @@ -38,7 +37,6 @@ abook_headers = \ adbookbase.h \ addrbook.h \ addrclip.h \ - addrcustomattr.h \ addressbook.h \ addressbook_foldersel.h \ addrindex.h \ blob - 08ee006622dfeb6bebc5f41a80bc9365d7b1b490 (mode 644) blob + /dev/null --- src/addrcustomattr.c +++ /dev/null @@ -1,656 +0,0 @@ -/* - * Claws Mail -- a GTK based, lightweight, and fast e-mail client - * Copyright (C) 2007-2024 The Claws Mail Team - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#ifdef HAVE_CONFIG_H -# include "config.h" -#include "claws-features.h" -#endif - -#include "defs.h" - -#include -#include -#include -#include -#include -#include - -#include "menu.h" -#include "addrcustomattr.h" -#include "manage_window.h" -#include "prefs_common.h" -#include "alertpanel.h" -#include "addrbook.h" -#include "editaddress.h" - -static GtkActionGroup *custom_attr_popup_action = NULL; -static GtkWidget *custom_attr_popup_menu = NULL; - -static struct CustomAttrWindow -{ - GtkWidget *window; - GtkWidget *attr_list; - GtkWidget *hbox1; - GtkWidget *hbox2; - GtkWidget *vbox1; - GtkWidget *label; - GtkWidget *cancel_btn; - GtkWidget *ok_btn; - GtkWidget *add_entry; - GtkWidget *add_btn; -} custom_attr_window; - -enum { - CUSTOM_ATTR_NAME, - N_CUSTOM_ATTR -}; - -static gchar *default_addressbook_attributes_table[] = { - N_("date of birth"), - N_("address"), - N_("phone"), - N_("mobile phone"), - N_("organization"), - N_("office address"), - N_("office phone"), - N_("fax"), - N_("website"), - NULL -}; - -static gboolean dirty = FALSE; - -static void custom_attr_window_create(void); -static void custom_attr_selected_attr_edited(GtkCellRendererText *widget, - gchar *arg1, gchar *arg2, - GtkWidget *list_view); -static void custom_attr_window_load_list(GList *list); -static void custom_attr_window_save_list (void); -static GList *custom_attr_default_list(void); - -void addressbook_custom_attr_edit() -{ - if (!custom_attr_window.window) - custom_attr_window_create(); - - manage_window_set_transient(GTK_WINDOW(custom_attr_window.window)); - gtk_widget_grab_focus(custom_attr_window.ok_btn); - - custom_attr_window_load_list(prefs_common.addressbook_custom_attributes); - - gtk_widget_show(custom_attr_window.window); - gtk_widget_grab_focus(custom_attr_window.attr_list); - gtk_window_set_modal(GTK_WINDOW(custom_attr_window.window), TRUE); -} - -static gint custom_attr_cmp_func (GtkTreeModel *model, GtkTreeIter *a, - GtkTreeIter *b, gpointer userdata) - { - gchar *name1, *name2; - gint res; - - gtk_tree_model_get(model, a, CUSTOM_ATTR_NAME, &name1, -1); - gtk_tree_model_get(model, b, CUSTOM_ATTR_NAME, &name2, -1); - - if (name1 == NULL) - return name2 == NULL ? 0:1; - - if (name2 == NULL) - return 1; - - res = g_utf8_collate(name1, name2); - g_free(name1); - g_free(name2); - - return res; -} - -static GtkListStore* custom_attr_window_create_data_store(void) -{ - GtkListStore *store = gtk_list_store_new(N_CUSTOM_ATTR, - G_TYPE_STRING, - -1); - GtkTreeSortable *sortable = GTK_TREE_SORTABLE(store); - - gtk_tree_sortable_set_sort_func(sortable, 0, custom_attr_cmp_func, - NULL, NULL); - - return store; -} - -static void custom_attr_window_create_list_view_columns(GtkWidget *list_view) -{ - GtkTreeViewColumn *column; - GtkCellRenderer *renderer; - - renderer = gtk_cell_renderer_text_new(); - g_object_set(G_OBJECT(renderer), "editable", TRUE, NULL); - - column = gtk_tree_view_column_new_with_attributes - (_("Attribute name"), - renderer, - "text", CUSTOM_ATTR_NAME, - NULL); - gtk_tree_view_append_column(GTK_TREE_VIEW(list_view), column); - gtk_tree_view_column_set_resizable(column, TRUE); - gtk_tree_view_set_search_column(GTK_TREE_VIEW(list_view), - CUSTOM_ATTR_NAME); - g_signal_connect(G_OBJECT(renderer), "edited", - G_CALLBACK(custom_attr_selected_attr_edited), - list_view); -} - -static void custom_attr_window_list_view_clear_list(GtkWidget *list_view, gboolean warn) -{ - if (!warn || alertpanel(_("Delete all attribute names"), - _("Do you really want to delete all attribute names?"), - NULL, _("_Cancel"), "edit-delete", _("D_elete"), NULL, NULL, - ALERTFOCUS_FIRST) == G_ALERTALTERNATE) { - GtkListStore *list_store = GTK_LIST_STORE(gtk_tree_view_get_model - (GTK_TREE_VIEW(list_view))); - gtk_list_store_clear(list_store); - dirty = TRUE; - } -} - -static void custom_attr_popup_clear_list (void *obj, void *data) -{ - custom_attr_window_list_view_clear_list(custom_attr_window.attr_list, TRUE); -} - -static void custom_attr_popup_delete (void *obj, void *data) -{ - GtkTreeIter sel; - GtkTreeModel *model; - - if (!gtk_tree_selection_get_selected(gtk_tree_view_get_selection - (GTK_TREE_VIEW(custom_attr_window.attr_list)), - &model, &sel)) - return; - - if (alertpanel(_("Delete attribute name"), - _("Do you really want to delete this attribute name?"), - NULL, _("_Cancel"), "edit-delete", _("D_elete"), NULL, NULL, - ALERTFOCUS_FIRST) == G_ALERTALTERNATE) { - gtk_list_store_remove(GTK_LIST_STORE(model), &sel); - dirty = TRUE; - } -} - -static void custom_attr_popup_factory_defaults (void *obj, void *data) -{ - if (alertpanel(_("Reset to default"), - _("Do you really want to replace all attribute names\nwith the default set?"), - NULL, _("_No"), NULL, _("_Yes"), NULL, NULL, ALERTFOCUS_FIRST) == G_ALERTALTERNATE) { - GList *tmp = custom_attr_default_list(); - custom_attr_window_load_list(tmp); - if (tmp) { - GList *cur; - cur = tmp; - while (cur) { - g_free(cur->data); - cur = cur->next; - } - g_list_free(tmp); - } - dirty = TRUE; - } -} - -static GtkActionEntry custom_attr_popup_entries[] = -{ - {"CustomAttrPopup", NULL, "CustomAttrPopup", NULL, NULL, NULL }, - {"CustomAttrPopup/Delete", NULL, N_("_Delete"), NULL, NULL, G_CALLBACK(custom_attr_popup_delete) }, - {"CustomAttrPopup/DeleteAll", NULL, N_("Delete _all"), NULL, NULL, G_CALLBACK(custom_attr_popup_clear_list) }, - {"CustomAttrPopup/Reset", NULL, N_("_Reset to default"), NULL, NULL, G_CALLBACK(custom_attr_popup_factory_defaults) }, -}; - -static gint custom_attr_list_btn_pressed(GtkWidget *widget, GdkEventButton *event, - GtkTreeView *list_view) -{ - if (event && event->button == 3) { - GtkTreeModel *model = gtk_tree_view_get_model(list_view); - GtkTreeIter iter; - gboolean non_empty; - - if (!custom_attr_popup_menu) { - custom_attr_popup_action = cm_menu_create_action_group("CustomAttrPopup", custom_attr_popup_entries, - G_N_ELEMENTS(custom_attr_popup_entries), (gpointer)list_view); - MENUITEM_ADDUI("/Menus", "CustomAttrPopup", "CustomAttrPopup", GTK_UI_MANAGER_MENU) - MENUITEM_ADDUI("/Menus/CustomAttrPopup", "Delete", "CustomAttrPopup/Delete", GTK_UI_MANAGER_MENUITEM) - MENUITEM_ADDUI("/Menus/CustomAttrPopup", "DeleteAll", "CustomAttrPopup/DeleteAll", GTK_UI_MANAGER_MENUITEM) - MENUITEM_ADDUI("/Menus/CustomAttrPopup", "Reset", "CustomAttrPopup/Reset", GTK_UI_MANAGER_MENUITEM) - custom_attr_popup_menu = gtk_menu_item_get_submenu(GTK_MENU_ITEM( - gtk_ui_manager_get_widget(gtkut_ui_manager(), "/Menus/CustomAttrPopup")) ); - } - - /* grey out popup menu items if list is empty */ - non_empty = gtk_tree_model_get_iter_first(model, &iter); - cm_menu_set_sensitive("CustomAttrPopup/Delete", non_empty); - cm_menu_set_sensitive("CustomAttrPopup/DeleteAll", non_empty); - - gtk_menu_popup_at_widget(GTK_MENU(custom_attr_popup_menu), widget, 3, 3, NULL); - - return FALSE; - } - return FALSE; -} - -static gboolean custom_attr_list_popup_menu(GtkWidget *widget, gpointer data) -{ - GtkTreeView *list_view = (GtkTreeView *)data; - GdkEventButton event; - - event.button = 3; - event.time = gtk_get_current_event_time(); - - custom_attr_list_btn_pressed(NULL, &event, list_view); - - return TRUE; -} - -static GtkWidget *custom_attr_window_list_view_create (void) -{ - GtkTreeView *list_view; - GtkTreeSelection *selector; - GtkTreeModel *model; - - model = GTK_TREE_MODEL(custom_attr_window_create_data_store()); - list_view = GTK_TREE_VIEW(gtk_tree_view_new_with_model(model)); - gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(model), - CUSTOM_ATTR_NAME, GTK_SORT_ASCENDING); - g_object_unref(model); - - selector = gtk_tree_view_get_selection(list_view); - gtk_tree_selection_set_mode(selector, GTK_SELECTION_BROWSE); - - /* create the columns */ - custom_attr_window_create_list_view_columns(GTK_WIDGET(list_view)); - - g_signal_connect(G_OBJECT(list_view), "popup-menu", - G_CALLBACK(custom_attr_list_popup_menu), list_view); - g_signal_connect(G_OBJECT(list_view), "button-press-event", - G_CALLBACK(custom_attr_list_btn_pressed), list_view); - return GTK_WIDGET(list_view); -} - -static void custom_attr_window_close(void) -{ - if (dirty) - custom_attr_window_save_list(); - custom_attr_window_list_view_clear_list(custom_attr_window.attr_list, FALSE); - gtk_widget_hide(custom_attr_window.window); - gtk_window_set_modal(GTK_WINDOW(custom_attr_window.window), FALSE); - if (dirty && !prefs_common.addressbook_use_editaddress_dialog) - addressbook_edit_reload_attr_list(); -} - -static void custom_attr_window_cancel_cb(GtkWidget *widget, - gpointer data) -{ - dirty = FALSE; - custom_attr_window_close(); -} - -static void custom_attr_window_ok_cb(GtkWidget *widget, - gpointer data) -{ - custom_attr_window_close(); -} - -static void custom_attr_selected_attr_edited(GtkCellRendererText *widget, - gchar *path, gchar *new_text, - GtkWidget *list_view) -{ - GtkTreeIter iter; - GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(list_view)); - - if (!gtk_tree_model_get_iter_from_string(model, &iter, path)) - return; - - if (!new_text || !*new_text) - return; - - gtk_list_store_set(GTK_LIST_STORE(model), &iter, - CUSTOM_ATTR_NAME, new_text, - -1); - dirty = TRUE; -} - -typedef struct FindAttrInStore { - gchar *attr; - GtkTreePath *path; - GtkTreeIter iter; -} FindAttrInStore; - -static gboolean find_attr_in_store(GtkTreeModel *model, - GtkTreePath *path, - GtkTreeIter *iter, - FindAttrInStore *data) -{ - gchar *attr; - gtk_tree_model_get(model, iter, CUSTOM_ATTR_NAME, &attr, -1); - - if (g_utf8_collate(data->attr, attr)==0) { - data->path = path; /* signal we found it */ - data->iter = *iter; - g_free(attr); - return TRUE; - } - g_free(attr); - return FALSE; -} - -static void custom_attr_window_add_attr(void) -{ - gchar *new_attr = gtk_editable_get_chars(GTK_EDITABLE(custom_attr_window.add_entry), - 0, -1); - if (new_attr) - g_strstrip(new_attr); - if (new_attr && *new_attr) { - GtkListStore *list_store = GTK_LIST_STORE(gtk_tree_view_get_model - (GTK_TREE_VIEW(custom_attr_window.attr_list))); - FindAttrInStore fis; - - fis.attr = new_attr; - fis.path = NULL; - gtk_tree_model_foreach(gtk_tree_view_get_model - (GTK_TREE_VIEW(custom_attr_window.attr_list)), - (GtkTreeModelForeachFunc) find_attr_in_store, - &fis); - - if (fis.path) { - /* activate existing one */ - GtkTreeSelection *selection; - GtkTreePath* path; - GtkTreeModel *model = gtk_tree_view_get_model( - GTK_TREE_VIEW(custom_attr_window.attr_list)); - - selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(custom_attr_window.attr_list)); - gtk_tree_selection_select_iter(selection, &fis.iter); - - path = gtk_tree_model_get_path(model, &fis.iter); - /* XXX returned path may not be valid??? create new one to be sure */ - gtk_tree_view_set_cursor(GTK_TREE_VIEW(custom_attr_window.attr_list), - path, NULL, FALSE); - - gtk_list_store_set(list_store, &fis.iter, - CUSTOM_ATTR_NAME, new_attr, - -1); - - gtk_tree_path_free(path); - } else { - /* append new */ - GtkTreeIter iter; - - gtk_list_store_append(list_store, &iter); - gtk_list_store_set(list_store, &iter, - CUSTOM_ATTR_NAME, new_attr, - -1); - } - dirty = TRUE; - } else { - alertpanel_error(_("Attribute name is not set.")); - } - g_free(new_attr); -} - -static void custom_attr_window_add_attr_cb(GtkWidget *widget, - gpointer data) -{ - custom_attr_window_add_attr(); - gtk_entry_set_text(GTK_ENTRY(custom_attr_window.add_entry), ""); - gtk_widget_grab_focus(custom_attr_window.attr_list); -} - -static void custom_attr_window_del_attr_cb(GtkWidget *widget, - gpointer data) -{ - custom_attr_popup_delete(NULL, NULL); - gtk_widget_grab_focus(custom_attr_window.attr_list); -} - -static gboolean custom_attr_window_key_pressed(GtkWidget *widget, - GdkEventKey *event, gpointer data) -{ - if (event && event->keyval == GDK_KEY_Escape) - custom_attr_window_close(); - else if (event && event->keyval == GDK_KEY_Delete) - custom_attr_popup_delete(NULL, NULL); - return FALSE; -} - -static gboolean custom_attr_window_add_key_pressed(GtkWidget *widget, - GdkEventKey *event, gpointer data) -{ - if (event && (event->keyval == GDK_KEY_KP_Enter || event->keyval == GDK_KEY_Return)) { - custom_attr_window_add_attr(); - gtk_entry_set_text(GTK_ENTRY(custom_attr_window.add_entry), ""); - gtk_widget_grab_focus(custom_attr_window.attr_list); - } - return FALSE; -} - -static void custom_attr_window_create(void) -{ - GtkWidget *window; - GtkWidget *hbox1; - GtkWidget *hbox2; - GtkWidget *vbox1; - GtkWidget *label; - GtkWidget *attr_list; - GtkWidget *cancel_btn; - GtkWidget *ok_btn; - GtkWidget *scrolledwin; - GtkWidget *new_attr_label; - GtkWidget *new_attr_entry; - GtkWidget *add_btn; - GtkWidget *del_btn; - - window = gtkut_window_new(GTK_WINDOW_TOPLEVEL, "custom_attr_edit_window"); - gtk_window_set_title (GTK_WINDOW(window), - C_("Dialog title", "Edit attribute names")); - - gtk_container_set_border_width (GTK_CONTAINER (window), 8); - gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_CENTER); - gtk_window_set_resizable(GTK_WINDOW (window), TRUE); - g_signal_connect(G_OBJECT(window), "delete_event", - G_CALLBACK(custom_attr_window_cancel_cb), NULL); - g_signal_connect(G_OBJECT(window), "key_press_event", - G_CALLBACK(custom_attr_window_key_pressed), NULL); - MANAGE_WINDOW_SIGNALS_CONNECT (window); - - vbox1 = gtk_box_new(GTK_ORIENTATION_VERTICAL, 6); - hbox1 = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 6); - - new_attr_label = gtk_label_new(_("New attribute name:")); - gtk_label_set_xalign(GTK_LABEL(new_attr_label), 0.0); - gtk_box_pack_start(GTK_BOX(hbox1), new_attr_label, FALSE, FALSE, 0); - - new_attr_entry = gtk_entry_new(); - gtk_box_pack_start(GTK_BOX(hbox1), new_attr_entry, FALSE, FALSE, 0); - g_signal_connect(G_OBJECT(new_attr_entry), "key_press_event", - G_CALLBACK(custom_attr_window_add_key_pressed), NULL); - - add_btn = gtkut_stock_button("list-add", _("_Add")); - gtk_box_pack_start(GTK_BOX(hbox1), add_btn, FALSE, FALSE, 0); - - del_btn = gtkut_stock_button("edit-delete", _("D_elete")); - gtk_box_pack_start(GTK_BOX(hbox1), del_btn, FALSE, FALSE, 0); - - gtkut_stock_button_set_create(&hbox2, &cancel_btn, NULL, _("_Cancel"), - &ok_btn, NULL, _("_OK"), - NULL, NULL, NULL); - - gtk_widget_show(new_attr_label); - gtk_widget_show(new_attr_entry); - gtk_widget_show(add_btn); - gtk_widget_show(del_btn); - gtk_widget_show(cancel_btn); - gtk_widget_show(ok_btn); - - g_signal_connect(G_OBJECT(cancel_btn), "clicked", - G_CALLBACK(custom_attr_window_cancel_cb), NULL); - g_signal_connect(G_OBJECT(ok_btn), "clicked", - G_CALLBACK(custom_attr_window_ok_cb), NULL); - g_signal_connect(G_OBJECT(add_btn), "clicked", - G_CALLBACK(custom_attr_window_add_attr_cb), NULL); - g_signal_connect(G_OBJECT(del_btn), "clicked", - G_CALLBACK(custom_attr_window_del_attr_cb), NULL); - - attr_list = custom_attr_window_list_view_create(); - - label = gtk_label_new(_("Adding or removing attribute names won't " - "affect attributes already set for contacts.")); - gtk_widget_set_size_request(GTK_WIDGET(label), 380, -1); - gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); - gtk_label_set_xalign(GTK_LABEL(label), 0.0); - gtk_box_pack_start(GTK_BOX(vbox1), label, FALSE, TRUE, 0); - - scrolledwin = gtk_scrolled_window_new(NULL, NULL); - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwin), - GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); - - gtk_widget_set_size_request(scrolledwin, 400, 250); - - gtk_container_add(GTK_CONTAINER(scrolledwin), attr_list); - gtk_box_pack_start(GTK_BOX(vbox1), scrolledwin, TRUE, TRUE, 0); - gtk_box_pack_start(GTK_BOX(vbox1), hbox1, FALSE, FALSE, 0); - gtk_box_pack_start(GTK_BOX(vbox1), hbox2, FALSE, FALSE, 0); - - gtk_widget_show(label); - gtk_widget_show(scrolledwin); - gtk_widget_show(attr_list); - gtk_widget_show(hbox2); - gtk_widget_show(hbox1); - gtk_widget_show(vbox1); - gtk_container_add(GTK_CONTAINER (window), vbox1); - - custom_attr_window.window = window; - custom_attr_window.hbox1 = hbox1; - custom_attr_window.hbox2 = hbox2; - custom_attr_window.vbox1 = vbox1; - custom_attr_window.label = label; - custom_attr_window.attr_list = attr_list; - custom_attr_window.cancel_btn = cancel_btn; - custom_attr_window.ok_btn = ok_btn; - custom_attr_window.add_btn = add_btn; - custom_attr_window.add_entry = new_attr_entry; -} - -static void custom_attr_window_load_list (GList *list) -{ - /* copy attribute names list from prefs to store */ - GList *cur; - GtkTreeIter iter; - GtkListStore *list_store = GTK_LIST_STORE(gtk_tree_view_get_model - (GTK_TREE_VIEW(custom_attr_window.attr_list))); - - custom_attr_window_list_view_clear_list(custom_attr_window.attr_list, FALSE); - - cur = list; - while (cur) { - gtk_list_store_append(list_store, &iter); - gtk_list_store_set(list_store, &iter, - CUSTOM_ATTR_NAME, cur->data, - -1); - cur = cur->next; - } -} - -static GList *store_to_glist = NULL; - -static gboolean custom_attr_store_to_glist (GtkTreeModel *model, - GtkTreePath *path, - GtkTreeIter *iter, - gpointer *data) -{ - gchar *attr; - - gtk_tree_model_get(model, iter, CUSTOM_ATTR_NAME, &attr, -1); - if (attr) { - store_to_glist = g_list_prepend(store_to_glist, g_strdup(attr)); - g_free(attr); - } - return FALSE; -} - -static void custom_attr_window_save_list (void) -{ - GList *cur; - - /* clear existing attribute names list in prefs */ - cur = prefs_common.addressbook_custom_attributes; - while (cur) { - g_free(cur->data); - cur = cur->next; - } - g_list_free(prefs_common.addressbook_custom_attributes); - - /* copy attribute names list from store to prefs */ - gtk_tree_model_foreach(gtk_tree_view_get_model - (GTK_TREE_VIEW(custom_attr_window.attr_list)), - (GtkTreeModelForeachFunc) custom_attr_store_to_glist, - NULL); - prefs_common.addressbook_custom_attributes = g_list_reverse(store_to_glist); - store_to_glist = NULL; -} - -static GList *custom_attr_default_list(void) -{ - /* returned GList must be deallocated by caller */ - GList *list; - gint i; - i = 0; - - list = NULL; - while (default_addressbook_attributes_table[i]) { - list = g_list_prepend( - list, g_strdup(gettext(default_addressbook_attributes_table[i]))); - i++; - } - list = g_list_reverse(list); - return list; -} - -GList *addressbook_update_custom_attr_from_prefs(void) -{ - /* load addressbook custom attribute names list from file */ - /* use a list of default attribute names if storage file doesn't exist */ - GList *list; - GList *default_attr_list; - GList *cur; - - /* load table into glist */ - default_attr_list = custom_attr_default_list(); - - list = prefs_common_read_history_from_dir_with_defaults(ADDRBOOK_DIR, - ADDRESSBOOK_CUSTOM_ATTRIBUTES, - default_attr_list); - - /* free glist if it's the one we return (the default one) */ - if (list != default_attr_list) { - cur = default_attr_list; - while (cur) { - g_free(cur->data); - cur = cur->next; - } - g_list_free(default_attr_list); - } - return list; -} blob - 243fe66d852eb9aa2bb242b694cec543f2e78bf2 (mode 644) blob + /dev/null --- src/addrcustomattr.h +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Claws Mail -- a GTK based, lightweight, and fast e-mail client - * Copyright (C) 2007-2012 The Claws Mail team - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ - -#ifndef __ADDRCUSTOMATTR_H__ -#define __ADDRCUSTOMATTR_H__ - -void addressbook_custom_attr_edit(void); -GList *addressbook_update_custom_attr_from_prefs(void); - -#endif blob - 631eb53da34478104d9ef9db15903664821ae420 blob + 7db688cb0cee34ae5ba0f83277012923653f3536 --- src/addressbook.c +++ src/addressbook.c @@ -70,7 +70,6 @@ #include "addrclip.h" #include "addrgather.h" #include "adbookbase.h" -#include "addrcustomattr.h" typedef enum { @@ -294,7 +293,6 @@ static void addressbook_list_select_add ( AddrItemObj static void addressbook_list_select_remove ( AddrItemObject *aio ); static void addressbook_find_duplicates_cb ( GtkAction *action, gpointer data ); -static void addressbook_edit_custom_attr_cb ( GtkAction *action, gpointer data ); static void addressbook_select_all_cb ( GtkAction *action, gpointer data ); static void addressbook_clip_cut_cb ( GtkAction *action, gpointer data ); static void addressbook_clip_copy_cb ( GtkAction *action, gpointer data ); @@ -381,7 +379,6 @@ static GtkActionEntry addressbook_entries[] = {"Tools/---", NULL, "---", NULL, NULL, NULL }, {"Tools/FindDuplicates", NULL, N_("Find duplicates..."), NULL, NULL, G_CALLBACK(addressbook_find_duplicates_cb) }, - {"Tools/EditAttrs", NULL, N_("Edit custom attributes..."), NULL, NULL, G_CALLBACK(addressbook_edit_custom_attr_cb) }, }; static GtkActionEntry addressbook_tree_popup_entries[] = @@ -872,11 +869,7 @@ static void addressbook_create(void) 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) - MENUITEM_ADDUI_MANAGER(ui_manager, "/Menu/Tools", "Separator1", "Tools/---", GTK_UI_MANAGER_SEPARATOR) - MENUITEM_ADDUI_MANAGER(ui_manager, "/Menu/Tools", "ExportHTML", "Tools/ExportHTML", GTK_UI_MANAGER_MENUITEM) - MENUITEM_ADDUI_MANAGER(ui_manager, "/Menu/Tools", "Separator2", "Tools/---", GTK_UI_MANAGER_SEPARATOR) MENUITEM_ADDUI_MANAGER(ui_manager, "/Menu/Tools", "FindDuplicates", "Tools/FindDuplicates", GTK_UI_MANAGER_MENUITEM) - MENUITEM_ADDUI_MANAGER(ui_manager, "/Menu/Tools", "EditAttrs", "Tools/EditAttrs", GTK_UI_MANAGER_MENUITEM) gtk_window_add_accel_group(GTK_WINDOW(window), gtk_ui_manager_get_accel_group(ui_manager)); @@ -1752,8 +1745,6 @@ static void addressbook_menuitem_set_sensitive( Addres cm_menu_set_sensitive_full( addrbook.ui_manager, "Menu/Book/EditBook", canEditTr ); cm_menu_set_sensitive_full( addrbook.ui_manager, "Menu/Book/DeleteBook", canEditTr ); - - cm_menu_set_sensitive_full( addrbook.ui_manager, "Menu/Tools/ExportHTML", canExport ); } /** @@ -4297,21 +4288,6 @@ static void addressbook_refresh_current( void ) { static gchar *_tempMessage_ = N_( "Busy searching..." ); /** - * Address search idle function. This function is called during UI idle time - * while a search is in progress. - * - * \param data Idler data. - */ -static void addressbook_search_idle( gpointer data ) { - /* - gint queryID; - - queryID = GPOINTER_TO_INT( data ); - g_print( "addressbook_ldap_idle... queryID=%d\n", queryID ); - */ -} - -/** * Search completion callback function. This removes the query from the idle * list. * @@ -4359,7 +4335,6 @@ static void addressbook_perform_search( ItemFolder *folder; gchar *name; gint queryID; - guint idleID; /* Setup a query */ if( *searchTerm == '\0' || strlen( searchTerm ) < 1 ) return; @@ -4376,14 +4351,6 @@ static void addressbook_perform_search( ds, searchTerm, folder, addressbook_search_callback_end, NULL ); if( queryID == 0 ) return; - /* Set up idler function */ - idleID = g_idle_add( - (GSourceFunc) addressbook_search_idle, - GINT_TO_POINTER( queryID ) ); - if (idleID == 0) { - g_message("error adding addressbook_search_idle\n"); - } - /* Start search, sit back and wait for something to happen */ addrindex_start_search( queryID ); @@ -5039,11 +5006,6 @@ static void addressbook_find_duplicates_cb(GtkAction * addrduplicates_find(GTK_WINDOW(addrbook.window)); } -static void addressbook_edit_custom_attr_cb(GtkAction *action, gpointer data) -{ - addressbook_custom_attr_edit(); -} - static void addressbook_start_drag(GtkWidget *widget, gint button, GdkEvent *event, void *data) blob - 700a79579b44e2b2b9a27f5c2ce12c03cfec4490 blob + 8840f19bcd9fe251690874c5d418bc8cdfc3ad73 --- src/editaddress.c +++ src/editaddress.c @@ -81,17 +81,8 @@ struct _PersonEdit_dlg { GtkWidget *email_mod; GtkWidget *email_add; - /* Attribute data tab */ - GtkWidget *entry_atname; - GtkWidget *entry_atvalue; - GtkWidget *view_attrib; - GtkWidget *attrib_add; - GtkWidget *attrib_del; - GtkWidget *attrib_mod; - gboolean editNew; gboolean read_only; - gboolean ldap; }; /* transient data */ @@ -120,11 +111,9 @@ typedef enum { #define PAGE_BASIC 0 #define PAGE_EMAIL 1 -#define PAGE_ATTRIBUTES 2 static gboolean addressbook_edit_person_close( gboolean cancelled ); static GList *edit_person_build_email_list(); -static GList *edit_person_build_attrib_list(); static gchar* edit_person_get_common_name_from_widgets(void) { @@ -168,10 +157,9 @@ static void edit_person_cancel(GtkWidget *widget, gboo static void edit_person_ok(GtkWidget *widget, gboolean *cancelled) { GList *listEMail = edit_person_build_email_list(); - GList *listAttrib = edit_person_build_attrib_list(); gchar *cn = edit_person_get_common_name_from_widgets(); - if( (cn == NULL || *cn == '\0') && listEMail == NULL && listAttrib == NULL ) { + if( (cn == NULL || *cn == '\0') && listEMail == NULL) { gint val; val = alertpanel( _("Add New Person"), @@ -347,13 +335,6 @@ static void edit_person_email_clear( gpointer data ) { gtk_entry_set_text( GTK_ENTRY(personeditdlg.entry_remarks), "" ); } -static void edit_person_attrib_clear( gpointer data ) { - if (!personeditdlg.ldap) { - gtk_entry_set_text( GTK_ENTRY(gtk_bin_get_child(GTK_BIN((personeditdlg.entry_atname)))), "" ); - gtk_entry_set_text( GTK_ENTRY(personeditdlg.entry_atvalue), "" ); - } -} - static void edit_person_switch_page( GtkNotebook *notebook, gpointer page, gint pageNum, gpointer user_data) { @@ -438,23 +419,6 @@ static void edit_person_email_move_down( gpointer data edit_person_email_update_buttons(); } -static void edit_person_attrib_cursor_changed(GtkTreeView *view, - gpointer user_data) -{ - UserAttribute *attrib = gtkut_tree_view_get_selected_pointer( - view, ATTRIB_COL_PTR, NULL, NULL, NULL); - - if( attrib && !personeditdlg.read_only && !personeditdlg.ldap ) { - gtk_entry_set_text( GTK_ENTRY(gtk_bin_get_child(GTK_BIN((personeditdlg.entry_atname))) ), attrib->name ); - gtk_entry_set_text( GTK_ENTRY(personeditdlg.entry_atvalue), attrib->value ); - gtk_widget_set_sensitive(personeditdlg.attrib_del, TRUE); - } else { - gtk_widget_set_sensitive(personeditdlg.attrib_del, FALSE); - } - edit_person_status_show( NULL ); -} - - static void edit_person_email_delete( gpointer data ) { GtkTreeModel *model; GtkTreeIter iter; @@ -606,182 +570,6 @@ static gboolean list_find_email(const gchar *addr) return FALSE; } -static gboolean list_find_attribute(const gchar *attr) -{ - GtkWidget *view = personeditdlg.view_attrib; - GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(view)); - GtkTreeSelection *sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(view)); - GtkTreeIter iter; - UserAttribute *attrib; - - if (!gtk_tree_model_get_iter_first(model, &iter)) - return FALSE; - - do { - gtk_tree_model_get(model, &iter, ATTRIB_COL_PTR, &attrib, -1); - if (!g_ascii_strcasecmp(attrib->name, attr)) { - gtk_tree_selection_select_iter(sel, &iter); - return TRUE; - } - } while (gtk_tree_model_iter_next(model, &iter)); - - return FALSE; -} - -/* -* Load list with a copy of person's email addresses. -*/ -static void edit_person_load_attrib( ItemPerson *person ) { - GList *node = person->listAttrib; - GtkWidget *view = personeditdlg.view_attrib; - GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(view)); - GtkTreeIter iter; - - while( node ) { - UserAttribute *atorig = ( UserAttribute * ) node->data; - UserAttribute *attrib = addritem_copy_attribute( atorig ); - - debug_print("name: %s value: %s\n", attrib->name, attrib->value); - - gtk_list_store_append(GTK_LIST_STORE(model), &iter); - gtk_list_store_set(GTK_LIST_STORE(model), &iter, - ATTRIB_COL_NAME, attrib->name, - ATTRIB_COL_VALUE, attrib->value, - ATTRIB_COL_PTR, attrib, - -1); - - node = g_list_next( node ); - } -} - -static void edit_person_attrib_delete(gpointer data) { - UserAttribute *attrib; - GtkTreeModel *model; - GtkTreeSelection *sel; - GtkTreeIter iter; - gboolean has_row = FALSE; - gint n; - - edit_person_attrib_clear(NULL); - edit_person_status_show(NULL); - - attrib = gtkut_tree_view_get_selected_pointer( - GTK_TREE_VIEW(personeditdlg.view_attrib), ATTRIB_COL_PTR, - &model, &sel, &iter); - - if (attrib) { - /* Remove list entry, and set iter to next row, if any */ - has_row = gtk_list_store_remove(GTK_LIST_STORE(model), &iter); - addritem_free_attribute(attrib); - attrib = NULL; - } - - /* Position hilite bar */ - if (!has_row) { - /* The removed row was the last in the list, so iter is not - * valid. Find out if there is at least one row remaining - * in the list, and select the last one if so. */ - n = gtk_tree_model_iter_n_children(model, NULL); - if (n > 0 && gtk_tree_model_iter_nth_child(model, &iter, NULL, n-1)) { - /* It exists. */ - has_row = TRUE; - } - } - - if (has_row) - gtk_tree_selection_select_iter(sel, &iter); - - edit_person_attrib_cursor_changed( - GTK_TREE_VIEW(personeditdlg.view_attrib), NULL); -} - -static UserAttribute *edit_person_attrib_edit( gboolean *error, UserAttribute *attrib ) { - UserAttribute *retVal = NULL; - gchar *sName, *sValue, *sName_, *sValue_; - - *error = TRUE; - sName_ = gtk_editable_get_chars( GTK_EDITABLE(gtk_bin_get_child(GTK_BIN((personeditdlg.entry_atname)))), 0, -1 ); - sValue_ = gtk_editable_get_chars( GTK_EDITABLE(personeditdlg.entry_atvalue), 0, -1 ); - sName = mgu_email_check_empty( sName_ ); - sValue = mgu_email_check_empty( sValue_ ); - g_free( sName_ ); - g_free( sValue_ ); - - if( sName && sValue ) { - if( attrib == NULL ) { - attrib = addritem_create_attribute(); - } - addritem_attrib_set_name( attrib, sName ); - addritem_attrib_set_value( attrib, sValue ); - retVal = attrib; - *error = FALSE; - } - else { - edit_person_status_show( _( "A Name and Value must be supplied." ) ); - } - - g_free( sName ); - g_free( sValue ); - - return retVal; -} - -static void edit_person_attrib_modify(gpointer data) { - gboolean errFlg = FALSE; - GtkTreeModel *model; - GtkTreeIter iter; - UserAttribute *attrib; - - attrib = gtkut_tree_view_get_selected_pointer( - GTK_TREE_VIEW(personeditdlg.view_attrib), ATTRIB_COL_PTR, - &model, NULL, &iter); - if (attrib) { - edit_person_attrib_edit(&errFlg, attrib); - if (!errFlg) { - gtk_list_store_set(GTK_LIST_STORE(model), &iter, - ATTRIB_COL_NAME, attrib->name, - ATTRIB_COL_VALUE, attrib->value, - -1); - edit_person_attrib_clear(NULL); - } - } -} - -static void edit_person_attrib_add(gpointer data) { - gboolean errFlg = FALSE; - GtkTreeModel *model; - GtkTreeSelection *sel; - GtkTreeIter iter, iter2; - UserAttribute *prev_attrib, *attrib; - - 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 (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. */ - gtk_list_store_insert_after(GTK_LIST_STORE(model), &iter2, - &iter); - iter = iter2; - } - - /* 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); -} - /*! *\brief Save Gtk object size to prefs dataset */ @@ -935,9 +723,6 @@ static void addressbook_edit_person_set_picture(void) gchar *filename; int width, height, scalewidth, scaleheight; - if (personeditdlg.ldap) - return; - if ( (filename = filesel_select_file_open(_("Choose a picture"), NULL)) ) { GdkPixbuf *pixbuf = NULL; gdk_pixbuf_get_file_info(filename, &width, &height); @@ -1352,202 +1137,6 @@ static void addressbook_edit_person_page_email( gint p personeditdlg.email_add = buttonAdd; } -static gboolean attrib_adding = FALSE, attrib_saving = FALSE; - -static void edit_person_entry_att_changed (GtkWidget *entry, gpointer data) -{ - GtkTreeModel *model = gtk_tree_view_get_model( - GTK_TREE_VIEW(personeditdlg.view_attrib)); - gboolean non_empty = (gtk_tree_model_iter_n_children(model, NULL) > 0); - const gchar *atname; - - if (personeditdlg.read_only || personeditdlg.ldap) - return; - - atname = gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN((personeditdlg.entry_atname))))); - if ( atname == NULL - || strlen(atname) == 0) { - gtk_widget_set_sensitive(personeditdlg.attrib_add,FALSE); - gtk_widget_set_sensitive(personeditdlg.attrib_mod,FALSE); - attrib_adding = FALSE; - attrib_saving = FALSE; - } else if (list_find_attribute(atname)) { - gtk_widget_set_sensitive(personeditdlg.attrib_add,FALSE); - gtk_widget_set_sensitive(personeditdlg.attrib_mod,non_empty); - attrib_adding = FALSE; - attrib_saving = non_empty; - } else { - gtk_widget_set_sensitive(personeditdlg.attrib_add,TRUE); - gtk_widget_set_sensitive(personeditdlg.attrib_mod,non_empty); - attrib_adding = TRUE; - attrib_saving = non_empty; - } -} - -static gboolean edit_person_entry_att_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data) -{ - if (event && (event->keyval == GDK_KEY_KP_Enter || - event->keyval == GDK_KEY_Return)) { - if (attrib_saving) - edit_person_attrib_modify(NULL); - else if (attrib_adding) - edit_person_attrib_add(NULL); - } - return FALSE; -} - -static void addressbook_edit_person_page_attrib( gint pageNum, gchar *pageLbl ) { - GtkWidget *vbox; - GtkWidget *hbox; - GtkWidget *vboxl; - GtkWidget *vboxb; - GtkWidget *vbuttonbox; - GtkWidget *buttonDel; - GtkWidget *buttonMod; - GtkWidget *buttonAdd; - - GtkWidget *table; - GtkWidget *label; - GtkWidget *scrollwin; - GtkWidget *view; - GtkWidget *entry_name; - GtkWidget *entry_value; - GtkListStore *store; - GtkTreeViewColumn *col; - GtkCellRenderer *rdr; - GtkTreeSelection *sel; - - vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 8 ); - gtk_widget_show( vbox ); - gtk_container_add( GTK_CONTAINER( personeditdlg.notebook ), vbox ); - gtk_container_set_border_width( GTK_CONTAINER (vbox), BORDER_WIDTH ); - - label = gtk_label_new_with_mnemonic( pageLbl ); - gtk_widget_show( label ); - gtk_notebook_set_tab_label( - GTK_NOTEBOOK( personeditdlg.notebook ), - gtk_notebook_get_nth_page( GTK_NOTEBOOK( personeditdlg.notebook ), pageNum ), label ); - - /* Split into two areas */ - hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0 ); - gtk_container_add( GTK_CONTAINER( vbox ), hbox ); - - /* Attribute list */ - vboxl = gtk_box_new(GTK_ORIENTATION_VERTICAL, 4 ); - gtk_container_add( GTK_CONTAINER( hbox ), vboxl ); - gtk_container_set_border_width( GTK_CONTAINER(vboxl), 4 ); - - scrollwin = gtk_scrolled_window_new( NULL, NULL ); - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollwin), - GTK_POLICY_AUTOMATIC, - GTK_POLICY_AUTOMATIC); - gtk_scrolled_window_set_propagate_natural_height(GTK_SCROLLED_WINDOW(scrollwin), TRUE); - - store = gtk_list_store_new(ATTRIB_N_COLS, - G_TYPE_STRING, G_TYPE_STRING, - G_TYPE_POINTER, -1); - - view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store)); - g_object_unref(store); - gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(view), TRUE); - sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(view)); - gtk_tree_selection_set_mode(sel, GTK_SELECTION_BROWSE); - - rdr = gtk_cell_renderer_text_new(); - col = gtk_tree_view_column_new_with_attributes(_("Name"), rdr, - "markup", ATTRIB_COL_NAME, NULL); - gtk_tree_view_column_set_min_width(col, ATTRIB_COL_WIDTH_NAME); - gtk_tree_view_append_column(GTK_TREE_VIEW(view), col); - - col = gtk_tree_view_column_new_with_attributes(_("Value"), rdr, - "markup", ATTRIB_COL_VALUE, NULL); - gtk_tree_view_column_set_min_width(col, ATTRIB_COL_WIDTH_VALUE); - gtk_tree_view_append_column(GTK_TREE_VIEW(view), col); - - gtk_container_add( GTK_CONTAINER(scrollwin), view ); - - /* Data entry area */ - table = gtk_grid_new(); - gtk_box_pack_start(GTK_BOX(vboxl), table, FALSE, FALSE, 0); - gtk_container_add( GTK_CONTAINER(vboxl), scrollwin ); - gtk_container_set_border_width( GTK_CONTAINER(table), 4 ); - gtk_grid_set_row_spacing(GTK_GRID(table), 4); - gtk_grid_set_column_spacing(GTK_GRID(table), 4); - - /* First row */ - label = gtk_label_new(_("Name")); - gtk_label_set_xalign(GTK_LABEL(label), 0.0); - gtk_grid_attach(GTK_GRID(table), label, 0, 0, 1, 1); - - entry_name = gtk_combo_box_text_new_with_entry (); - gtk_grid_attach(GTK_GRID(table), entry_name, 1, 0, 1, 1); - gtk_widget_set_hexpand(entry_name, TRUE); - gtk_widget_set_halign(entry_name, GTK_ALIGN_FILL); - - /* Next row */ - label = gtk_label_new(_("Value")); - gtk_label_set_xalign(GTK_LABEL(label), 0.0); - gtk_grid_attach(GTK_GRID(table), label, 0, 1, 1, 1); - - entry_value = gtk_entry_new(); - gtk_grid_attach(GTK_GRID(table), entry_value, 1, 1, 1, 1); - gtk_widget_set_hexpand(entry_value, TRUE); - gtk_widget_set_halign(entry_value, GTK_ALIGN_FILL); - - gtk_combo_box_set_active(GTK_COMBO_BOX(entry_name), -1); - if (prefs_common.addressbook_custom_attributes) - combobox_set_popdown_strings(GTK_COMBO_BOX_TEXT(entry_name), - prefs_common.addressbook_custom_attributes); - /* Button box */ - vboxb = gtk_box_new(GTK_ORIENTATION_VERTICAL, 4 ); - gtk_box_pack_start(GTK_BOX(hbox), vboxb, FALSE, FALSE, 2); - - vbuttonbox = gtk_button_box_new(GTK_ORIENTATION_VERTICAL); - gtk_button_box_set_layout( GTK_BUTTON_BOX(vbuttonbox), GTK_BUTTONBOX_START ); - gtk_box_set_spacing( GTK_BOX(vbuttonbox), 8 ); - gtk_container_set_border_width( GTK_CONTAINER(vbuttonbox), 4 ); - gtk_container_add( GTK_CONTAINER(vboxb), vbuttonbox ); - - /* Buttons */ - buttonDel = gtkut_stock_button("edit-delete", _("D_elete")); - gtk_container_add( GTK_CONTAINER(vbuttonbox), buttonDel ); - - buttonMod = gtkut_stock_button("document-save", _("_Save")); - gtk_container_add( GTK_CONTAINER(vbuttonbox), buttonMod ); - - buttonAdd = gtkut_stock_button("list-add", _("_Add")); - gtk_container_add( GTK_CONTAINER(vbuttonbox), buttonAdd ); - - gtk_widget_set_sensitive(buttonDel,FALSE); - gtk_widget_set_sensitive(buttonMod,FALSE); - gtk_widget_set_sensitive(buttonAdd,FALSE); - - gtk_widget_show_all(vbox); - - /* Event handlers */ - g_signal_connect( G_OBJECT(view), "cursor-changed", - G_CALLBACK( edit_person_attrib_cursor_changed ), NULL ); - g_signal_connect( G_OBJECT(buttonDel), "clicked", - G_CALLBACK( edit_person_attrib_delete ), NULL ); - g_signal_connect( G_OBJECT(buttonMod), "clicked", - G_CALLBACK( edit_person_attrib_modify ), NULL ); - g_signal_connect( G_OBJECT(buttonAdd), "clicked", - G_CALLBACK( edit_person_attrib_add ), NULL ); - g_signal_connect(G_OBJECT(entry_name), "changed", - G_CALLBACK(edit_person_entry_att_changed), NULL); - g_signal_connect(G_OBJECT(entry_name), "key_press_event", - G_CALLBACK(edit_person_entry_att_pressed), NULL); - g_signal_connect(G_OBJECT(entry_value), "key_press_event", - G_CALLBACK(edit_person_entry_att_pressed), NULL); - - personeditdlg.view_attrib = view; - personeditdlg.entry_atname = entry_name; - personeditdlg.entry_atvalue = entry_value; - personeditdlg.attrib_add = buttonAdd; - personeditdlg.attrib_del = buttonDel; - personeditdlg.attrib_mod = buttonMod; -} - static void addressbook_edit_person_create( GtkWidget *parent, gboolean *cancelled ) { if (prefs_common.addressbook_use_editaddress_dialog) addressbook_edit_person_dialog_create( cancelled ); @@ -1555,7 +1144,6 @@ static void addressbook_edit_person_create( GtkWidget addressbook_edit_person_widgetset_create( parent, cancelled ); addressbook_edit_person_page_basic( PAGE_BASIC, _( "_User Data" ) ); addressbook_edit_person_page_email( PAGE_EMAIL, _( "_Email Addresses" ) ); - addressbook_edit_person_page_attrib( PAGE_ATTRIBUTES, _( "O_ther Attributes" ) ); gtk_widget_show_all( personeditdlg.container ); } @@ -1580,48 +1168,20 @@ static GList *edit_person_build_email_list() { return listEMail; } -/* -* Return list of attributes. -*/ -static GList *edit_person_build_attrib_list() { - GtkTreeModel *model = gtk_tree_view_get_model( - GTK_TREE_VIEW(personeditdlg.view_attrib)); - GtkTreeIter iter; - GList *listAttrib = NULL; - UserAttribute *attrib; - - /* Iterate through all the rows, selecting the one that - * matches. */ - if (!gtk_tree_model_get_iter_first(model, &iter)) - return FALSE; - - do { - gtk_tree_model_get(model, &iter, ATTRIB_COL_PTR, &attrib, -1); - listAttrib = g_list_append( listAttrib, attrib ); - } while (gtk_tree_model_iter_next(model, &iter)); - - return listAttrib; -} - static void update_sensitivity(void) { gtk_widget_set_sensitive(personeditdlg.entry_name, !personeditdlg.read_only); gtk_widget_set_sensitive(personeditdlg.entry_first, !personeditdlg.read_only); gtk_widget_set_sensitive(personeditdlg.entry_last, !personeditdlg.read_only); - gtk_widget_set_sensitive(personeditdlg.entry_nick, !personeditdlg.read_only && !personeditdlg.ldap); + gtk_widget_set_sensitive(personeditdlg.entry_nick, !personeditdlg.read_only); gtk_widget_set_sensitive(personeditdlg.entry_email, !personeditdlg.read_only); - gtk_widget_set_sensitive(personeditdlg.entry_alias, !personeditdlg.read_only && !personeditdlg.ldap); - gtk_widget_set_sensitive(personeditdlg.entry_remarks, !personeditdlg.read_only && !personeditdlg.ldap); + gtk_widget_set_sensitive(personeditdlg.entry_alias, !personeditdlg.read_only); + gtk_widget_set_sensitive(personeditdlg.entry_remarks, !personeditdlg.read_only); gtk_widget_set_sensitive(personeditdlg.email_up, !personeditdlg.read_only); gtk_widget_set_sensitive(personeditdlg.email_down, !personeditdlg.read_only); gtk_widget_set_sensitive(personeditdlg.email_del, !personeditdlg.read_only); gtk_widget_set_sensitive(personeditdlg.email_mod, !personeditdlg.read_only); gtk_widget_set_sensitive(personeditdlg.email_add, !personeditdlg.read_only); - gtk_widget_set_sensitive(personeditdlg.entry_atname, !personeditdlg.read_only); - gtk_widget_set_sensitive(personeditdlg.entry_atvalue, !personeditdlg.read_only); - gtk_widget_set_sensitive(personeditdlg.attrib_add, !personeditdlg.read_only); - gtk_widget_set_sensitive(personeditdlg.attrib_del, !personeditdlg.read_only); - gtk_widget_set_sensitive(personeditdlg.attrib_mod, !personeditdlg.read_only); } static void addressbook_edit_person_flush_transient( void ) @@ -1660,19 +1220,14 @@ void addressbook_edit_person_invalidate( AddressBookFi static gboolean addressbook_edit_person_close( gboolean cancelled ) { GList *listEMail = NULL; - GList *listAttrib = NULL; GError *error = NULL; GtkTreeModel *model; listEMail = edit_person_build_email_list(); - listAttrib = edit_person_build_attrib_list(); if( cancelled ) { model = gtk_tree_view_get_model(GTK_TREE_VIEW(personeditdlg.view_email)); gtk_list_store_clear(GTK_LIST_STORE(model)); - model = gtk_tree_view_get_model(GTK_TREE_VIEW(personeditdlg.view_attrib)); - gtk_list_store_clear(GTK_LIST_STORE(model)); addritem_free_list_email( listEMail ); - addritem_free_list_attribute( listAttrib ); if (!prefs_common.addressbook_use_editaddress_dialog) gtk_widget_hide( personeditdlg.container ); @@ -1688,19 +1243,14 @@ static gboolean addressbook_edit_person_close( gboolea } if( current_person && current_abf ) { - /* Update email/attribute list for existing current_person */ addrbook_update_address_list( current_abf, current_person, listEMail ); - addrbook_update_attrib_list( current_abf, current_person, listAttrib ); - } - else { - /* Create new current_person and email/attribute list */ + } else { + /* Create new current_person and email list */ if( ! cancelled && current_abf ) { current_person = addrbook_add_address_list( current_abf, current_parent_folder, listEMail ); - addrbook_add_attrib_list( current_abf, current_person, listAttrib ); } } listEMail = NULL; - listAttrib = NULL; if(!cancelled && current_person != NULL) { /* Set current_person stuff */ @@ -1755,8 +1305,6 @@ static gboolean addressbook_edit_person_close( gboolea model = gtk_tree_view_get_model(GTK_TREE_VIEW(personeditdlg.view_email)); gtk_list_store_clear(GTK_LIST_STORE(model)); - model = gtk_tree_view_get_model(GTK_TREE_VIEW(personeditdlg.view_attrib)); - gtk_list_store_clear(GTK_LIST_STORE(model)); if (!prefs_common.addressbook_use_editaddress_dialog) gtk_widget_hide( personeditdlg.container ); @@ -1790,7 +1338,6 @@ ItemPerson *addressbook_edit_person( AddressBookFile * current_person = person; current_parent_folder = parent_folder; edit_person_close_post_update_cb = post_update_cb; - personeditdlg.ldap = FALSE; if( personeditdlg.container ) { gtk_widget_destroy(personeditdlg.container); @@ -1819,8 +1366,6 @@ ItemPerson *addressbook_edit_person( AddressBookFile * model = gtk_tree_view_get_model(GTK_TREE_VIEW(personeditdlg.view_email)); gtk_list_store_clear(GTK_LIST_STORE(model)); - model = gtk_tree_view_get_model(GTK_TREE_VIEW(personeditdlg.view_attrib)); - gtk_list_store_clear(GTK_LIST_STORE(model)); gtk_entry_set_text(GTK_ENTRY(personeditdlg.entry_name), "" ); gtk_entry_set_text(GTK_ENTRY(personeditdlg.entry_first), "" ); @@ -1834,8 +1379,6 @@ ItemPerson *addressbook_edit_person( AddressBookFile * if( ADDRITEM_NAME(current_person) ) gtk_entry_set_text(GTK_ENTRY(personeditdlg.entry_name), ADDRITEM_NAME(person) ); - cm_menu_set_sensitive("EditAddressPopup/SetPicture", !personeditdlg.ldap); - cm_menu_set_sensitive("EditAddressPopup/UnsetPicture", !personeditdlg.ldap); if( current_person->picture ) { filename = g_strconcat( get_rc_dir(), G_DIR_SEPARATOR_S, ADDRBOOK_DIR, G_DIR_SEPARATOR_S, current_person->picture, ".png", NULL ); @@ -1848,7 +1391,7 @@ ItemPerson *addressbook_edit_person( AddressBookFile * goto no_img; } personeditdlg.picture_set = TRUE; - cm_menu_set_sensitive("EditAddressPopup/UnsetPicture", !personeditdlg.ldap && personeditdlg.picture_set); + cm_menu_set_sensitive("EditAddressPopup/UnsetPicture", personeditdlg.picture_set); } else { goto no_img; } @@ -1871,8 +1414,6 @@ no_img: if( current_person->nickName ) gtk_entry_set_text(GTK_ENTRY(personeditdlg.entry_nick), current_person->nickName ); edit_person_load_email( current_person ); - edit_person_load_attrib( current_person ); - gtk_entry_set_text(GTK_ENTRY(personeditdlg.entry_atvalue), ""); } else { personeditdlg.editNew = TRUE; @@ -1894,15 +1435,7 @@ no_img: GTK_TREE_VIEW(personeditdlg.view_email), NULL); } - sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(personeditdlg.view_attrib)); - 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_email_clear( NULL ); - edit_person_attrib_clear( NULL ); if (prefs_common.addressbook_use_editaddress_dialog) { gtk_main(); @@ -1915,13 +1448,3 @@ no_img: return person; } - -void addressbook_edit_reload_attr_list( void ) -{ - if (personeditdlg.entry_atname) { - combobox_unset_popdown_strings(GTK_COMBO_BOX_TEXT(personeditdlg.entry_atname)); - if (prefs_common.addressbook_custom_attributes) - combobox_set_popdown_strings(GTK_COMBO_BOX_TEXT(personeditdlg.entry_atname), - prefs_common.addressbook_custom_attributes); - } -} blob - f705ab5b41b1fcb2799a640d24f5ac566790d8f2 blob + 6410b8331179e2e44eadcd05dbd719b1ddd97449 --- src/news.c +++ src/news.c @@ -21,8 +21,6 @@ #include "claws-features.h" #endif -#ifdef HAVE_LIBETPAN - #include "defs.h" #include @@ -1425,84 +1423,3 @@ void nntp_disconnect_all(gboolean have_connectivity) nntp_main_set_timeout(prefs_common.io_timeout_secs); } -#else -#include -#include -#include -#include "folder.h" -#include "alertpanel.h" - -static FolderClass news_class; - -static void warn_etpan(void) -{ - static gboolean missing_news_warning = TRUE; - if (missing_news_warning) { - missing_news_warning = FALSE; - alertpanel_error( - _("You have one or more News accounts " - "defined. However this version of " - "Claws Mail has been built without " - "News support; your News accounts are " - "disabled.\n\n" - "You probably need to " - "install libetpan and recompile " - "Claws Mail.")); - } -} -static Folder *news_folder_new(const gchar *name, const gchar *path) -{ - warn_etpan(); - return NULL; -} -void news_group_list_free(GSList *group_list) -{ - warn_etpan(); -} -void news_remove_group_list_cache(Folder *folder) -{ - warn_etpan(); -} -int news_folder_locked(Folder *folder) -{ - warn_etpan(); - return 0; -} -gint news_post(Folder *folder, const gchar *file) -{ - warn_etpan(); - return -1; -} - -gint news_cancel_article(Folder * folder, MsgInfo * msginfo) -{ - warn_etpan(); - return -1; -} - -GSList *news_get_group_list(Folder *folder) -{ - warn_etpan(); - return NULL; -} - - -FolderClass *news_get_class(void) -{ - if (news_class.idstr == NULL) { - news_class.type = F_NEWS; - news_class.idstr = "news"; - news_class.uistr = "News"; - - /* Folder functions */ - news_class.new_folder = news_folder_new; - }; - - return &news_class; -} - -void nntp_disconnect_all(gboolean have_connectivity) -{ -} - -#endif blob - e7fb97d22643f94e65062ecd8e71b9efa5d54abd blob + 954f931754f687ff7e25ba1b705f09028d469e04 --- src/prefs_common.c +++ src/prefs_common.c @@ -61,8 +61,6 @@ #include "passwordstore.h" #include "file-utils.h" -#include "addrcustomattr.h" - enum { DATEFMT_FMT, DATEFMT_TXT, @@ -1150,7 +1148,6 @@ void prefs_common_read_config(void) prefs_common_read_history(MESSAGE_SEARCH_HISTORY); prefs_common.compose_save_to_history = prefs_common_read_history(COMPOSE_SAVE_TO_HISTORY); - prefs_common.addressbook_custom_attributes = addressbook_update_custom_attr_from_prefs(); } #define TRY(func) \