Commit Diff


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 <http://www.gnu.org/licenses/>.
- */
-
-#ifdef HAVE_CONFIG_H
-#  include "config.h"
-#include "claws-features.h"
-#endif
-
-#include "defs.h"
-
-#include <glib.h>
-#include <glib/gi18n.h>
-#include <gtk/gtk.h>
-#include <gdk/gdkkeysyms.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-#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 <http://www.gnu.org/licenses/>.
- * 
- */
-
-#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 <glib.h>
@@ -1425,84 +1423,3 @@ void nntp_disconnect_all(gboolean have_connectivity)
 	nntp_main_set_timeout(prefs_common.io_timeout_secs);
 }
 
-#else
-#include <glib.h>
-#include <glib/gi18n.h>
-#include <gtk/gtk.h>
-#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) \