diff options
Diffstat (limited to 'addressbook/gui/component/select-names/e-select-names.c')
-rw-r--r-- | addressbook/gui/component/select-names/e-select-names.c | 475 |
1 files changed, 259 insertions, 216 deletions
diff --git a/addressbook/gui/component/select-names/e-select-names.c b/addressbook/gui/component/select-names/e-select-names.c index 51af18c78f..7ebd100d67 100644 --- a/addressbook/gui/component/select-names/e-select-names.c +++ b/addressbook/gui/component/select-names/e-select-names.c @@ -19,10 +19,12 @@ */ #include <config.h> -#include <string.h> #include <glib.h> -#include <gtk/gtk.h> +#include <libgnome/gnome-defs.h> #include <libgnome/gnome-i18n.h> +#include <libgnomeui/gnome-stock.h> +#include <libgnomeui/gnome-dialog.h> +#include <libgnomeui/gnome-dialog-util.h> #include <gal/e-table/e-table-simple.h> #include <gal/e-table/e-table-without.h> @@ -42,22 +44,23 @@ #include "e-select-names.h" #include <addressbook/backend/ebook/e-card-simple.h> -#include "e-select-names-table-model.h" +#include "e-select-names-text-model.h" #include <gal/widgets/e-categories-master-list-option-menu.h> +#include <gal/widgets/e-unicode.h> #include <gal/e-text/e-entry.h> #include <e-util/e-categories-master-list-wombat.h> static void e_select_names_init (ESelectNames *card); static void e_select_names_class_init (ESelectNamesClass *klass); -static void e_select_names_dispose (GObject *object); +static void e_select_names_set_arg (GtkObject *o, GtkArg *arg, guint arg_id); +static void e_select_names_get_arg (GtkObject *object, GtkArg *arg, guint arg_id); +static void e_select_names_destroy (GtkObject *object); static void update_query (GtkWidget *widget, ESelectNames *e_select_names); -static void sync_table_and_models (ESelectNamesModel *triggering_model, ESelectNames *esl); - extern EvolutionShellClient *global_shell_client; -static GtkDialogClass *parent_class = NULL; -#define PARENT_TYPE gtk_dialog_get_type() +static GnomeDialogClass *parent_class = NULL; +#define PARENT_TYPE gnome_dialog_get_type() /* The arguments we take */ enum { @@ -65,34 +68,33 @@ enum { }; typedef struct { - char *title; - ESelectNamesModel *source; - ESelectNamesTableModel *table_model; - ESelectNames *names; - GtkWidget *label; - GtkWidget *button; - GtkWidget *recipient_table; + char *title; + ESelectNamesModel *source; + ESelectNamesTextModel *text_model; + ESelectNames *names; + GtkWidget *label; + GtkWidget *button; } ESelectNamesChild; -GType +GtkType e_select_names_get_type (void) { - static GType type = 0; + static GtkType type = 0; if (!type) { - static const GTypeInfo info = { - sizeof (ESelectNamesClass), - NULL, /* base_init */ - NULL, /* base_finalize */ - (GClassInitFunc) e_select_names_class_init, - NULL, /* class_finalize */ - NULL, /* class_data */ + static const GtkTypeInfo info = + { + "ESelectNames", sizeof (ESelectNames), - 0, /* n_preallocs */ - (GInstanceInitFunc) e_select_names_init, + sizeof (ESelectNamesClass), + (GtkClassInitFunc) e_select_names_class_init, + (GtkObjectInitFunc) e_select_names_init, + /* reserved_1 */ NULL, + /* reserved_2 */ NULL, + (GtkClassInitFunc) NULL, }; - type = g_type_register_static (PARENT_TYPE, "ESelectNames", &info, 0); + type = gtk_type_unique (PARENT_TYPE, &info); } return type; @@ -101,34 +103,30 @@ e_select_names_get_type (void) static void e_select_names_class_init (ESelectNamesClass *klass) { - GObjectClass *object_class; + GtkObjectClass *object_class; - object_class = G_OBJECT_CLASS (klass); + object_class = (GtkObjectClass*) klass; - parent_class = g_type_class_peek_parent (klass); + parent_class = gtk_type_class (PARENT_TYPE); - object_class->dispose = e_select_names_dispose; + object_class->set_arg = e_select_names_set_arg; + object_class->get_arg = e_select_names_get_arg; + object_class->destroy = e_select_names_destroy; } GtkWidget *e_addressbook_create_ebook_table(char *name, char *string1, char *string2, int num1, int num2); GtkWidget *e_addressbook_create_folder_selector(char *name, char *string1, char *string2, int num1, int num2); static void -search_result (EAddressbookModel *model, EBookViewStatus status, ESelectNames *esn) -{ - sync_table_and_models (NULL, esn); -} - -static void set_book(EBook *book, EBookStatus status, ESelectNames *esn) { - g_object_set(esn->model, - "book", book, - NULL); + gtk_object_set(GTK_OBJECT(esn->model), + "book", book, + NULL); update_query (NULL, esn); - g_object_unref(book); - g_object_unref(esn->model); - g_object_unref(esn); + gtk_object_unref(GTK_OBJECT(book)); + gtk_object_unref(GTK_OBJECT(esn->model)); + gtk_object_unref(GTK_OBJECT(esn)); } static void @@ -151,12 +149,8 @@ addressbook_model_set_uri(ESelectNames *e_select_names, EAddressbookModel *model book = e_book_new(); - g_signal_connect (model, - "search_result", G_CALLBACK (search_result), - e_select_names); - - g_object_ref(e_select_names); - g_object_ref(model); + gtk_object_ref(GTK_OBJECT(e_select_names)); + gtk_object_ref(GTK_OBJECT(model)); addressbook_load_uri(book, book_uri, (EBookCallback) set_book, e_select_names); g_free (book_uri); @@ -225,7 +219,7 @@ real_add_address_cb (int model_row, gpointer closure) e_select_names_model_append (child->source, dest); e_select_names_model_clean (child->source, FALSE); - g_object_unref(card); + gtk_object_unref(GTK_OBJECT(card)); } } @@ -274,7 +268,7 @@ esn_get_key_fn (ETableModel *source, int row, void *closure) EAddressbookModel *model = E_ADDRESSBOOK_MODEL (closure); ECard *card = e_addressbook_model_get_card (model, row); void *key = card_key (card); - g_object_unref (card); + gtk_object_unref (GTK_OBJECT (card)); return key; } @@ -304,13 +298,14 @@ e_addressbook_create_ebook_table(char *name, char *string1, char *string2, int n ETableModel *without; EAddressbookModel *model; GtkWidget *table; + char *spec; model = e_addressbook_model_new (); adapter = E_TABLE_MODEL (e_addressbook_table_adapter_new (model)); - g_object_set(model, - "editable", FALSE, - NULL); + gtk_object_set(GTK_OBJECT(model), + "editable", FALSE, + NULL); without = e_table_without_new (adapter, g_str_hash, @@ -326,9 +321,9 @@ e_addressbook_create_ebook_table(char *name, char *string1, char *string2, int n EVOLUTION_ETSPECDIR "/e-select-names.etspec", NULL); - g_object_set_data(G_OBJECT(table), "adapter", adapter); - g_object_set_data(G_OBJECT(table), "without", without); - g_object_set_data(G_OBJECT(table), "model", model); + gtk_object_set_data(GTK_OBJECT(table), "adapter", adapter); + gtk_object_set_data(GTK_OBJECT(table), "without", without); + gtk_object_set_data(GTK_OBJECT(table), "model", model); return table; } @@ -336,24 +331,26 @@ e_addressbook_create_ebook_table(char *name, char *string1, char *string2, int n GtkWidget * e_addressbook_create_folder_selector(char *name, char *string1, char *string2, int num1, int num2) { - return g_object_new (EVOLUTION_TYPE_FOLDER_SELECTOR_BUTTON, NULL); + return (GtkWidget *)gtk_type_new (EVOLUTION_TYPE_FOLDER_SELECTOR_BUTTON); } static void folder_selected (EvolutionFolderSelectorButton *button, GNOME_Evolution_Folder *folder, ESelectNames *e_select_names) { + Bonobo_ConfigDatabase db; + addressbook_model_set_uri(e_select_names, e_select_names->model, folder->physicalUri); - e_config_listener_set_string (e_book_get_config_database(), - "/apps/evolution/addressbook/select_names/last_used_uri", folder->physicalUri); + db = addressbook_config_database (NULL); + bonobo_config_set_string (db, "/Addressbook/select_names_uri", folder->physicalUri, NULL); } static void update_query (GtkWidget *widget, ESelectNames *e_select_names) { char *category = ""; - const char *search = ""; + char *search = ""; char *query; char *q_array[4]; int i; @@ -381,9 +378,9 @@ update_query (GtkWidget *widget, ESelectNames *e_select_names) } else { query = g_strdup (q_array[0]); } - g_object_set (e_select_names->model, - "query", query, - NULL); + gtk_object_set (GTK_OBJECT (e_select_names->model), + "query", query, + NULL); for (i = 1; q_array[i]; i++) { g_free (q_array[i]); } @@ -393,14 +390,20 @@ update_query (GtkWidget *widget, ESelectNames *e_select_names) static void status_message (EAddressbookModel *model, const gchar *message, ESelectNames *e_select_names) { - if (message == NULL) + if (message == NULL) { + if (e_select_names->status_image) + gtk_widget_hide (e_select_names->status_image); gtk_label_set_text (GTK_LABEL (e_select_names->status_message), ""); - else + } + else { + if (e_select_names->status_image) + gtk_widget_show (e_select_names->status_image); gtk_label_set_text (GTK_LABEL (e_select_names->status_message), message); + } } static void -categories_changed (GtkWidget *widget, ESelectNames *e_select_names) +categories_changed (GtkWidget *widget, gint value, ESelectNames *e_select_names) { update_query (widget, e_select_names); } @@ -409,7 +412,7 @@ static void select_entry_changed (GtkWidget *widget, ESelectNames *e_select_names) { if (e_select_names->select_entry) { - const char *select_string = gtk_entry_get_text (GTK_ENTRY (e_select_names->select_entry)); + char *select_string = gtk_entry_get_text (GTK_ENTRY (e_select_names->select_entry)); char *select_strcoll_string = g_utf8_collate_key (select_string, -1); int count; ETable *table; @@ -457,15 +460,15 @@ e_select_names_create_categories (gchar *name, ecml = e_categories_master_list_wombat_new (); option_menu = e_categories_master_list_option_menu_new (ecml); - g_object_unref (ecml); + gtk_object_unref (GTK_OBJECT (ecml)); return option_menu; } static void -clear_widget (gpointer data, GObject *where_object_was) +clear_widget (GtkWidget *w, gpointer user_data) { - GtkWidget **widget_ref = data; + GtkWidget **widget_ref = user_data; *widget_ref = NULL; } @@ -477,11 +480,11 @@ e_select_names_init (ESelectNames *e_select_names) const char *selector_types[] = { "contacts/*", NULL }; char *filename; char *contacts_uri; - EConfigListener *db; + Bonobo_ConfigDatabase db; - db = e_book_get_config_database(); + db = addressbook_config_database (NULL); - gui = glade_xml_new (EVOLUTION_GLADEDIR "/select-names.glade", NULL, NULL); + gui = glade_xml_new (EVOLUTION_GLADEDIR "/select-names.glade", NULL); e_select_names->gui = gui; e_select_names->children = g_hash_table_new(g_str_hash, g_str_equal); @@ -493,73 +496,72 @@ e_select_names_init (ESelectNames *e_select_names) return; } gtk_widget_ref(widget); - gtk_container_remove(GTK_CONTAINER(widget->parent), widget); - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(e_select_names)->vbox), widget, TRUE, TRUE, 0); + gtk_widget_unparent(widget); + gtk_box_pack_start(GTK_BOX(GNOME_DIALOG(e_select_names)->vbox), widget, TRUE, TRUE, 0); gtk_widget_unref(widget); - gtk_dialog_add_buttons (GTK_DIALOG (e_select_names), - GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, - GTK_STOCK_OK, GTK_RESPONSE_OK, - NULL); - - gtk_dialog_set_default_response (GTK_DIALOG (e_select_names), - GTK_RESPONSE_OK); - - gtk_window_set_modal (GTK_WINDOW (e_select_names), TRUE); + gnome_dialog_append_buttons(GNOME_DIALOG(e_select_names), + GNOME_STOCK_BUTTON_OK, + GNOME_STOCK_BUTTON_CANCEL, + NULL); + gnome_dialog_set_default(GNOME_DIALOG(e_select_names), 0); gtk_window_set_title(GTK_WINDOW(e_select_names), _("Select Contacts from Addressbook")); - gtk_window_set_resizable(GTK_WINDOW(e_select_names), TRUE); + gtk_window_set_policy(GTK_WINDOW(e_select_names), FALSE, TRUE, FALSE); e_select_names->table = E_TABLE_SCROLLED(glade_xml_get_widget(gui, "table-source")); - e_select_names->model = g_object_get_data(G_OBJECT(e_select_names->table), "model"); - e_select_names->adapter = g_object_get_data(G_OBJECT(e_select_names->table), "adapter"); - e_select_names->without = g_object_get_data(G_OBJECT(e_select_names->table), "without"); - gtk_widget_show (GTK_WIDGET (e_select_names->table)); + e_select_names->model = gtk_object_get_data(GTK_OBJECT(e_select_names->table), "model"); + e_select_names->adapter = gtk_object_get_data(GTK_OBJECT(e_select_names->table), "adapter"); + e_select_names->without = gtk_object_get_data(GTK_OBJECT(e_select_names->table), "without"); e_select_names->status_message = glade_xml_get_widget (gui, "status-message"); if (e_select_names->status_message && !GTK_IS_LABEL (e_select_names->status_message)) e_select_names->status_message = NULL; if (e_select_names->status_message) { - g_signal_connect (e_select_names->model, "status_message", - G_CALLBACK (status_message), e_select_names); - g_object_weak_ref (G_OBJECT (e_select_names->status_message), clear_widget, &e_select_names->status_message); + gtk_signal_connect (GTK_OBJECT (e_select_names->model), "status_message", + GTK_SIGNAL_FUNC (status_message), e_select_names); + gtk_signal_connect(GTK_OBJECT(e_select_names->status_message), "destroy", + GTK_SIGNAL_FUNC(clear_widget), &e_select_names->status_message); } + e_select_names->status_image = glade_xml_get_widget (gui, "status-image"); + gtk_widget_hide (e_select_names->status_image); e_select_names->categories = glade_xml_get_widget (gui, "custom-categories"); if (e_select_names->categories && !E_IS_CATEGORIES_MASTER_LIST_OPTION_MENU (e_select_names->categories)) e_select_names->categories = NULL; if (e_select_names->categories) { - g_signal_connect(e_select_names->categories, "changed", - G_CALLBACK(categories_changed), e_select_names); - g_object_weak_ref (G_OBJECT (e_select_names->categories), clear_widget, &e_select_names->categories); + gtk_signal_connect(GTK_OBJECT(e_select_names->categories), "changed", + GTK_SIGNAL_FUNC(categories_changed), e_select_names); + gtk_signal_connect(GTK_OBJECT(e_select_names->categories), "destroy", + GTK_SIGNAL_FUNC(clear_widget), &e_select_names->categories); } - gtk_widget_show (e_select_names->categories); e_select_names->select_entry = glade_xml_get_widget (gui, "entry-select"); if (e_select_names->select_entry && !GTK_IS_ENTRY (e_select_names->select_entry)) e_select_names->select_entry = NULL; if (e_select_names->select_entry) { - g_signal_connect(e_select_names->select_entry, "changed", - G_CALLBACK(select_entry_changed), e_select_names); - g_signal_connect(e_select_names->select_entry, "activate", - G_CALLBACK(update_query), e_select_names); - g_object_weak_ref (G_OBJECT (e_select_names->select_entry), clear_widget, &e_select_names->select_entry); + gtk_signal_connect(GTK_OBJECT(e_select_names->select_entry), "changed", + GTK_SIGNAL_FUNC(select_entry_changed), e_select_names); + gtk_signal_connect(GTK_OBJECT(e_select_names->select_entry), "activate", + GTK_SIGNAL_FUNC(update_query), e_select_names); + gtk_signal_connect(GTK_OBJECT(e_select_names->select_entry), "destroy", + GTK_SIGNAL_FUNC(clear_widget), &e_select_names->select_entry); } button = glade_xml_get_widget (gui, "button-find"); if (button && GTK_IS_BUTTON (button)) - g_signal_connect(button, "clicked", - G_CALLBACK(update_query), e_select_names); + gtk_signal_connect(GTK_OBJECT(button), "clicked", + GTK_SIGNAL_FUNC(update_query), e_select_names); - contacts_uri = e_config_listener_get_string_with_default (db, "/apps/evolution/addressbook/select_names/last_used_uri", NULL, NULL); + contacts_uri = bonobo_config_get_string_with_default (db, "/Addressbook/select_names_uri", + NULL, NULL); if (!contacts_uri) { - contacts_uri = e_config_listener_get_string_with_default (db, "/apps/evolution/shell/default_folders/contacts_uri", - NULL, NULL); + contacts_uri = bonobo_config_get_string_with_default (db, "/DefaultFolders/contacts_uri", + NULL, + NULL); } - if (!contacts_uri || !contacts_uri[0]) { - if (contacts_uri) - g_free (contacts_uri); - filename = g_build_filename (g_get_home_dir(), "evolution/local/Contacts", NULL); + if (!contacts_uri) { + filename = gnome_util_prepend_user_home("evolution/local/Contacts"); contacts_uri = g_strdup_printf("file://%s", filename); g_free (filename); } @@ -571,14 +573,13 @@ e_select_names_init (ESelectNames *e_select_names) contacts_uri, selector_types); if (button && EVOLUTION_IS_FOLDER_SELECTOR_BUTTON (button)) - g_signal_connect(button, "selected", - G_CALLBACK(folder_selected), e_select_names); - gtk_widget_show (button); - - g_signal_connect (e_table_scrolled_get_table (e_select_names->table), "double_click", - G_CALLBACK (add_address), e_select_names); - g_signal_connect (e_table_scrolled_get_table (e_select_names->table), "selection_change", - G_CALLBACK (selection_change), e_select_names); + gtk_signal_connect(GTK_OBJECT(button), "selected", + GTK_SIGNAL_FUNC(folder_selected), e_select_names); + + gtk_signal_connect (GTK_OBJECT (e_table_scrolled_get_table (e_select_names->table)), "double_click", + GTK_SIGNAL_FUNC (add_address), e_select_names); + gtk_signal_connect (GTK_OBJECT (e_table_scrolled_get_table (e_select_names->table)), "selection_change", + GTK_SIGNAL_FUNC (selection_change), e_select_names); selection_change (e_table_scrolled_get_table (e_select_names->table), e_select_names); addressbook_model_set_uri(e_select_names, e_select_names->model, contacts_uri); @@ -588,104 +589,135 @@ e_select_names_init (ESelectNames *e_select_names) static void e_select_names_child_free(char *key, ESelectNamesChild *child, ESelectNames *e_select_names) { - g_signal_handlers_disconnect_matched (child->source, - (GSignalMatchType) (G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA), - 0, 0, NULL, - G_CALLBACK (sync_table_and_models), e_select_names); + gtk_signal_disconnect_by_func (GTK_OBJECT (child->source), GTK_SIGNAL_FUNC (sync_table_and_models), e_select_names); g_free(child->title); - g_object_unref(child->table_model); - g_object_unref(child->source); + gtk_object_unref(GTK_OBJECT(child->text_model)); + gtk_object_unref(GTK_OBJECT(child->source)); g_free(key); g_free(child); } static void -e_select_names_dispose (GObject *object) +e_select_names_destroy (GtkObject *object) { ESelectNames *e_select_names = E_SELECT_NAMES(object); - if (e_select_names->gui) { - g_object_unref(e_select_names->gui); - e_select_names->gui = NULL; - } - - if (e_select_names->children) { - g_hash_table_foreach(e_select_names->children, (GHFunc) e_select_names_child_free, e_select_names); - g_hash_table_destroy(e_select_names->children); - e_select_names->children = NULL; - } + gtk_object_unref(GTK_OBJECT(e_select_names->gui)); + g_hash_table_foreach(e_select_names->children, (GHFunc) e_select_names_child_free, e_select_names); + g_hash_table_destroy(e_select_names->children); + gtk_object_unref(GTK_OBJECT(e_select_names->without)); + gtk_object_unref(GTK_OBJECT(e_select_names->adapter)); + gtk_object_unref(GTK_OBJECT(e_select_names->model)); - if (e_select_names->without) { - g_object_unref(e_select_names->without); - e_select_names->without = NULL; - } - if (e_select_names->adapter) { - g_object_unref(e_select_names->adapter); - e_select_names->adapter = NULL; - } - if (e_select_names->model) { - g_object_unref(e_select_names->model); - e_select_names->model = NULL; - } - - if (e_select_names->def) { - g_free(e_select_names->def); - e_select_names->def = NULL; - } + g_free(e_select_names->def); - if (G_OBJECT_CLASS(parent_class)->dispose) - G_OBJECT_CLASS(parent_class)->dispose(object); + (*(GTK_OBJECT_CLASS(parent_class))->destroy)(object); } GtkWidget* e_select_names_new (void) { - GtkWidget *widget = g_object_new (E_TYPE_SELECT_NAMES, NULL); + GtkWidget *widget = GTK_WIDGET (gtk_type_new (e_select_names_get_type ())); return widget; } static void +e_select_names_set_arg (GtkObject *o, GtkArg *arg, guint arg_id) +{ + ESelectNames *editor; + + editor = E_SELECT_NAMES (o); + + switch (arg_id){ + default: + return; + } +} + +static void +e_select_names_get_arg (GtkObject *object, GtkArg *arg, guint arg_id) +{ + ESelectNames *e_select_names; + + e_select_names = E_SELECT_NAMES (object); + + switch (arg_id) { + default: + arg->type = GTK_TYPE_INVALID; + break; + } +} + +static void button_clicked(GtkWidget *button, ESelectNamesChild *child) { real_add_address(child->names, child); } +#if 0 static void remove_address(ETable *table, int row, int col, GdkEvent *event, ESelectNamesChild *child) { e_select_names_model_delete (child->source, row); } +#endif struct _RightClickData { ESelectNamesChild *child; - int row; + int index; }; typedef struct _RightClickData RightClickData; +#if 0 +static GSList *selected_rows = NULL; + +static void +etable_selection_foreach_cb (int row, void *data) +{ + /* Build a list of rows in reverse order, then remove them, + necessary because otherwise it'll start trying to delete + rows out of index in ETableModel */ + selected_rows = g_slist_prepend (selected_rows, GINT_TO_POINTER (row)); +} + +static void +selected_rows_foreach_cb (void *row, void *data) +{ + ESelectNamesChild *child = data; + + remove_address (NULL, GPOINTER_TO_INT (row), 0, NULL, child); +} +#endif + static void remove_cb (GtkWidget *widget, void *data) { RightClickData *rcdata = (RightClickData *)data; - e_select_names_model_delete (rcdata->child->source, rcdata->row); + e_select_names_model_delete (rcdata->child->source, rcdata->index); /* Free everything we've created */ g_free (rcdata); } static void -section_right_click_cb (ETable *et, int row, int col, GdkEvent *ev, ESelectNamesChild *child) +section_right_click_cb (EText *text, GdkEventButton *ev, gint pos, ESelectNamesChild *child) { - static EPopupMenu right_click_menu[] = { - E_POPUP_ITEM (N_("Remove"), G_CALLBACK (remove_cb), 0), + EPopupMenu right_click_menu[] = { + E_POPUP_ITEM (N_("Remove"), GTK_SIGNAL_FUNC (remove_cb), 0), E_POPUP_TERMINATOR }; - RightClickData *rcdata = g_new0 (RightClickData, 1); + gint index; + + e_select_names_model_text_pos (child->source, child->text_model->seplen, pos, &index, NULL, NULL); - rcdata->row = row; - rcdata->child = child; + if (index != -1) { + RightClickData *rcdata = g_new0 (RightClickData, 1); + rcdata->index = index; + rcdata->child = child; - e_popup_menu_run (right_click_menu, (GdkEvent *)ev, 0, 0, rcdata); + e_popup_menu_run (right_click_menu, (GdkEvent *)ev, 0, 0, rcdata); + } } void @@ -693,13 +725,14 @@ e_select_names_add_section(ESelectNames *e_select_names, char *name, char *id, E { ESelectNamesChild *child; GtkWidget *button; - GtkWidget *label; GtkWidget *alignment; + GtkWidget *label; GtkTable *table; char *label_text; ETable *etable; GtkWidget *sw; + GtkWidget *recipient_table; if (g_hash_table_lookup(e_select_names->children, id)) { return; @@ -710,34 +743,45 @@ e_select_names_add_section(ESelectNames *e_select_names, char *name, char *id, E child = g_new(ESelectNamesChild, 1); child->names = e_select_names; - child->title = g_strdup (_(name)); + child->title = e_utf8_from_locale_string(_(name)); - child->table_model = (ESelectNamesTableModel*)e_select_names_table_model_new (source); + child->text_model = (ESelectNamesTextModel *) e_select_names_text_model_new (source); + e_select_names_text_model_set_separator (child->text_model, "\n"); child->source = source; - g_object_ref(child->source); + gtk_object_ref(GTK_OBJECT(child->source)); e_select_names->child_count++; alignment = gtk_alignment_new(0, 0, 1, 0); - label_text = g_strconcat (child->title, " ->", NULL); - - label = gtk_label_new (""); + button = gtk_button_new (); - gtk_label_set_markup (GTK_LABEL(label), label_text); + label = e_entry_new (); + gtk_object_set(GTK_OBJECT(label), + "draw_background", FALSE, + "draw_borders", FALSE, + "draw_button", TRUE, + "editable", FALSE, + "text", "", + "use_ellipsis", FALSE, + "justification", GTK_JUSTIFY_CENTER, + NULL); + label_text = g_strconcat (child->title, " ->", NULL); + gtk_object_set (GTK_OBJECT (label), + "text", label_text, + "emulate_label_resize", TRUE, + NULL); g_free (label_text); - - button = gtk_button_new (); gtk_container_add (GTK_CONTAINER (button), label); child->label = label; child->button = button; gtk_container_add(GTK_CONTAINER(alignment), button); gtk_widget_show_all(alignment); - g_signal_connect(button, "clicked", - G_CALLBACK(button_clicked), child); + gtk_signal_connect(GTK_OBJECT(button), "clicked", + GTK_SIGNAL_FUNC(button_clicked), child); gtk_table_attach(table, alignment, 0, 1, e_select_names->child_count, @@ -748,28 +792,33 @@ e_select_names_add_section(ESelectNames *e_select_names, char *name, char *id, E etable = e_table_scrolled_get_table (e_select_names->table); gtk_widget_set_sensitive (button, e_table_selected_count (etable) > 0); - sw = e_table_scrolled_new_from_spec_file (E_TABLE_MODEL (child->table_model), - NULL, - EVOLUTION_ETSPECDIR "/e-select-names-section.etspec", - NULL); - child->recipient_table = GTK_WIDGET (e_table_scrolled_get_table (E_TABLE_SCROLLED (sw))); - - g_signal_connect (child->recipient_table, - "right_click", - G_CALLBACK (section_right_click_cb), - child); - - gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw), - GTK_POLICY_AUTOMATIC, - GTK_POLICY_AUTOMATIC); - g_signal_connect(child->recipient_table, "double_click", - G_CALLBACK(remove_address), child); - - g_signal_connect (child->source, - "changed", - G_CALLBACK (sync_table_and_models), - e_select_names); + sw = gtk_scrolled_window_new (NULL, NULL); + recipient_table = e_entry_new (); + gtk_object_set (GTK_OBJECT (recipient_table), + "model", child->text_model, + "allow_newlines", TRUE, + NULL); + + gtk_signal_connect (GTK_OBJECT (recipient_table), + "popup", + GTK_SIGNAL_FUNC (section_right_click_cb), + child); + + gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (sw), recipient_table); + +#if 0 + gtk_signal_connect(GTK_OBJECT(e_table_scrolled_get_table(E_TABLE_SCROLLED(etable))), "right_click", + GTK_SIGNAL_FUNC(section_right_click_cb), child); + gtk_signal_connect(GTK_OBJECT(e_table_scrolled_get_table(E_TABLE_SCROLLED(etable))), "double_click", + GTK_SIGNAL_FUNC(remove_address), child); +#endif + + + gtk_signal_connect (GTK_OBJECT (child->source), + "changed", + GTK_SIGNAL_FUNC (sync_table_and_models), + e_select_names); gtk_widget_show_all (sw); @@ -788,14 +837,14 @@ e_select_names_add_section(ESelectNames *e_select_names, char *name, char *id, E static void * card_copy(const void *value, void *closure) { - g_object_ref((gpointer)value); + gtk_object_ref(GTK_OBJECT(value)); return (void *)value; } static void card_free(void *value, void *closure) { - g_object_unref((gpointer)value); + gtk_object_unref(GTK_OBJECT(value)); } EList * @@ -815,7 +864,7 @@ e_select_names_get_section(ESelectNames *e_select_names, char *id) for (i = 0; i < rows; i++) { ECard *card = e_select_names_model_get_card (child->source, i); e_list_append(list, card); - g_object_unref(card); + gtk_object_unref(GTK_OBJECT(card)); } return list; } @@ -827,7 +876,7 @@ e_select_names_get_source(ESelectNames *e_select_names, ESelectNamesChild *child = g_hash_table_lookup(e_select_names->children, id); if (child) { if (child->source) - g_object_ref(child->source); + gtk_object_ref(GTK_OBJECT(child->source)); return child->source; } else return NULL; @@ -841,12 +890,10 @@ e_select_names_set_default (ESelectNames *e_select_names, if (e_select_names->def) { child = g_hash_table_lookup(e_select_names->children, e_select_names->def); - if (child) { - GtkWidget *label = child->label; - - /* set the previous default to non-bold */ - gtk_label_set_markup (GTK_LABEL (label), child->title); - } + if (child) + gtk_object_set (GTK_OBJECT (E_ENTRY (child->label)->item), + "bold", FALSE, + NULL); } g_free(e_select_names->def); @@ -854,13 +901,9 @@ e_select_names_set_default (ESelectNames *e_select_names, if (e_select_names->def) { child = g_hash_table_lookup(e_select_names->children, e_select_names->def); - if (child) { - GtkWidget *label = child->label; - char *markup = g_strconcat ("<b>", child->title, "</b>", NULL); - - /* set the new default to bold */ - gtk_label_set_markup (GTK_LABEL (label), markup); - g_free (markup); - } + if (child) + gtk_object_set (GTK_OBJECT (E_ENTRY (child->label)->item), + "bold", TRUE, + NULL); } } |