303
303
if (n_addresses <= 0)
304
304
/* Chain up to parent's drag_data_received() method. */
305
305
GTK_WIDGET_CLASS (e_name_selector_entry_parent_class)->
306
drag_data_received (widget, context, x, y,
307
selection_data, info, time);
307
widget, context, x, y,
308
selection_data, info, time);
767
768
file_as_query_str = name_style_query ("file_as", cue_str);
768
769
user_fields_str = ens_util_populate_user_query_fields (priv->user_query_fields, cue_str, encoded_cue_str);
770
query_str = g_strdup_printf ("(or "
771
" (beginswith \"nickname\" %s) "
772
" (beginswith \"email\" %s) "
777
encoded_cue_str, encoded_cue_str,
778
full_name_query_str, file_as_query_str,
779
user_fields_str ? user_fields_str : "");
771
query_str = g_strdup_printf (
773
" (beginswith \"nickname\" %s) "
774
" (beginswith \"email\" %s) "
779
encoded_cue_str, encoded_cue_str,
780
full_name_query_str, file_as_query_str,
781
user_fields_str ? user_fields_str : "");
781
783
g_free (user_fields_str);
782
784
g_free (file_as_query_str);
1095
1097
textrep_len = g_utf8_strlen (textrep, -1);
1096
1098
pos = range_start;
1098
g_signal_handlers_block_by_func (name_selector_entry, user_insert_text, name_selector_entry);
1099
g_signal_handlers_block_by_func (name_selector_entry, user_delete_text, name_selector_entry);
1100
g_signal_handlers_block_by_func (name_selector_entry->priv->destination_store,
1101
destination_row_changed, name_selector_entry);
1100
g_signal_handlers_block_by_func (
1101
name_selector_entry,
1102
user_insert_text, name_selector_entry);
1103
g_signal_handlers_block_by_func (
1104
name_selector_entry,
1105
user_delete_text, name_selector_entry);
1106
g_signal_handlers_block_by_func (
1107
name_selector_entry->priv->destination_store,
1108
destination_row_changed, name_selector_entry);
1103
1110
if (textrep_len > range_len) {
1107
1114
for (i = 0; textrep[i] && cue_str[i]; i++)
1108
1115
textrep[i] = cue_str[i];
1110
gtk_editable_delete_text (GTK_EDITABLE (name_selector_entry), range_start, range_end);
1111
gtk_editable_insert_text (GTK_EDITABLE (name_selector_entry), textrep, -1, &pos);
1112
gtk_editable_select_region (GTK_EDITABLE (name_selector_entry), range_end,
1113
range_start + textrep_len);
1117
gtk_editable_delete_text (
1118
GTK_EDITABLE (name_selector_entry),
1119
range_start, range_end);
1120
gtk_editable_insert_text (
1121
GTK_EDITABLE (name_selector_entry),
1123
gtk_editable_select_region (
1124
GTK_EDITABLE (name_selector_entry),
1125
range_end, range_start + textrep_len);
1114
1126
priv->is_completing = TRUE;
1116
1128
g_free (cue_str);
1127
1139
generate_attribute_list (name_selector_entry);
1130
g_signal_handlers_unblock_by_func (name_selector_entry->priv->destination_store,
1131
destination_row_changed, name_selector_entry);
1142
g_signal_handlers_unblock_by_func (
1143
name_selector_entry->priv->destination_store,
1144
destination_row_changed, name_selector_entry);
1132
1145
g_signal_handlers_unblock_by_func (name_selector_entry, user_delete_text, name_selector_entry);
1133
1146
g_signal_handlers_unblock_by_func (name_selector_entry, user_insert_text, name_selector_entry);
1205
1218
destination = build_destination_at_position (text, pos);
1206
1219
g_assert (destination);
1208
g_signal_handlers_block_by_func (name_selector_entry->priv->destination_store,
1209
destination_row_inserted, name_selector_entry);
1210
e_destination_store_insert_destination (name_selector_entry->priv->destination_store,
1221
g_signal_handlers_block_by_func (
1222
name_selector_entry->priv->destination_store,
1223
destination_row_inserted, name_selector_entry);
1224
e_destination_store_insert_destination (
1225
name_selector_entry->priv->destination_store,
1211
1226
index, destination);
1212
g_signal_handlers_unblock_by_func (name_selector_entry->priv->destination_store,
1213
destination_row_inserted, name_selector_entry);
1227
g_signal_handlers_unblock_by_func (
1228
name_selector_entry->priv->destination_store,
1229
destination_row_inserted, name_selector_entry);
1214
1230
g_object_unref (destination);
1234
1250
if (e_destination_get_contact (destination))
1235
1251
rebuild_attributes = TRUE;
1237
g_signal_handlers_block_by_func (name_selector_entry->priv->destination_store,
1238
destination_row_changed, name_selector_entry);
1253
g_signal_handlers_block_by_func (
1254
name_selector_entry->priv->destination_store,
1255
destination_row_changed, name_selector_entry);
1239
1256
e_destination_set_raw (destination, raw_address);
1240
g_signal_handlers_unblock_by_func (name_selector_entry->priv->destination_store,
1241
destination_row_changed, name_selector_entry);
1257
g_signal_handlers_unblock_by_func (
1258
name_selector_entry->priv->destination_store,
1259
destination_row_changed, name_selector_entry);
1243
1261
g_free (raw_address);
1330
1348
destination = find_destination_by_index (name_selector_entry, index);
1331
1349
if (destination) {
1332
g_signal_handlers_block_by_func (name_selector_entry->priv->destination_store,
1333
destination_row_deleted, name_selector_entry);
1334
e_destination_store_remove_destination (name_selector_entry->priv->destination_store,
1350
g_signal_handlers_block_by_func (
1351
name_selector_entry->priv->destination_store,
1352
destination_row_deleted, name_selector_entry);
1353
e_destination_store_remove_destination (
1354
name_selector_entry->priv->destination_store,
1336
g_signal_handlers_unblock_by_func (name_selector_entry->priv->destination_store,
1337
destination_row_deleted, name_selector_entry);
1356
g_signal_handlers_unblock_by_func (
1357
name_selector_entry->priv->destination_store,
1358
destination_row_deleted, name_selector_entry);
1661
gtk_editable_delete_text (GTK_EDITABLE (name_selector_entry),
1662
start_pos, end_pos);
1682
gtk_editable_delete_text (
1683
GTK_EDITABLE (name_selector_entry),
1684
start_pos, end_pos);
1664
1686
/*If the user is deleting a '"' new destinations have to be created for ',' between the quoted text
1665
1687
Like "fd,ty,uy" is a one entity, but if you remove the quotes it has to be broken doan into 3 seperate
1720
1742
g_return_val_if_fail (name_selector_entry->priv->email_generator == email_generator_model, FALSE);
1722
e_tree_model_generator_convert_iter_to_child_iter (email_generator_model,
1723
&contact_iter, &email_n,
1744
e_tree_model_generator_convert_iter_to_child_iter (
1745
email_generator_model,
1746
&contact_iter, &email_n,
1726
1749
contact = e_contact_store_get_contact (name_selector_entry->priv->contact_store, &contact_iter);
1727
1750
book_client = e_contact_store_get_client (name_selector_entry->priv->contact_store, &contact_iter);
2004
2027
if (!name_selector_entry->priv->contact_store)
2007
gtk_tree_model_filter_convert_iter_to_child_iter (GTK_TREE_MODEL_FILTER (model),
2008
&generator_iter, iter);
2009
e_tree_model_generator_convert_iter_to_child_iter (name_selector_entry->priv->email_generator,
2010
&contact_store_iter, &email_n,
2030
gtk_tree_model_filter_convert_iter_to_child_iter (
2031
GTK_TREE_MODEL_FILTER (model),
2032
&generator_iter, iter);
2033
e_tree_model_generator_convert_iter_to_child_iter (
2034
name_selector_entry->priv->email_generator,
2035
&contact_store_iter, &email_n,
2013
2038
contact = e_contact_store_get_contact (name_selector_entry->priv->contact_store, &contact_store_iter);
2014
2039
if (!contact) {
2080
2105
if (!name_selector_entry->priv->contact_store)
2083
gtk_tree_model_filter_convert_iter_to_child_iter (GTK_TREE_MODEL_FILTER (model),
2084
&generator_iter, iter);
2085
e_tree_model_generator_convert_iter_to_child_iter (name_selector_entry->priv->email_generator,
2086
&contact_store_iter, &email_n,
2108
gtk_tree_model_filter_convert_iter_to_child_iter (
2109
GTK_TREE_MODEL_FILTER (model),
2110
&generator_iter, iter);
2111
e_tree_model_generator_convert_iter_to_child_iter (
2112
name_selector_entry->priv->email_generator,
2113
&contact_store_iter, &email_n,
2089
2116
contact = e_contact_store_get_contact (name_selector_entry->priv->contact_store, &contact_store_iter);
2090
2117
email_list = e_contact_get (contact, E_CONTACT_EMAIL);
2094
2121
if (e_contact_get (contact, E_CONTACT_IS_LIST)) {
2095
2122
string = g_strdup_printf ("%s", file_as_str ? file_as_str : "?");
2097
string = g_strdup_printf ("%s%s<%s>", file_as_str ? file_as_str : "",
2098
file_as_str ? " " : "",
2099
email_str ? email_str : "");
2124
string = g_strdup_printf (
2125
"%s%s<%s>", file_as_str ? file_as_str : "",
2126
file_as_str ? " " : "",
2127
email_str ? email_str : "");
2102
2130
g_free (file_as_str);
2137
2165
ensure_type_ahead_complete_on_timeout (ENameSelectorEntry *name_selector_entry)
2139
re_set_timeout (name_selector_entry->priv->type_ahead_complete_cb_id, type_ahead_complete_on_timeout_cb, name_selector_entry);
2168
name_selector_entry->priv->type_ahead_complete_cb_id,
2169
type_ahead_complete_on_timeout_cb, name_selector_entry);
2173
is_source_enabled_with_parents (ESourceRegistry *registry,
2177
const gchar *parent_uid;
2179
g_return_val_if_fail (registry != NULL, FALSE);
2180
g_return_val_if_fail (source != NULL, FALSE);
2182
if (!e_source_get_enabled (source))
2185
parent = g_object_ref (source);
2186
while (parent_uid = e_source_get_parent (parent), parent_uid) {
2187
ESource *next = e_source_registry_ref_source (registry, parent_uid);
2192
g_object_unref (parent);
2194
if (!e_source_get_enabled (next)) {
2195
g_object_unref (next);
2202
g_object_unref (parent);
2150
2215
if (name_selector_entry->priv->contact_store) {
2151
2216
name_selector_entry->priv->email_generator =
2152
e_tree_model_generator_new (GTK_TREE_MODEL (name_selector_entry->priv->contact_store));
2217
e_tree_model_generator_new (
2219
name_selector_entry->priv->contact_store));
2154
e_tree_model_generator_set_generate_func (name_selector_entry->priv->email_generator,
2155
(ETreeModelGeneratorGenerateFunc) generate_contact_rows,
2156
name_selector_entry, NULL);
2221
e_tree_model_generator_set_generate_func (
2222
name_selector_entry->priv->email_generator,
2223
(ETreeModelGeneratorGenerateFunc) generate_contact_rows,
2224
name_selector_entry, NULL);
2158
2226
/* Assign the store to the entry completion */
2160
gtk_entry_completion_set_model (name_selector_entry->priv->entry_completion,
2161
GTK_TREE_MODEL (name_selector_entry->priv->email_generator));
2228
gtk_entry_completion_set_model (
2229
name_selector_entry->priv->entry_completion,
2231
name_selector_entry->priv->email_generator));
2163
2233
/* Set up callback for incoming matches */
2164
g_signal_connect_swapped (name_selector_entry->priv->contact_store, "row-inserted",
2165
G_CALLBACK (ensure_type_ahead_complete_on_timeout), name_selector_entry);
2234
g_signal_connect_swapped (
2235
name_selector_entry->priv->contact_store, "row-inserted",
2236
G_CALLBACK (ensure_type_ahead_complete_on_timeout), name_selector_entry);
2167
2238
/* Remove the store from the entry completion */
2239
2310
extension = e_source_get_extension (source, extension_name);
2241
2312
/* Skip disabled address books. */
2242
if (!e_source_get_enabled (source))
2313
if (!is_source_enabled_with_parents (registry, source))
2245
2316
/* Skip non-completion address books. */
2434
2505
GtkTreeIter iter;
2436
g_signal_connect_swapped (name_selector_entry->priv->destination_store, "row-changed",
2437
G_CALLBACK (destination_row_changed), name_selector_entry);
2438
g_signal_connect_swapped (name_selector_entry->priv->destination_store, "row-deleted",
2439
G_CALLBACK (destination_row_deleted), name_selector_entry);
2440
g_signal_connect_swapped (name_selector_entry->priv->destination_store, "row-inserted",
2441
G_CALLBACK (destination_row_inserted), name_selector_entry);
2507
g_signal_connect_swapped (
2508
name_selector_entry->priv->destination_store, "row-changed",
2509
G_CALLBACK (destination_row_changed), name_selector_entry);
2510
g_signal_connect_swapped (
2511
name_selector_entry->priv->destination_store, "row-deleted",
2512
G_CALLBACK (destination_row_deleted), name_selector_entry);
2513
g_signal_connect_swapped (
2514
name_selector_entry->priv->destination_store, "row-inserted",
2515
G_CALLBACK (destination_row_inserted), name_selector_entry);
2443
2517
if (!gtk_tree_model_get_iter_first (GTK_TREE_MODEL (name_selector_entry->priv->destination_store), &iter))
2475
2549
name_selector_entry->priv->popup_destination = NULL;
2478
gtk_entry_get_layout_offsets (GTK_ENTRY (name_selector_entry),
2479
&layout_offset_x, &layout_offset_y);
2552
gtk_entry_get_layout_offsets (
2553
GTK_ENTRY (name_selector_entry),
2554
&layout_offset_x, &layout_offset_y);
2480
2555
x = (event_button->x + 0.5) - layout_offset_x;
2481
2556
y = (event_button->y + 0.5) - layout_offset_y;
2490
2565
index = gtk_entry_layout_index_to_text_index (GTK_ENTRY (name_selector_entry), index);
2491
2566
destination = find_destination_at_position (name_selector_entry, index);
2492
2567
/* FIXME: Add this to a private variable, in ENameSelectorEntry Class*/
2493
g_object_set_data ((GObject *)name_selector_entry, "index", GINT_TO_POINTER(index));
2568
g_object_set_data ((GObject *) name_selector_entry, "index", GINT_TO_POINTER (index));
2495
2570
if (!destination || !e_destination_get_contact (destination))
2627
2702
gint position, start, end;
2628
2703
const GList *dests;
2630
position = GPOINTER_TO_INT(g_object_get_data ((GObject *)name_selector_entry, "index"));
2705
position = GPOINTER_TO_INT (g_object_get_data ((GObject *) name_selector_entry, "index"));
2632
2707
for (dests = e_destination_list_get_dests (destination); dests; dests = dests->next) {
2633
2708
const EDestination *dest = dests->data;
2717
2792
contact_list_editor = (*name_selector_entry->priv->contact_list_editor_func) (book_client, contact, FALSE, TRUE);
2718
2793
g_object_ref (name_selector_entry);
2719
g_signal_connect (contact_list_editor, "editor_closed",
2720
G_CALLBACK (editor_closed_cb), name_selector_entry);
2795
contact_list_editor, "editor_closed",
2796
G_CALLBACK (editor_closed_cb), name_selector_entry);
2722
2798
GtkWidget *contact_editor;
2727
2803
contact_editor = (*name_selector_entry->priv->contact_editor_func) (book_client, contact, FALSE, TRUE);
2728
2804
g_object_ref (name_selector_entry);
2729
g_signal_connect (contact_editor, "editor_closed",
2730
G_CALLBACK (editor_closed_cb), name_selector_entry);
2806
contact_editor, "editor_closed",
2807
G_CALLBACK (editor_closed_cb), name_selector_entry);
2899
2976
if (length > 1) {
2900
2977
menu_item = gtk_check_menu_item_new_with_label (email);
2901
g_signal_connect (menu_item, "toggled", G_CALLBACK (destination_set_list), dest);
2979
menu_item, "toggled",
2980
G_CALLBACK (destination_set_list), dest);
2903
2982
menu_item = gtk_menu_item_new_with_label (email);
2908
2987
show_menu = TRUE;
2910
2989
if (length > 1) {
2911
gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menu_item), !e_destination_is_ignored (dest));
2912
g_signal_connect_swapped (menu_item, "activate", G_CALLBACK (popup_activate_list),
2990
gtk_check_menu_item_set_active (
2991
GTK_CHECK_MENU_ITEM (menu_item),
2992
!e_destination_is_ignored (dest));
2993
g_signal_connect_swapped (
2994
menu_item, "activate",
2995
G_CALLBACK (popup_activate_list), dest);
2940
3022
if (i == email_num && len > 1) {
2941
3023
gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menu_item), TRUE);
2942
g_signal_connect_swapped (menu_item, "activate", G_CALLBACK (popup_activate_email),
2943
name_selector_entry);
3024
g_signal_connect_swapped (
3025
menu_item, "activate",
3026
G_CALLBACK (popup_activate_email),
3027
name_selector_entry);
2956
3040
/* Expand a list inline */
2958
3042
/* To Translators: This would be similiar to "Expand MyList Inline" where MyList is a Contact List*/
2959
edit_label = g_strdup_printf (_("E_xpand %s Inline"), (gchar *)e_contact_get_const (contact, E_CONTACT_FILE_AS));
3043
edit_label = g_strdup_printf (_("E_xpand %s Inline"), (gchar *) e_contact_get_const (contact, E_CONTACT_FILE_AS));
2960
3044
menu_item = gtk_menu_item_new_with_mnemonic (edit_label);
2961
3045
g_free (edit_label);
2962
3046
gtk_widget_show (menu_item);
2963
3047
gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), menu_item);
2964
g_signal_connect_swapped (menu_item, "activate", G_CALLBACK (popup_activate_inline_expand),
2965
name_selector_entry);
3048
g_signal_connect_swapped (
3049
menu_item, "activate", G_CALLBACK (popup_activate_inline_expand),
3050
name_selector_entry);
2967
3052
/* Separator */
2968
3053
menu_item = gtk_separator_menu_item_new ();
2973
3058
/* Copy Contact Item */
2974
copy_label = g_strdup_printf (_("Cop_y %s"), (gchar *)e_contact_get_const (contact, E_CONTACT_FILE_AS));
3059
copy_label = g_strdup_printf (_("Cop_y %s"), (gchar *) e_contact_get_const (contact, E_CONTACT_FILE_AS));
2975
3060
menu_item = gtk_menu_item_new_with_mnemonic (copy_label);
2976
3061
g_free (copy_label);
2977
3062
gtk_widget_show (menu_item);
2978
3063
gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), menu_item);
2980
g_signal_connect_swapped (menu_item, "activate", G_CALLBACK (popup_activate_copy),
2981
name_selector_entry);
3065
g_signal_connect_swapped (
3066
menu_item, "activate", G_CALLBACK (popup_activate_copy),
3067
name_selector_entry);
2983
3069
/* Cut Contact Item */
2984
cut_label = g_strdup_printf (_("C_ut %s"), (gchar *)e_contact_get_const (contact, E_CONTACT_FILE_AS));
3070
cut_label = g_strdup_printf (_("C_ut %s"), (gchar *) e_contact_get_const (contact, E_CONTACT_FILE_AS));
2985
3071
menu_item = gtk_menu_item_new_with_mnemonic (cut_label);
2986
3072
g_free (cut_label);
2987
3073
gtk_widget_show (menu_item);
2988
3074
gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), menu_item);
2990
g_signal_connect_swapped (menu_item, "activate", G_CALLBACK (popup_activate_cut),
2991
name_selector_entry);
3076
g_signal_connect_swapped (
3077
menu_item, "activate", G_CALLBACK (popup_activate_cut),
3078
name_selector_entry);
2993
3080
if (show_menu) {
2994
3081
menu_item = gtk_separator_menu_item_new ();
2999
3086
/* Edit Contact item */
3001
edit_label = g_strdup_printf (_("_Edit %s"), (gchar *)e_contact_get_const (contact, E_CONTACT_FILE_AS));
3088
edit_label = g_strdup_printf (_("_Edit %s"), (gchar *) e_contact_get_const (contact, E_CONTACT_FILE_AS));
3002
3089
menu_item = gtk_menu_item_new_with_mnemonic (edit_label);
3003
3090
g_free (edit_label);
3004
3091
gtk_widget_show (menu_item);
3005
3092
gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), menu_item);
3007
g_signal_connect_swapped (menu_item, "activate", G_CALLBACK (popup_activate_contact),
3008
name_selector_entry);
3094
g_signal_connect_swapped (
3095
menu_item, "activate", G_CALLBACK (popup_activate_contact),
3096
name_selector_entry);
3010
3098
deep_free_list (email_list);