commit - df64897d90df65aa6ae53d6c1a9442261e962c15
commit + bc5b1aef39ce116f29023e02532e1da23c4cac4b
blob - 680deef003a6b1fabf0f880f70678b24f5a33114
blob + 28986a35b65cafa84ec61319148cbff98d08c0a7
--- src/Makefile.am
+++ src/Makefile.am
abook_source = \
addrbook.c \
addrclip.c \
- addrcustomattr.c \
addressbook.c \
addressbook_foldersel.c \
addrindex.c \
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
-/*
- * 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
-/*
- * 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
#include "addrclip.h"
#include "addrgather.h"
#include "adbookbase.h"
-#include "addrcustomattr.h"
typedef enum
{
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 );
{"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[] =
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));
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 );
}
/**
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.
*
ItemFolder *folder;
gchar *name;
gint queryID;
- guint idleID;
/* Setup a query */
if( *searchTerm == '\0' || strlen( searchTerm ) < 1 ) return;
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 );
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
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 */
#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)
{
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"),
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)
{
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;
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
*/
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);
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 );
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 );
}
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 )
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 );
}
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 */
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 );
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);
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), "" );
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 );
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;
}
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;
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();
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
#include "claws-features.h"
#endif
-#ifdef HAVE_LIBETPAN
-
#include "defs.h"
#include <glib.h>
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
#include "passwordstore.h"
#include "file-utils.h"
-#include "addrcustomattr.h"
-
enum {
DATEFMT_FMT,
DATEFMT_TXT,
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) \