diff options
Diffstat (limited to 'addressbook/gui/component/select-names/e-select-names-manager.c')
-rw-r--r-- | addressbook/gui/component/select-names/e-select-names-manager.c | 49 |
1 files changed, 41 insertions, 8 deletions
diff --git a/addressbook/gui/component/select-names/e-select-names-manager.c b/addressbook/gui/component/select-names/e-select-names-manager.c index 54d7344ece..53978ac502 100644 --- a/addressbook/gui/component/select-names/e-select-names-manager.c +++ b/addressbook/gui/component/select-names/e-select-names-manager.c @@ -51,6 +51,7 @@ typedef struct { EEntry *entry; ESelectNamesManager *manager; ESelectNamesModel *model; + guint cleaning_tag; } ESelectNamesManagerEntry; static void e_select_names_manager_init (ESelectNamesManager *manager); @@ -136,9 +137,24 @@ get_entry_info (EEntry *entry) static void popup_cb (EEntry *eentry, GdkEventButton *ev, gint pos, gpointer user_data) { - ESelectNamesManagerEntry *entry = user_data; + ESelectNamesTextModel *text_model; + + gtk_object_get (GTK_OBJECT (eentry), + "model", &text_model, + NULL); + g_assert (E_IS_SELECT_NAMES_TEXT_MODEL (text_model)); + + e_select_names_popup (text_model, ev, pos); +} - e_select_names_popup (entry->model, ev, pos); +static gboolean +clean_cb (gpointer ptr) +{ + ESelectNamesManagerEntry *entry = ptr; + + e_select_names_model_clean (entry->model, TRUE); + entry->cleaning_tag = 0; + return FALSE; } static gint @@ -146,6 +162,11 @@ focus_in_cb (GtkWidget *w, GdkEventFocus *ev, gpointer user_data) { ESelectNamesManagerEntry *entry = user_data; + if (entry->cleaning_tag) { + gtk_timeout_remove (entry->cleaning_tag); + entry->cleaning_tag = 0; + } + e_select_names_model_cancel_cardify_all (entry->model); return FALSE; @@ -155,11 +176,13 @@ static gint focus_out_cb (GtkWidget *w, GdkEventFocus *ev, gpointer user_data) { ESelectNamesManagerEntry *entry = user_data; + gboolean visible = e_entry_completion_popup_is_visible (entry->entry); - e_select_names_model_clean (entry->model); - - if (!e_entry_completion_popup_is_visible (entry->entry)) + if (! visible) { e_select_names_model_cardify_all (entry->model, entry->manager->completion_book, 100); + if (entry->cleaning_tag == 0) + entry->cleaning_tag = gtk_timeout_add (100, clean_cb, entry); + } return FALSE; } @@ -177,6 +200,7 @@ static void completion_handler (EEntry *entry, ECompletionMatch *match) { ESelectNamesManagerEntry *mgr_entry; + ESelectNamesTextModel *text_model; EDestination *dest; gint i, pos, start_pos, len; @@ -191,10 +215,15 @@ completion_handler (EEntry *entry, ECompletionMatch *match) bitch. */ gtk_object_ref (GTK_OBJECT (dest)); + gtk_object_get (GTK_OBJECT (entry), + "model", &text_model, + NULL); + g_assert (E_IS_SELECT_NAMES_TEXT_MODEL (text_model)); + pos = e_entry_get_position (entry); - e_select_names_model_text_pos (mgr_entry->model, pos, &i, NULL, NULL); + e_select_names_model_text_pos (mgr_entry->model, text_model->seplen, pos, &i, NULL, NULL); e_select_names_model_replace (mgr_entry->model, i, dest); - e_select_names_model_name_pos (mgr_entry->model, i, &start_pos, &len); + e_select_names_model_name_pos (mgr_entry->model, text_model->seplen, i, &start_pos, &len); e_entry_set_position (entry, start_pos+len); } @@ -223,7 +252,7 @@ e_select_names_manager_entry_new (ESelectNamesManager *manager, ESelectNamesMode gtk_object_ref (GTK_OBJECT (entry->entry)); - comp = e_select_names_completion_new (NULL, model); + comp = e_select_names_completion_new (NULL, E_SELECT_NAMES_TEXT_MODEL (text_model)); if (manager->completion_book) e_select_names_completion_add_book (E_SELECT_NAMES_COMPLETION (comp), manager->completion_book); @@ -257,6 +286,7 @@ e_select_names_manager_entry_new (ESelectNamesManager *manager, ESelectNamesMode gtk_object_set_data (GTK_OBJECT (entry->entry), "entry_info", entry); gtk_object_set_data (GTK_OBJECT (entry->entry), "select_names_model", model); + gtk_object_set_data (GTK_OBJECT (entry->entry), "select_names_text_model", text_model); gtk_object_set_data (GTK_OBJECT (entry->entry), "completion_handler", comp); return entry; @@ -272,6 +302,9 @@ e_select_names_manager_entry_free (ESelectNamesManagerEntry *entry) gtk_object_unref (GTK_OBJECT (entry->model)); gtk_object_unref (GTK_OBJECT (entry->entry)); + if (entry->cleaning_tag) + gtk_timeout_remove (entry->cleaning_tag); + g_free (entry); } |