~ubuntu-branches/ubuntu/precise/evolution/precise

« back to all changes in this revision

Viewing changes to addressbook/gui/contact-editor/e-contact-editor.c

  • Committer: Bazaar Package Importer
  • Author(s): Mathieu Trudel-Lapierre
  • Date: 2011-06-24 00:27:53 UTC
  • mfrom: (1.1.80 upstream)
  • Revision ID: james.westby@ubuntu.com-20110624002753-2vh1vjavlya7r103
Tags: 3.1.2-0ubuntu1
* New upstream release 3.1.2.
* debian/control: adjust Build-Depends to match new upstream requirements for
  the new release.
* debian/control: update evolution and evolution-dev Depends to require the
  right versions of e-d-s (>= 3.1, << 3.2), and drop libunique-3.0-dev.
* debian/control,
  debian/evolution.install: remove groupwise-features from the plugin list,
  it's now split out into a separate module.
* debian/patches/03_lpi.patch: refreshed.

Show diffs side-by-side

added added

removed removed

Lines of Context:
20
20
 *
21
21
 */
22
22
 
 
23
#ifdef HAVE_CONFIG_H
23
24
#include <config.h>
 
25
#endif
24
26
 
25
27
#include "eab-editor.h"
26
28
#include "e-contact-editor.h"
71
73
        NUM_IM_COLUMNS
72
74
};
73
75
 
74
 
static void e_contact_editor_init               (EContactEditor *editor);
75
 
static void e_contact_editor_class_init (EContactEditorClass *klass);
76
 
static void e_contact_editor_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
77
 
static void e_contact_editor_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
78
 
static void e_contact_editor_dispose (GObject *object);
79
 
 
80
 
static void e_contact_editor_raise (EABEditor *editor);
81
 
static void e_contact_editor_show (EABEditor *editor);
82
 
static void e_contact_editor_save_contact (EABEditor *editor, gboolean should_close);
83
 
static void e_contact_editor_close (EABEditor *editor);
84
 
static gboolean e_contact_editor_is_valid (EABEditor *editor);
85
 
static gboolean e_contact_editor_is_changed (EABEditor *editor);
86
 
static GtkWindow* e_contact_editor_get_window (EABEditor *editor);
87
 
 
88
 
static void save_contact (EContactEditor *ce, gboolean should_close);
89
 
static void entry_activated (EContactEditor *editor);
90
 
 
91
 
static void set_entry_text (EContactEditor *editor, GtkEntry *entry, const gchar *string);
92
 
static void sensitize_ok (EContactEditor *ce);
 
76
static void     e_contact_editor_init           (EContactEditor *editor);
 
77
static void     e_contact_editor_class_init     (EContactEditorClass *klass);
 
78
static void     e_contact_editor_set_property   (GObject *object,
 
79
                                                 guint prop_id,
 
80
                                                 const GValue *value,
 
81
                                                 GParamSpec *pspec);
 
82
static void     e_contact_editor_get_property   (GObject *object,
 
83
                                                 guint prop_id,
 
84
                                                 GValue *value,
 
85
                                                 GParamSpec *pspec);
 
86
static void     e_contact_editor_dispose        (GObject *object);
 
87
static void     e_contact_editor_raise          (EABEditor *editor);
 
88
static void     e_contact_editor_show           (EABEditor *editor);
 
89
static void     e_contact_editor_save_contact   (EABEditor *editor,
 
90
                                                 gboolean should_close);
 
91
static void     e_contact_editor_close          (EABEditor *editor);
 
92
static gboolean e_contact_editor_is_valid       (EABEditor *editor);
 
93
static gboolean e_contact_editor_is_changed     (EABEditor *editor);
 
94
static GtkWindow *
 
95
                e_contact_editor_get_window     (EABEditor *editor);
 
96
static void     save_contact                    (EContactEditor *ce,
 
97
                                                 gboolean should_close);
 
98
static void     entry_activated                 (EContactEditor *editor);
 
99
 
 
100
static void     set_entry_text                  (EContactEditor *editor,
 
101
                                                 GtkEntry *entry,
 
102
                                                 const gchar *string);
 
103
static void     sensitize_ok                    (EContactEditor *ce);
93
104
 
94
105
static EABEditorClass *parent_class = NULL;
95
106
 
260
271
                        (GInstanceInitFunc) e_contact_editor_init,
261
272
                };
262
273
 
263
 
                contact_editor_type = g_type_register_static (EAB_TYPE_EDITOR, "EContactEditor", &contact_editor_info, 0);
 
274
                contact_editor_type = g_type_register_static (
 
275
                        EAB_TYPE_EDITOR, "EContactEditor",
 
276
                        &contact_editor_info, 0);
264
277
        }
265
278
 
266
279
        return contact_editor_type;
430
443
                        return FALSE;
431
444
        case 4: /* Fall Through */
432
445
        case 5:
433
 
                if (company && *company && name && ((name->given && *name->given) || (name->family && *name->family)))
 
446
                if (company && *company && name &&
 
447
                        ((name->given && *name->given) ||
 
448
                         (name->family && *name->family)))
434
449
                        return TRUE;
435
450
                else
436
451
                        return FALSE;
518
533
static gint
519
534
file_as_get_style (EContactEditor *editor)
520
535
{
521
 
        GtkEntry *file_as = GTK_ENTRY (gtk_bin_get_child (GTK_BIN (e_builder_get_widget(editor->builder, "combo-file-as"))));
522
 
        GtkEntry *company_w = GTK_ENTRY (e_builder_get_widget (editor->builder, "entry-company"));
 
536
        GtkEntry *file_as = GTK_ENTRY (
 
537
                gtk_bin_get_child (GTK_BIN (
 
538
                e_builder_get_widget(editor->builder, "combo-file-as"))));
 
539
        GtkEntry *company_w = GTK_ENTRY (
 
540
                e_builder_get_widget (editor->builder, "entry-company"));
523
541
        gchar *filestring;
524
542
        gchar *trystring;
525
543
        EContactName *name = editor->name;
551
569
        gchar *string;
552
570
        gint i;
553
571
        GList *strings = NULL;
554
 
        GtkComboBox *combo_file_as = GTK_COMBO_BOX (e_builder_get_widget (editor->builder, "combo-file-as"));
555
 
        GtkEntry *company_w = GTK_ENTRY (e_builder_get_widget (editor->builder, "entry-company"));
 
572
        GtkComboBox *combo_file_as = GTK_COMBO_BOX (
 
573
                e_builder_get_widget (editor->builder, "combo-file-as"));
 
574
        GtkEntry *company_w = GTK_ENTRY (
 
575
                e_builder_get_widget (editor->builder, "entry-company"));
556
576
        const gchar *company;
557
577
 
558
578
        if (!(combo_file_as && GTK_IS_COMBO_BOX (combo_file_as)))
586
606
                GtkListStore *list_store;
587
607
                GtkTreeIter iter;
588
608
 
589
 
                list_store = GTK_LIST_STORE (gtk_combo_box_get_model (combo_file_as));
 
609
                list_store = GTK_LIST_STORE (
 
610
                        gtk_combo_box_get_model (combo_file_as));
590
611
 
591
612
                gtk_list_store_clear (list_store);
592
613
 
601
622
 
602
623
        if (style != -1) {
603
624
                string = name_to_style (editor->name, company, style);
604
 
                set_entry_text (editor, GTK_ENTRY (gtk_bin_get_child (GTK_BIN (combo_file_as))), string);
 
625
                set_entry_text (
 
626
                        editor, GTK_ENTRY (gtk_bin_get_child (
 
627
                        GTK_BIN (combo_file_as))), string);
605
628
                g_free (string);
606
629
        }
607
630
}
618
641
        editor->name = e_contact_name_from_string (string);
619
642
        file_as_set_style (editor, style);
620
643
 
 
644
        editor->check_merge = TRUE;
 
645
 
621
646
        sensitize_ok (editor);
622
647
        if (string && !*string)
623
648
                gtk_window_set_title (GTK_WINDOW (editor->app), _("Contact Editor"));
683
708
{
684
709
        GtkWidget *widget;
685
710
        gboolean   allow_save;
686
 
        GtkWidget *entry_fullname = e_builder_get_widget (ce->builder, "entry-fullname" );
687
 
        GtkWidget *entry_file_as = gtk_bin_get_child (GTK_BIN (e_builder_get_widget (ce->builder, "combo-file-as")));
688
 
        GtkWidget *company_name = e_builder_get_widget (ce->builder, "entry-company");
689
 
        const gchar *name_entry_string = gtk_entry_get_text (GTK_ENTRY (entry_fullname));
690
 
        const gchar *file_as_entry_string = gtk_entry_get_text (GTK_ENTRY (entry_file_as));
691
 
        const gchar *company_name_string = gtk_entry_get_text (GTK_ENTRY (company_name));
692
 
 
693
 
        allow_save = ce->target_editable && ce->changed ? TRUE : FALSE;
694
 
 
695
 
        if (!strcmp (name_entry_string, "") || !strcmp (file_as_entry_string, "")) {
 
711
        GtkWidget *entry_fullname =
 
712
                e_builder_get_widget (ce->builder, "entry-fullname" );
 
713
        GtkWidget *entry_file_as =
 
714
                gtk_bin_get_child (GTK_BIN (
 
715
                e_builder_get_widget (ce->builder, "combo-file-as")));
 
716
        GtkWidget *company_name =
 
717
                e_builder_get_widget (ce->builder, "entry-company");
 
718
        const gchar *name_entry_string =
 
719
                gtk_entry_get_text (GTK_ENTRY (entry_fullname));
 
720
        const gchar *file_as_entry_string =
 
721
                gtk_entry_get_text (GTK_ENTRY (entry_file_as));
 
722
        const gchar *company_name_string =
 
723
                gtk_entry_get_text (GTK_ENTRY (company_name));
 
724
 
 
725
        allow_save = ce->target_editable && ce->changed;
 
726
 
 
727
        if (!strcmp (name_entry_string, "") ||
 
728
            !strcmp (file_as_entry_string, "")) {
696
729
                if (strcmp (company_name_string , "")) {
697
730
                        allow_save = TRUE;
698
731
                }
711
744
                return;
712
745
        }
713
746
 
 
747
        if (!editor->check_merge && GTK_IS_WIDGET (object)) {
 
748
                const gchar *widget_name;
 
749
 
 
750
                widget_name = gtk_widget_get_name (GTK_WIDGET (object));
 
751
 
 
752
                if (widget_name &&
 
753
                    ((g_str_equal (widget_name, "fullname")) ||
 
754
                     (g_str_equal (widget_name, "nickname")) ||
 
755
                     (g_str_equal (widget_name, "file-as")) ||
 
756
                     (g_str_has_prefix (widget_name, "email-"))))
 
757
                        editor->check_merge = TRUE;
 
758
        }
 
759
 
714
760
        if (!editor->changed) {
715
761
                editor->changed = TRUE;
716
762
                sensitize_ok (editor);
766
812
        g_free (widget_name);
767
813
 
768
814
        widget_name = g_strdup_printf ("combobox-email-%d", record);
769
 
        location_combo_box = GTK_COMBO_BOX (e_builder_get_widget (editor->builder, widget_name));
 
815
        location_combo_box = GTK_COMBO_BOX (
 
816
                e_builder_get_widget (editor->builder, widget_name));
770
817
        g_free (widget_name);
771
818
 
772
819
        store = GTK_LIST_STORE (gtk_combo_box_get_model (location_combo_box));
779
826
                        -1);
780
827
        }
781
828
 
782
 
        g_signal_connect_swapped (location_combo_box, "changed", G_CALLBACK (gtk_widget_grab_focus), email_entry);
783
 
        g_signal_connect (location_combo_box, "changed", G_CALLBACK (object_changed), editor);
784
 
        g_signal_connect (email_entry, "changed", G_CALLBACK (object_changed), editor);
785
 
        g_signal_connect_swapped (email_entry, "activate", G_CALLBACK (entry_activated), editor);
 
829
        g_signal_connect_swapped (
 
830
                location_combo_box, "changed",
 
831
                G_CALLBACK (gtk_widget_grab_focus), email_entry);
 
832
        g_signal_connect (
 
833
                location_combo_box, "changed",
 
834
                G_CALLBACK (object_changed), editor);
 
835
        g_signal_connect (
 
836
                email_entry, "changed",
 
837
                G_CALLBACK (object_changed), editor);
 
838
        g_signal_connect_swapped (
 
839
                email_entry, "activate",
 
840
                G_CALLBACK (entry_activated), editor);
786
841
}
787
842
 
788
843
static void
789
 
fill_in_email_record (EContactEditor *editor, gint record, const gchar *address, gint location)
 
844
fill_in_email_record (EContactEditor *editor,
 
845
                      gint record,
 
846
                      const gchar *address,
 
847
                      gint location)
790
848
{
791
849
        GtkWidget *location_combo_box;
792
850
        GtkWidget *email_entry;
807
865
}
808
866
 
809
867
static void
810
 
extract_email_record (EContactEditor *editor, gint record, gchar **address, gint *location)
 
868
extract_email_record (EContactEditor *editor,
 
869
                      gint record,
 
870
                      gchar **address,
 
871
                      gint *location)
811
872
{
812
873
        GtkWidget *location_combo_box;
813
874
        GtkWidget *email_entry;
949
1010
}
950
1011
 
951
1012
static gint
952
 
alloc_ui_slot (EContactEditor *editor, const gchar *widget_base, gint preferred_slot, gint num_slots)
 
1013
alloc_ui_slot (EContactEditor *editor,
 
1014
               const gchar *widget_base,
 
1015
               gint preferred_slot,
 
1016
               gint num_slots)
953
1017
{
954
1018
        gchar       *widget_name;
955
1019
        GtkWidget   *widget;
1006
1070
        /* Clear */
1007
1071
 
1008
1072
        for (record_n = 1; record_n <= EMAIL_SLOTS; record_n++) {
1009
 
                fill_in_email_record (editor, record_n, NULL, email_default[record_n - 1]);
 
1073
                fill_in_email_record (
 
1074
                        editor, record_n, NULL, email_default[record_n - 1]);
1010
1075
        }
1011
1076
 
1012
1077
        /* Fill in */
1013
1078
 
1014
 
        email_attr_list = e_contact_get_attributes (editor->contact, E_CONTACT_EMAIL);
 
1079
        email_attr_list = e_contact_get_attributes (
 
1080
                editor->contact, E_CONTACT_EMAIL);
1015
1081
 
1016
 
        for (record_n = 1, l = email_attr_list; l && record_n <= EMAIL_SLOTS; l = g_list_next (l)) {
 
1082
        for (record_n = 1, l = email_attr_list;
 
1083
                l && record_n <= EMAIL_SLOTS; l = g_list_next (l)) {
1017
1084
                EVCardAttribute *attr = l->data;
1018
1085
                gchar           *email_address;
1019
1086
                gint             slot;
1020
1087
 
1021
1088
                email_address = e_vcard_attribute_get_value (attr);
1022
 
                slot = alloc_ui_slot (editor, "entry-email", get_ui_slot (attr), EMAIL_SLOTS);
 
1089
                slot = alloc_ui_slot (
 
1090
                        editor, "entry-email",
 
1091
                        get_ui_slot (attr), EMAIL_SLOTS);
1023
1092
                if (slot < 1)
1024
1093
                        break;
1025
1094
 
1049
1118
 
1050
1119
                if (!STRING_IS_EMPTY (address)) {
1051
1120
                        EVCardAttribute *attr;
1052
 
                        attr = e_vcard_attribute_new ("", e_contact_vcard_attribute (E_CONTACT_EMAIL));
 
1121
                        attr = e_vcard_attribute_new (
 
1122
                                "", e_contact_vcard_attribute (E_CONTACT_EMAIL));
1053
1123
 
1054
1124
                        if (location >= 0)
1055
 
                                e_vcard_attribute_add_param_with_value (attr,
1056
 
                                                                        e_vcard_attribute_param_new (EVC_TYPE),
1057
 
                                                                        email_index_to_location (location));
 
1125
                                e_vcard_attribute_add_param_with_value (
 
1126
                                        attr,
 
1127
                                        e_vcard_attribute_param_new (EVC_TYPE),
 
1128
                                        email_index_to_location (location));
1058
1129
 
1059
1130
                        e_vcard_attribute_add_value (attr, address);
1060
1131
                        set_ui_slot (attr, i);
1143
1214
                "text", 0, "sensitive", 1, NULL);
1144
1215
}
1145
1216
 
1146
 
/* EContact can get attributes by field ID only, and there is none for TEL, so we need this */
 
1217
/* EContact can get attributes by field ID only,
 
1218
 * and there is none for TEL, so we need this */
1147
1219
static GList *
1148
 
get_attributes_named (EVCard *vcard, const gchar *attr_name)
 
1220
get_attributes_named (EVCard *vcard,
 
1221
                      const gchar *attr_name)
1149
1222
{
1150
1223
        GList *attr_list_in;
1151
1224
        GList *attr_list_out = NULL;
1160
1233
                name = e_vcard_attribute_get_name (attr);
1161
1234
 
1162
1235
                if (!g_ascii_strcasecmp (attr_name, name)) {
1163
 
                        attr_list_out = g_list_append (attr_list_out, e_vcard_attribute_copy (attr));
 
1236
                        attr_list_out = g_list_append (
 
1237
                                attr_list_out,
 
1238
                                e_vcard_attribute_copy (attr));
1164
1239
                }
1165
1240
        }
1166
1241
 
1167
1242
        return attr_list_out;
1168
1243
}
1169
1244
 
1170
 
/* EContact can set attributes by field ID only, and there is none for TEL, so we need this */
 
1245
/* EContact can set attributes by field ID only,
 
1246
 * and there is none for TEL, so we need this */
1171
1247
static void
1172
 
set_attributes_named (EVCard *vcard, const gchar *attr_name, GList *attr_list)
 
1248
set_attributes_named (EVCard *vcard,
 
1249
                      const gchar *attr_name,
 
1250
                      GList *attr_list)
1173
1251
{
1174
1252
        GList *l;
1175
1253
 
1191
1269
 
1192
1270
        arrow  = e_builder_get_widget (editor->builder, arrow_widget);
1193
1271
        if (expanded)
1194
 
                gtk_arrow_set (GTK_ARROW (arrow), GTK_ARROW_DOWN, GTK_SHADOW_NONE);
 
1272
                gtk_arrow_set (
 
1273
                        GTK_ARROW (arrow), GTK_ARROW_DOWN, GTK_SHADOW_NONE);
1195
1274
        else
1196
 
                gtk_arrow_set (GTK_ARROW (arrow), GTK_ARROW_RIGHT, GTK_SHADOW_NONE);
 
1275
                gtk_arrow_set (
 
1276
                        GTK_ARROW (arrow), GTK_ARROW_RIGHT, GTK_SHADOW_NONE);
1197
1277
}
1198
1278
 
1199
1279
static void
1275
1355
}
1276
1356
 
1277
1357
static void
1278
 
fill_in_phone_record (EContactEditor *editor, gint record, const gchar *phone, gint phone_type)
 
1358
fill_in_phone_record (EContactEditor *editor,
 
1359
                      gint record,
 
1360
                      const gchar *phone,
 
1361
                      gint phone_type)
1279
1362
{
1280
1363
        GtkWidget *phone_type_combo_box;
1281
1364
        GtkWidget *phone_entry;
1299
1382
}
1300
1383
 
1301
1384
static void
1302
 
extract_phone_record (EContactEditor *editor, gint record, gchar **phone, gint *phone_type)
 
1385
extract_phone_record (EContactEditor *editor,
 
1386
                      gint record,
 
1387
                      gchar **phone,
 
1388
                      gint *phone_type)
1303
1389
{
1304
1390
        GtkWidget *phone_type_combo_box;
1305
1391
        GtkWidget *phone_entry;
1334
1420
 
1335
1421
        phone_attr_list = get_attributes_named (E_VCARD (editor->contact), "TEL");
1336
1422
 
1337
 
        for (record_n = 1, l = phone_attr_list; l && record_n <= PHONE_SLOTS; l = g_list_next (l)) {
 
1423
        for (record_n = 1, l = phone_attr_list;
 
1424
                l && record_n <= PHONE_SLOTS; l = g_list_next (l)) {
1338
1425
                EVCardAttribute *attr = l->data;
1339
1426
                gchar           *phone;
1340
1427
                gint             slot;
1433
1520
 
1434
1521
        init_item_sensitiveable_combo_box (GTK_COMBO_BOX (phone_type_combo_box));
1435
1522
 
1436
 
        store = GTK_LIST_STORE (gtk_combo_box_get_model (GTK_COMBO_BOX (phone_type_combo_box)));
 
1523
        store = GTK_LIST_STORE (
 
1524
                gtk_combo_box_get_model (
 
1525
                GTK_COMBO_BOX (phone_type_combo_box)));
 
1526
 
1437
1527
        for (i = 0; i < G_N_ELEMENTS (phones); i++) {
1438
1528
                GtkTreeIter iter;
1439
1529
 
1445
1535
                        -1);
1446
1536
        }
1447
1537
 
1448
 
        g_signal_connect_swapped (phone_type_combo_box, "changed", G_CALLBACK (gtk_widget_grab_focus), phone_entry);
1449
 
        g_signal_connect (phone_type_combo_box, "changed", G_CALLBACK (object_changed), editor);
1450
 
        g_signal_connect (phone_entry, "changed", G_CALLBACK (object_changed), editor);
1451
 
        g_signal_connect_swapped (phone_entry, "activate", G_CALLBACK (entry_activated), editor);
 
1538
        g_signal_connect_swapped (
 
1539
                phone_type_combo_box, "changed",
 
1540
                G_CALLBACK (gtk_widget_grab_focus), phone_entry);
 
1541
        g_signal_connect (
 
1542
                phone_type_combo_box, "changed",
 
1543
                G_CALLBACK (object_changed), editor);
 
1544
        g_signal_connect (
 
1545
                phone_entry, "changed",
 
1546
                G_CALLBACK (object_changed), editor);
 
1547
        g_signal_connect_swapped (
 
1548
                phone_entry, "activate",
 
1549
                G_CALLBACK (entry_activated), editor);
1452
1550
}
1453
1551
 
1454
1552
static void
1540
1638
 
1541
1639
        init_item_sensitiveable_combo_box (GTK_COMBO_BOX (location_combo_box));
1542
1640
 
1543
 
        store = GTK_LIST_STORE (gtk_combo_box_get_model (GTK_COMBO_BOX (location_combo_box)));
 
1641
        store = GTK_LIST_STORE (
 
1642
                gtk_combo_box_get_model (
 
1643
                GTK_COMBO_BOX (location_combo_box)));
 
1644
 
1544
1645
        for (i = 0; i < G_N_ELEMENTS (common_location); i++) {
1545
1646
                GtkTreeIter iter;
1546
1647
 
1552
1653
                        -1);
1553
1654
        }
1554
1655
 
1555
 
        g_signal_connect (location_combo_box, "changed", G_CALLBACK (object_changed), editor);
 
1656
        g_signal_connect (
 
1657
                location_combo_box, "changed",
 
1658
                G_CALLBACK (object_changed), editor);
1556
1659
#endif
1557
1660
}
1558
1661
 
1580
1683
 
1581
1684
        init_item_sensitiveable_combo_box (GTK_COMBO_BOX (service_combo_box));
1582
1685
 
1583
 
        store = GTK_LIST_STORE (gtk_combo_box_get_model (GTK_COMBO_BOX (service_combo_box)));
 
1686
        store = GTK_LIST_STORE (
 
1687
                gtk_combo_box_get_model (
 
1688
                GTK_COMBO_BOX (service_combo_box)));
 
1689
 
1584
1690
        for (i = 0; i < G_N_ELEMENTS (im_service); i++) {
1585
1691
                GtkTreeIter iter;
1586
1692
 
1592
1698
                        -1);
1593
1699
        }
1594
1700
 
1595
 
        g_signal_connect_swapped (service_combo_box, "changed", G_CALLBACK (gtk_widget_grab_focus), name_entry);
1596
 
        g_signal_connect (service_combo_box, "changed", G_CALLBACK (object_changed), editor);
1597
 
        g_signal_connect (name_entry, "changed", G_CALLBACK (object_changed), editor);
1598
 
        g_signal_connect_swapped (name_entry, "activate", G_CALLBACK (entry_activated), editor);
 
1701
        g_signal_connect_swapped (
 
1702
                service_combo_box, "changed",
 
1703
                G_CALLBACK (gtk_widget_grab_focus), name_entry);
 
1704
        g_signal_connect (
 
1705
                service_combo_box, "changed",
 
1706
                G_CALLBACK (object_changed), editor);
 
1707
        g_signal_connect (
 
1708
                name_entry, "changed",
 
1709
                G_CALLBACK (object_changed), editor);
 
1710
        g_signal_connect_swapped (
 
1711
                name_entry, "activate",
 
1712
                G_CALLBACK (entry_activated), editor);
1599
1713
}
1600
1714
 
1601
1715
static void
1610
1724
}
1611
1725
 
1612
1726
static void
1613
 
fill_in_im_record (EContactEditor *editor, gint record, gint service, const gchar *name, gint location)
 
1727
fill_in_im_record (EContactEditor *editor,
 
1728
                   gint record,
 
1729
                   gint service,
 
1730
                   const gchar *name,
 
1731
                   gint location)
1614
1732
{
1615
1733
        GtkWidget *service_combo_box;
1616
1734
#ifdef ENABLE_IM_LOCATION
1669
1787
                        gint             slot;
1670
1788
 
1671
1789
                        im_name = e_vcard_attribute_get_value (attr);
1672
 
                        slot = alloc_ui_slot (editor, "entry-im-name", get_ui_slot (attr), IM_SLOTS);
 
1790
                        slot = alloc_ui_slot (
 
1791
                                editor, "entry-im-name",
 
1792
                                get_ui_slot (attr), IM_SLOTS);
1673
1793
                        if (slot < 1)
1674
1794
                                break;
1675
1795
 
1685
1805
}
1686
1806
 
1687
1807
static void
1688
 
extract_im_record (EContactEditor *editor, gint record, gint *service, gchar **name, gint *location)
 
1808
extract_im_record (EContactEditor *editor,
 
1809
                   gint record,
 
1810
                   gint *service,
 
1811
                   gchar **name,
 
1812
                   gint *location)
1689
1813
{
1690
1814
        GtkWidget *service_combo_box;
1691
1815
#ifdef ENABLE_IM_LOCATION
1735
1859
                extract_im_record (editor, i, &service, &name, &location);
1736
1860
 
1737
1861
                if (!STRING_IS_EMPTY (name)) {
1738
 
                        attr = e_vcard_attribute_new ("", e_contact_vcard_attribute (im_service [service].field));
 
1862
                        attr = e_vcard_attribute_new (
 
1863
                                "", e_contact_vcard_attribute (
 
1864
                                im_service[service].field));
1739
1865
 
1740
1866
                        if (location >= 0)
1741
 
                                e_vcard_attribute_add_param_with_value (attr,
1742
 
                                                                        e_vcard_attribute_param_new (EVC_TYPE),
1743
 
                                                                        im_index_to_location (location));
 
1867
                                e_vcard_attribute_add_param_with_value (
 
1868
                                        attr,
 
1869
                                        e_vcard_attribute_param_new (EVC_TYPE),
 
1870
                                        im_index_to_location (location));
1744
1871
 
1745
1872
                        e_vcard_attribute_add_value (attr, name);
1746
1873
                        set_ui_slot (attr, i);
1747
1874
 
1748
 
                        service_attr_list[service] = g_list_append (service_attr_list[service], attr);
 
1875
                        service_attr_list[service] = g_list_append (
 
1876
                                service_attr_list[service], attr);
1749
1877
                }
1750
1878
 
1751
1879
                g_free (name);
1759
1887
 
1760
1888
                /* Splice in the old attributes, minus the filled_in_slots first */
1761
1889
 
1762
 
                old_service_attr_list = e_contact_get_attributes (editor->contact, im_service[i].field);
1763
 
                filled_in_slots = MIN (remaining_slots, g_list_length (old_service_attr_list));
 
1890
                old_service_attr_list = e_contact_get_attributes (
 
1891
                        editor->contact, im_service[i].field);
 
1892
                filled_in_slots =
 
1893
                        MIN (remaining_slots,
 
1894
                        g_list_length (old_service_attr_list));
1764
1895
                remaining_slots -= filled_in_slots;
1765
1896
 
1766
 
                for (l = old_service_attr_list, j = 0; l && j < filled_in_slots; l = l_next, j++) {
 
1897
                for (l = old_service_attr_list, j = 0;
 
1898
                        l && j < filled_in_slots; l = l_next, j++) {
1767
1899
                        l_next = g_list_next (l);
1768
1900
 
1769
1901
                        e_vcard_attribute_free (l->data);
1771
1903
                }
1772
1904
 
1773
1905
                old_service_attr_list = l;
1774
 
                service_attr_list[i] = g_list_concat (service_attr_list[i], old_service_attr_list);
 
1906
                service_attr_list[i] = g_list_concat (
 
1907
                        service_attr_list[i], old_service_attr_list);
1775
1908
 
1776
1909
                e_contact_set_attributes (
1777
1910
                        editor->contact,
1879
2012
static void
1880
2013
init_address_textview (EContactEditor *editor, gint record)
1881
2014
{
1882
 
        gchar         *textview_name;
1883
 
        GtkWidget     *textview;
 
2015
        gchar *textview_name;
 
2016
        GtkWidget *textview;
1884
2017
        GtkTextBuffer *text_buffer;
1885
2018
 
1886
 
        textview_name = g_strdup_printf ("textview-%s-address", address_name [record]);
 
2019
        textview_name = g_strdup_printf (
 
2020
                "textview-%s-address", address_name [record]);
1887
2021
        textview = e_builder_get_widget (editor->builder, textview_name);
1888
2022
        g_free (textview_name);
1889
2023
 
1890
2024
        text_buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (textview));
1891
 
        g_signal_connect (text_buffer, "changed", G_CALLBACK (object_changed), editor);
 
2025
 
 
2026
        g_signal_connect (
 
2027
                text_buffer, "changed",
 
2028
                G_CALLBACK (object_changed), editor);
1892
2029
}
1893
2030
 
1894
2031
static void
1895
 
init_address_field (EContactEditor *editor, gint record, const gchar *widget_field_name)
 
2032
init_address_field (EContactEditor *editor,
 
2033
                    gint record,
 
2034
                    const gchar *widget_field_name)
1896
2035
{
1897
 
        gchar     *entry_name;
 
2036
        gchar *entry_name;
1898
2037
        GtkWidget *entry;
1899
2038
 
1900
 
        entry_name = g_strdup_printf ("entry-%s-%s", address_name [record], widget_field_name);
 
2039
        entry_name = g_strdup_printf (
 
2040
                "entry-%s-%s", address_name [record], widget_field_name);
1901
2041
        entry = e_builder_get_widget (editor->builder, entry_name);
1902
2042
        g_free (entry_name);
1903
2043
 
1904
 
        g_signal_connect (entry, "changed", G_CALLBACK (object_changed), editor);
1905
 
        g_signal_connect_swapped (entry, "activate", G_CALLBACK (entry_activated), editor);
 
2044
        g_signal_connect (
 
2045
                entry, "changed",
 
2046
                G_CALLBACK (object_changed), editor);
 
2047
        g_signal_connect_swapped (
 
2048
                entry, "activate",
 
2049
                G_CALLBACK (entry_activated), editor);
1906
2050
}
1907
2051
 
1908
2052
static void
1931
2075
}
1932
2076
 
1933
2077
static void
1934
 
fill_in_address_textview (EContactEditor *editor, gint record, EContactAddress *address)
 
2078
fill_in_address_textview (EContactEditor *editor,
 
2079
                          gint record,
 
2080
                          EContactAddress *address)
1935
2081
{
1936
2082
        gchar         *textview_name;
1937
2083
        GtkWidget     *textview;
1957
2103
}
1958
2104
 
1959
2105
static void
1960
 
fill_in_address_label_textview (EContactEditor *editor, gint record, const gchar *label)
 
2106
fill_in_address_label_textview (EContactEditor *editor,
 
2107
                                gint record,
 
2108
                                const gchar *label)
1961
2109
{
1962
2110
        gchar         *textview_name;
1963
2111
        GtkWidget     *textview;
1980
2128
        gchar     *entry_name;
1981
2129
        GtkWidget *entry;
1982
2130
 
1983
 
        entry_name = g_strdup_printf ("entry-%s-%s", address_name [record], widget_field_name);
 
2131
        entry_name = g_strdup_printf (
 
2132
                "entry-%s-%s", address_name [record], widget_field_name);
1984
2133
        entry = e_builder_get_widget (editor->builder, entry_name);
1985
2134
        g_free (entry_name);
1986
2135
 
1988
2137
}
1989
2138
 
1990
2139
static void
1991
 
fill_in_address_record (EContactEditor *editor, gint record)
 
2140
fill_in_address_record (EContactEditor *editor,
 
2141
                        gint record)
1992
2142
{
1993
2143
        EContactAddress *address;
1994
2144
        gchar           *address_label;
2029
2179
}
2030
2180
 
2031
2181
static void
2032
 
extract_address_textview (EContactEditor *editor, gint record, EContactAddress *address)
 
2182
extract_address_textview (EContactEditor *editor,
 
2183
                          gint record,
 
2184
                          EContactAddress *address)
2033
2185
{
2034
2186
        gchar         *textview_name;
2035
2187
        GtkWidget     *textview;
2070
2222
}
2071
2223
 
2072
2224
static gchar *
2073
 
extract_address_field (EContactEditor *editor, gint record, const gchar *widget_field_name)
 
2225
extract_address_field (EContactEditor *editor,
 
2226
                       gint record,
 
2227
                       const gchar *widget_field_name)
2074
2228
{
2075
2229
        gchar     *entry_name;
2076
2230
        GtkWidget *entry;
2077
2231
 
2078
 
        entry_name = g_strdup_printf ("entry-%s-%s", address_name [record], widget_field_name);
 
2232
        entry_name = g_strdup_printf (
 
2233
                "entry-%s-%s", address_name [record], widget_field_name);
2079
2234
        entry = e_builder_get_widget (editor->builder, entry_name);
2080
2235
        g_free (entry_name);
2081
2236
 
2083
2238
}
2084
2239
 
2085
2240
static gchar *
2086
 
append_to_address_label (gchar *address_label, const gchar *part, gboolean newline)
 
2241
append_to_address_label (gchar *address_label,
 
2242
                         const gchar *part,
 
2243
                         gboolean newline)
2087
2244
{
2088
2245
        gchar *new_address_label;
2089
2246
 
2091
2248
                return address_label;
2092
2249
 
2093
2250
        if (address_label)
2094
 
                new_address_label = g_strjoin (newline ? "\n" : ", ", address_label, part, NULL);
 
2251
                new_address_label = g_strjoin (
 
2252
                        newline ? "\n" : ", ",
 
2253
                        address_label, part, NULL);
2095
2254
        else
2096
2255
                new_address_label = g_strdup (part);
2097
2256
 
2100
2259
}
2101
2260
 
2102
2261
static void
2103
 
set_address_label (EContact *contact, EContactField field, EContactAddress *address)
 
2262
set_address_label (EContact *contact,
 
2263
                   EContactField field,
 
2264
                   EContactAddress *address)
2104
2265
{
2105
2266
        gchar *address_label = NULL;
2106
2267
 
2107
 
        if (address) {
2108
 
                address_label = append_to_address_label (address_label, address->street, TRUE);
2109
 
                address_label = append_to_address_label (address_label, address->ext, TRUE);
2110
 
                address_label = append_to_address_label (address_label, address->locality, TRUE);
2111
 
                address_label = append_to_address_label (address_label, address->region, FALSE);
2112
 
                address_label = append_to_address_label (address_label, address->code, TRUE);
2113
 
                address_label = append_to_address_label (address_label, address->po, TRUE);
2114
 
                address_label = append_to_address_label (address_label, address->country, TRUE);
 
2268
        if (!address) {
 
2269
                e_contact_set (contact, field, NULL);
 
2270
                return;
 
2271
        }
 
2272
 
 
2273
        address_label = eab_format_address (contact,
 
2274
                                (field == E_CONTACT_ADDRESS_LABEL_WORK) ? E_CONTACT_ADDRESS_WORK :
 
2275
                                                                          E_CONTACT_ADDRESS_HOME);
 
2276
 
 
2277
        if (!address_label) {
 
2278
                address_label = append_to_address_label (
 
2279
                        address_label, address->street, TRUE);
 
2280
                address_label = append_to_address_label (
 
2281
                        address_label, address->ext, TRUE);
 
2282
                address_label = append_to_address_label (
 
2283
                        address_label, address->locality, TRUE);
 
2284
                address_label = append_to_address_label (
 
2285
                        address_label, address->region, FALSE);
 
2286
                address_label = append_to_address_label (
 
2287
                        address_label, address->code, TRUE);
 
2288
                address_label = append_to_address_label (
 
2289
                        address_label, address->po, TRUE);
 
2290
                address_label = append_to_address_label (
 
2291
                        address_label, address->country, TRUE);
2115
2292
        }
2116
2293
 
2117
2294
        e_contact_set (contact, field, address_label);
2160
2337
}
2161
2338
 
2162
2339
static void
2163
 
sensitize_address_textview (EContactEditor *editor, gint record, gboolean enabled)
 
2340
sensitize_address_textview (EContactEditor *editor,
 
2341
                            gint record,
 
2342
                            gboolean enabled)
2164
2343
{
2165
2344
        gchar         *widget_name;
2166
2345
        GtkWidget     *textview;
2188
2367
        GtkWidget *entry;
2189
2368
        GtkWidget *label;
2190
2369
 
2191
 
        widget_name = g_strdup_printf ("entry-%s-%s", address_name [record], widget_field_name);
 
2370
        widget_name = g_strdup_printf (
 
2371
                "entry-%s-%s", address_name [record], widget_field_name);
2192
2372
        entry = e_builder_get_widget (editor->builder, widget_name);
2193
2373
        g_free (widget_name);
2194
2374
 
2195
 
        widget_name = g_strdup_printf ("label-%s-%s", address_name [record], widget_field_name);
 
2375
        widget_name = g_strdup_printf (
 
2376
                "label-%s-%s", address_name [record], widget_field_name);
2196
2377
        label = e_builder_get_widget (editor->builder, widget_name);
2197
2378
        g_free (widget_name);
2198
2379
 
2316
2497
 
2317
2498
        if (GTK_IS_ENTRY (widget)) {
2318
2499
                changed_object = G_OBJECT (widget);
2319
 
                g_signal_connect_swapped (widget, "activate", G_CALLBACK (entry_activated), editor);
2320
 
        }
2321
 
        else if (GTK_IS_COMBO_BOX (widget)) {
2322
 
                changed_object = G_OBJECT (/*gtk_bin_get_child (GTK_BIN*/ (widget)/*)*/);
2323
 
                g_signal_connect_swapped (gtk_bin_get_child (GTK_BIN (widget)), "activate", G_CALLBACK (entry_activated), editor);
2324
 
        }
2325
 
        else if (GTK_IS_TEXT_VIEW (widget)) {
2326
 
                changed_object = G_OBJECT (gtk_text_view_get_buffer (GTK_TEXT_VIEW (widget)));
2327
 
        }
2328
 
        else if (E_IS_URL_ENTRY (widget)) {
2329
 
                changed_object = G_OBJECT (e_url_entry_get_entry (E_URL_ENTRY (widget)));
 
2500
                g_signal_connect_swapped (
 
2501
                        widget, "activate",
 
2502
                        G_CALLBACK (entry_activated), editor);
 
2503
        } else if (GTK_IS_COMBO_BOX (widget)) {
 
2504
                changed_object = G_OBJECT (widget);
 
2505
                g_signal_connect_swapped (
 
2506
                        gtk_bin_get_child (GTK_BIN (widget)), "activate",
 
2507
                        G_CALLBACK (entry_activated), editor);
 
2508
        } else if (GTK_IS_TEXT_VIEW (widget)) {
 
2509
                changed_object = G_OBJECT (
 
2510
                        gtk_text_view_get_buffer (GTK_TEXT_VIEW (widget)));
 
2511
        } else if (E_IS_URL_ENTRY (widget)) {
 
2512
                changed_object = G_OBJECT (
 
2513
                        e_url_entry_get_entry (E_URL_ENTRY (widget)));
2330
2514
                g_signal_connect_swapped (
2331
2515
                        changed_object, "activate",
2332
2516
                        G_CALLBACK (entry_activated), editor);
2333
 
        }
2334
 
        else if (E_IS_DATE_EDIT (widget)) {
2335
 
                changed_object = G_OBJECT (widget);
2336
 
        }
2337
 
        else if (E_IS_IMAGE_CHOOSER (widget)) {
2338
 
                changed_object = G_OBJECT (widget);
2339
 
                g_signal_connect (widget, "changed", G_CALLBACK (image_chooser_changed), editor);
2340
 
        }
2341
 
        else if (GTK_IS_TOGGLE_BUTTON (widget)) {
2342
 
                g_signal_connect (widget, "toggled", G_CALLBACK (object_changed), editor);
 
2517
        } else if (E_IS_DATE_EDIT (widget)) {
 
2518
                changed_object = G_OBJECT (widget);
 
2519
        } else if (E_IS_IMAGE_CHOOSER (widget)) {
 
2520
                changed_object = G_OBJECT (widget);
 
2521
                g_signal_connect (
 
2522
                        widget, "changed",
 
2523
                        G_CALLBACK (image_chooser_changed), editor);
 
2524
        } else if (GTK_IS_TOGGLE_BUTTON (widget)) {
 
2525
                g_signal_connect (
 
2526
                        widget, "toggled",
 
2527
                        G_CALLBACK (object_changed), editor);
2343
2528
        }
2344
2529
 
2345
2530
        if (changed_object)
2346
 
                g_signal_connect (changed_object, "changed", G_CALLBACK (object_changed), editor);
 
2531
                g_signal_connect (
 
2532
                        changed_object, "changed",
 
2533
                        G_CALLBACK (object_changed), editor);
2347
2534
}
2348
2535
 
2349
2536
static void
2363
2550
        }
2364
2551
        else if (GTK_IS_COMBO_BOX (widget)) {
2365
2552
                gchar *text = e_contact_get (contact, field_id);
2366
 
                gtk_entry_set_text (GTK_ENTRY (gtk_bin_get_child (GTK_BIN (widget))), STRING_MAKE_NON_NULL (text));
 
2553
                gtk_entry_set_text (
 
2554
                        GTK_ENTRY (gtk_bin_get_child (GTK_BIN (widget))),
 
2555
                        STRING_MAKE_NON_NULL (text));
2367
2556
                g_free (text);
2368
2557
        }
2369
2558
        else if (GTK_IS_TEXT_VIEW (widget)) {
2392
2581
        else if (E_IS_IMAGE_CHOOSER (widget)) {
2393
2582
                EContactPhoto *photo = e_contact_get (contact, field_id);
2394
2583
                if (photo && photo->type == E_CONTACT_PHOTO_TYPE_INLINED) {
2395
 
                        e_image_chooser_set_image_data (E_IMAGE_CHOOSER (widget),
2396
 
                                                        (gchar *)photo->data.inlined.data,
2397
 
                                                        photo->data.inlined.length);
 
2584
                        e_image_chooser_set_image_data (
 
2585
                                E_IMAGE_CHOOSER (widget),
 
2586
                                (gchar *) photo->data.inlined.data,
 
2587
                                photo->data.inlined.length);
2398
2588
                        editor->image_set = TRUE;
2399
2589
                }
2400
2590
                else {
2401
 
                        gchar *file_name = e_icon_factory_get_icon_filename ("avatar-default", GTK_ICON_SIZE_DIALOG);
2402
 
                        e_image_chooser_set_from_file (E_IMAGE_CHOOSER (widget), file_name);
 
2591
                        gchar *file_name;
 
2592
 
 
2593
                        file_name = e_icon_factory_get_icon_filename (
 
2594
                                "avatar-default", GTK_ICON_SIZE_DIALOG);
 
2595
                        e_image_chooser_set_from_file (
 
2596
                                E_IMAGE_CHOOSER (widget), file_name);
2403
2597
                        editor->image_set = FALSE;
2404
2598
                        g_free (file_name);
2405
2599
                }
2442
2636
                gchar *text = NULL;
2443
2637
 
2444
2638
                if (gtk_combo_box_get_active_iter (GTK_COMBO_BOX (widget), &iter)) {
2445
 
                        GtkListStore *store = GTK_LIST_STORE (gtk_combo_box_get_model (GTK_COMBO_BOX (widget)));
 
2639
                        GtkListStore *store;
 
2640
 
 
2641
                        store = GTK_LIST_STORE (
 
2642
                                gtk_combo_box_get_model (
 
2643
                                GTK_COMBO_BOX (widget)));
2446
2644
 
2447
2645
                        gtk_tree_model_get (GTK_TREE_MODEL (store), &iter,
2448
2646
                                0, &text,
2494
2692
                                GdkPixbuf *pixbuf, *new;
2495
2693
                                GdkPixbufLoader *loader = gdk_pixbuf_loader_new ();
2496
2694
 
2497
 
                                photo.data.inlined.data = (guchar *)img_buff;
 
2695
                                photo.data.inlined.data = (guchar *) img_buff;
2498
2696
                                img_buff = NULL;
2499
 
                                gdk_pixbuf_loader_write (loader, photo.data.inlined.data, photo.data.inlined.length, NULL);
 
2697
                                gdk_pixbuf_loader_write (
 
2698
                                        loader,
 
2699
                                        photo.data.inlined.data,
 
2700
                                        photo.data.inlined.length, NULL);
2500
2701
                                gdk_pixbuf_loader_close (loader, NULL);
2501
2702
 
2502
2703
                                pixbuf = gdk_pixbuf_loader_get_pixbuf (loader);
2526
2727
 
2527
2728
                                                        new = e_icon_factory_pixbuf_scale (pixbuf, width, height);
2528
2729
                                                        if (new) {
2529
 
                                                                GdkPixbufFormat *format = gdk_pixbuf_loader_get_format (loader);
2530
 
                                                                gchar *format_name = gdk_pixbuf_format_get_name (format);
 
2730
                                                                GdkPixbufFormat *format =
 
2731
                                                                        gdk_pixbuf_loader_get_format (loader);
 
2732
                                                                gchar *format_name =
 
2733
                                                                        gdk_pixbuf_format_get_name (format);
2531
2734
                                                                g_free (photo.data.inlined.data);
2532
 
                                                                gdk_pixbuf_save_to_buffer (new, &img_buff,
2533
 
                                                                                           &photo.data.inlined.length,
2534
 
                                                                                           format_name, NULL, NULL);
2535
 
                                                                photo.data.inlined.data = (guchar *)img_buff;
 
2735
                                                                gdk_pixbuf_save_to_buffer (
 
2736
                                                                        new, &img_buff,
 
2737
                                                                        &photo.data.inlined.length,
 
2738
                                                                        format_name, NULL, NULL);
 
2739
                                                                photo.data.inlined.data = (guchar *) img_buff;
2536
2740
                                                                img_buff = NULL;
2537
2741
                                                                g_free (format_name);
2538
2742
                                                                g_object_unref (new);
2563
2767
        else if (GTK_IS_TOGGLE_BUTTON (widget)) {
2564
2768
                gboolean val = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
2565
2769
 
2566
 
                e_contact_set (contact, field_id, val?(gpointer)1:NULL);
 
2770
                e_contact_set (contact, field_id, val?(gpointer) 1:NULL);
2567
2771
        }
2568
2772
        else {
2569
2773
                g_warning (G_STRLOC ": Unhandled widget class in mappings!");
2594
2798
        gint       i;
2595
2799
 
2596
2800
        for (i = 0; i < G_N_ELEMENTS (simple_field_map); i++) {
2597
 
                widget = e_builder_get_widget (editor->builder, simple_field_map[i].widget_name);
 
2801
                widget = e_builder_get_widget (
 
2802
                        editor->builder, simple_field_map[i].widget_name);
2598
2803
                if (!widget)
2599
2804
                        continue;
2600
2805
 
2628
2833
                    !simple_field_map[i].process_data)
2629
2834
                        continue;
2630
2835
 
2631
 
                widget = e_builder_get_widget (editor->builder, simple_field_map[i].widget_name);
 
2836
                widget = e_builder_get_widget (
 
2837
                        editor->builder, simple_field_map[i].widget_name);
2632
2838
                if (!widget)
2633
2839
                        continue;
2634
2840
 
2677
2883
                    !simple_field_map[i].process_data)
2678
2884
                        continue;
2679
2885
 
2680
 
                widget = e_builder_get_widget (editor->builder, simple_field_map[i].widget_name);
 
2886
                widget = e_builder_get_widget (
 
2887
                        editor->builder, simple_field_map[i].widget_name);
2681
2888
                if (!widget)
2682
2889
                        continue;
2683
2890
 
2698
2905
                GtkWidget *widget;
2699
2906
                gboolean   enabled = TRUE;
2700
2907
 
2701
 
                widget = e_builder_get_widget (editor->builder, simple_field_map[i].widget_name);
 
2908
                widget = e_builder_get_widget (
 
2909
                        editor->builder, simple_field_map[i].widget_name);
2702
2910
                if (!widget)
2703
2911
                        continue;
2704
2912
 
2920
3128
categories_response (GtkDialog *dialog, gint response, EContactEditor *editor)
2921
3129
{
2922
3130
        const gchar *categories;
2923
 
        GtkWidget *entry = e_builder_get_widget(editor->builder, "entry-categories");
 
3131
        GtkWidget *entry;
 
3132
 
 
3133
        entry = e_builder_get_widget (editor->builder, "entry-categories");
2924
3134
 
2925
3135
        if (response == GTK_RESPONSE_OK) {
2926
 
                categories = e_categories_dialog_get_categories (E_CATEGORIES_DIALOG (dialog));
2927
 
                if (entry && GTK_IS_ENTRY (entry))
2928
 
                        gtk_entry_set_text (GTK_ENTRY (entry), categories);
 
3136
                categories = e_categories_dialog_get_categories (
 
3137
                        E_CATEGORIES_DIALOG (dialog));
 
3138
                if (GTK_IS_ENTRY (entry))
 
3139
                        gtk_entry_set_text (
 
3140
                                GTK_ENTRY (entry), categories);
2929
3141
                else
2930
 
                        e_contact_set (editor->contact, E_CONTACT_CATEGORIES, (gchar *)categories);
 
3142
                        e_contact_set (
 
3143
                                editor->contact,
 
3144
                                E_CONTACT_CATEGORIES,
 
3145
                                (gchar *) categories);
2931
3146
        }
 
3147
 
2932
3148
        gtk_widget_destroy (GTK_WIDGET (dialog));
2933
3149
        editor->categories_dialog = NULL;
2934
3150
}
2987
3203
        gchar     *file_name;
2988
3204
        GtkWidget *image_chooser;
2989
3205
 
2990
 
        file_name = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (editor->file_selector));
 
3206
        file_name = gtk_file_chooser_get_filename (
 
3207
                GTK_FILE_CHOOSER (editor->file_selector));
2991
3208
 
2992
3209
        if (!file_name)
2993
3210
                return;
3009
3226
        GtkWidget *image_chooser;
3010
3227
        gchar     *file_name;
3011
3228
 
3012
 
        image_chooser = e_builder_get_widget (editor->builder, "image-chooser");
3013
 
 
3014
 
        file_name = e_icon_factory_get_icon_filename ("avatar-default", GTK_ICON_SIZE_DIALOG);
3015
 
 
3016
 
        g_signal_handlers_block_by_func (image_chooser, image_chooser_changed, editor);
3017
 
        e_image_chooser_set_from_file (E_IMAGE_CHOOSER (image_chooser), file_name);
3018
 
        g_signal_handlers_unblock_by_func (image_chooser, image_chooser_changed, editor);
 
3229
        image_chooser = e_builder_get_widget (
 
3230
                editor->builder, "image-chooser");
 
3231
 
 
3232
        file_name = e_icon_factory_get_icon_filename (
 
3233
                "avatar-default", GTK_ICON_SIZE_DIALOG);
 
3234
 
 
3235
        g_signal_handlers_block_by_func (
 
3236
                image_chooser, image_chooser_changed, editor);
 
3237
        e_image_chooser_set_from_file (
 
3238
                E_IMAGE_CHOOSER (image_chooser), file_name);
 
3239
        g_signal_handlers_unblock_by_func (
 
3240
                image_chooser, image_chooser_changed, editor);
3019
3241
 
3020
3242
        g_free (file_name);
3021
3243
 
3058
3280
        pixbuf = gdk_pixbuf_new_from_file_at_size (filename, 128, 128, NULL);
3059
3281
        if (!pixbuf) {
3060
3282
                gchar *alternate_file;
3061
 
                alternate_file = e_icon_factory_get_icon_filename ("avatar-default", GTK_ICON_SIZE_DIALOG);
 
3283
                alternate_file = e_icon_factory_get_icon_filename (
 
3284
                        "avatar-default", GTK_ICON_SIZE_DIALOG);
3062
3285
                if (alternate_file) {
3063
 
                        pixbuf = gdk_pixbuf_new_from_file_at_size (alternate_file, 128, 128, NULL);
 
3286
                        pixbuf = gdk_pixbuf_new_from_file_at_size (
 
3287
                                alternate_file, 128, 128, NULL);
3064
3288
                        g_free (alternate_file);
3065
3289
                }
3066
3290
        }
3087
3311
                        no_image, GTK_RESPONSE_NO,
3088
3312
                        NULL);
3089
3313
                preview = GTK_IMAGE (gtk_image_new ());
3090
 
                gtk_file_chooser_set_preview_widget ((GtkFileChooser *)editor->file_selector, GTK_WIDGET (preview));
 
3314
                gtk_file_chooser_set_preview_widget (
 
3315
                        GTK_FILE_CHOOSER (editor->file_selector),
 
3316
                        GTK_WIDGET (preview));
3091
3317
                g_signal_connect (
3092
3318
                        editor->file_selector, "update-preview",
3093
3319
                        G_CALLBACK (update_preview_cb), preview);
3094
 
                gtk_dialog_set_default_response (GTK_DIALOG (editor->file_selector), GTK_RESPONSE_ACCEPT);
 
3320
                gtk_dialog_set_default_response (
 
3321
                        GTK_DIALOG (editor->file_selector),
 
3322
                        GTK_RESPONSE_ACCEPT);
3095
3323
 
3096
 
                gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (editor->file_selector), g_get_home_dir ());
 
3324
                gtk_file_chooser_set_current_folder (
 
3325
                        GTK_FILE_CHOOSER (editor->file_selector),
 
3326
                        g_get_home_dir ());
3097
3327
 
3098
3328
                g_signal_connect (
3099
3329
                        editor->file_selector, "response",
3151
3381
}
3152
3382
 
3153
3383
static void
3154
 
contact_added_cb (EBook *book, const GError *error, const gchar *id, EditorCloseStruct *ecs)
 
3384
contact_added_cb (EBook *book,
 
3385
                  const GError *error,
 
3386
                  const gchar *id,
 
3387
                  EditorCloseStruct *ecs)
3155
3388
{
3156
3389
        EContactEditor *ce = ecs->ce;
3157
3390
        gboolean should_close = ecs->should_close;
3238
3471
                        eab_merging_book_add_contact (
3239
3472
                                ce->target_book, ce->contact,
3240
3473
                                (EBookIdAsyncCallback) contact_added_cb, ecs);
3241
 
                else
 
3474
                else if (ce->check_merge)
3242
3475
                        eab_merging_book_commit_contact (
3243
3476
                                ce->target_book, ce->contact,
3244
3477
                                (EBookAsyncCallback) contact_modified_cb, ecs);
 
3478
                else
 
3479
                        e_book_commit_contact_async (ce->target_book, ce->contact,
 
3480
                                (EBookAsyncCallback) contact_modified_cb, ecs);
3245
3481
        }
3246
3482
}
3247
3483
 
3264
3500
        }
3265
3501
 
3266
3502
        entry_fullname = e_builder_get_widget (ce->builder, "entry-fullname" );
3267
 
        entry_file_as = gtk_bin_get_child (GTK_BIN (e_builder_get_widget (ce->builder, "combo-file-as")));
 
3503
        entry_file_as = gtk_bin_get_child (
 
3504
                GTK_BIN (e_builder_get_widget (ce->builder, "combo-file-as")));
3268
3505
        company_name = e_builder_get_widget (ce->builder, "entry-company");
3269
3506
        name_entry_string = gtk_entry_get_text (GTK_ENTRY (entry_fullname));
3270
3507
        file_as_entry_string = gtk_entry_get_text (GTK_ENTRY (entry_file_as));
3610
3847
 
3611
3848
        e_contact_editor->contact = NULL;
3612
3849
        e_contact_editor->changed = FALSE;
 
3850
        e_contact_editor->check_merge = FALSE;
3613
3851
        e_contact_editor->image_set = FALSE;
3614
3852
        e_contact_editor->image_changed = FALSE;
3615
3853
        e_contact_editor->in_async_call = FALSE;
3629
3867
        widget = e_contact_editor->app;
3630
3868
 
3631
3869
        gtk_widget_ensure_style (widget);
3632
 
        gtk_window_set_type_hint (GTK_WINDOW (widget), GDK_WINDOW_TYPE_HINT_NORMAL);
 
3870
        gtk_window_set_type_hint (
 
3871
                GTK_WINDOW (widget), GDK_WINDOW_TYPE_HINT_NORMAL);
3633
3872
        container = gtk_dialog_get_action_area (GTK_DIALOG (widget));
3634
3873
        gtk_container_set_border_width (GTK_CONTAINER (container), 12);
3635
3874
        container = gtk_dialog_get_content_area (GTK_DIALOG (widget));
3637
3876
 
3638
3877
        init_all (e_contact_editor);
3639
3878
 
3640
 
        widget = e_builder_get_widget (e_contact_editor->builder, "button-image");
3641
 
        g_signal_connect (widget, "clicked", G_CALLBACK (image_clicked), e_contact_editor);
3642
 
 
3643
 
        widget = e_builder_get_widget(e_contact_editor->builder, "button-fullname");
3644
 
        g_signal_connect (widget, "clicked", G_CALLBACK (full_name_clicked), e_contact_editor);
3645
 
        widget = e_builder_get_widget(e_contact_editor->builder, "button-categories");
3646
 
        g_signal_connect (widget, "clicked", G_CALLBACK (categories_clicked), e_contact_editor);
3647
 
        widget = e_builder_get_widget (e_contact_editor->builder, "source-combo-box-source");
3648
 
        e_util_set_source_combo_box_list (widget, "/apps/evolution/addressbook/sources");
3649
 
        g_signal_connect (widget, "changed", G_CALLBACK (source_changed), e_contact_editor);
3650
 
        label = e_builder_get_widget (e_contact_editor->builder, "where-label");
 
3879
        widget = e_builder_get_widget (
 
3880
                e_contact_editor->builder, "button-image");
 
3881
        g_signal_connect (
 
3882
                widget, "clicked",
 
3883
                G_CALLBACK (image_clicked), e_contact_editor);
 
3884
        widget = e_builder_get_widget (
 
3885
                e_contact_editor->builder, "button-fullname");
 
3886
        g_signal_connect (
 
3887
                widget, "clicked",
 
3888
                G_CALLBACK (full_name_clicked), e_contact_editor);
 
3889
        widget = e_builder_get_widget (
 
3890
                e_contact_editor->builder, "button-categories");
 
3891
        g_signal_connect (
 
3892
                widget, "clicked",
 
3893
                G_CALLBACK (categories_clicked), e_contact_editor);
 
3894
        widget = e_builder_get_widget (
 
3895
                e_contact_editor->builder, "source-combo-box-source");
 
3896
        e_util_set_source_combo_box_list (
 
3897
                widget, "/apps/evolution/addressbook/sources");
 
3898
        g_signal_connect (
 
3899
                widget, "changed",
 
3900
                G_CALLBACK (source_changed), e_contact_editor);
 
3901
        label = e_builder_get_widget (
 
3902
                e_contact_editor->builder, "where-label");
3651
3903
        gtk_label_set_mnemonic_widget (GTK_LABEL (label), widget);
3652
 
        widget = e_builder_get_widget (e_contact_editor->builder, "button-ok");
3653
 
        g_signal_connect (widget, "clicked", G_CALLBACK (file_save_and_close_cb), e_contact_editor);
3654
 
        widget = e_builder_get_widget (e_contact_editor->builder, "button-cancel");
3655
 
        g_signal_connect (widget, "clicked", G_CALLBACK (file_cancel_cb), e_contact_editor);
3656
 
        widget = e_builder_get_widget (e_contact_editor->builder, "button-help");
3657
 
        g_signal_connect (widget, "clicked", G_CALLBACK (show_help_cb), e_contact_editor);
3658
 
        widget = e_builder_get_widget (e_contact_editor->builder, "button-web-expand");
3659
 
        g_signal_connect_swapped (widget, "clicked", G_CALLBACK (expand_web_toggle), e_contact_editor);
3660
 
        widget = e_builder_get_widget (e_contact_editor->builder, "button-phone-expand");
3661
 
        g_signal_connect_swapped (widget, "clicked", G_CALLBACK (expand_phone_toggle), e_contact_editor);
3662
 
        widget = e_builder_get_widget (e_contact_editor->builder, "button-mail-expand");
3663
 
        g_signal_connect_swapped (widget, "clicked", G_CALLBACK (expand_mail_toggle), e_contact_editor);
 
3904
        widget = e_builder_get_widget (
 
3905
                e_contact_editor->builder, "button-ok");
 
3906
        g_signal_connect (
 
3907
                widget, "clicked",
 
3908
                G_CALLBACK (file_save_and_close_cb), e_contact_editor);
 
3909
        widget = e_builder_get_widget (
 
3910
                e_contact_editor->builder, "button-cancel");
 
3911
        g_signal_connect (
 
3912
                widget, "clicked",
 
3913
                G_CALLBACK (file_cancel_cb), e_contact_editor);
 
3914
        widget = e_builder_get_widget (
 
3915
                e_contact_editor->builder, "button-help");
 
3916
        g_signal_connect (
 
3917
                widget, "clicked",
 
3918
                G_CALLBACK (show_help_cb), e_contact_editor);
 
3919
        widget = e_builder_get_widget (
 
3920
                e_contact_editor->builder, "button-web-expand");
 
3921
        g_signal_connect_swapped (
 
3922
                widget, "clicked",
 
3923
                G_CALLBACK (expand_web_toggle), e_contact_editor);
 
3924
        widget = e_builder_get_widget (
 
3925
                e_contact_editor->builder, "button-phone-expand");
 
3926
        g_signal_connect_swapped (
 
3927
                widget, "clicked",
 
3928
                G_CALLBACK (expand_phone_toggle), e_contact_editor);
 
3929
        widget = e_builder_get_widget (
 
3930
                e_contact_editor->builder, "button-mail-expand");
 
3931
        g_signal_connect_swapped (
 
3932
                widget, "clicked",
 
3933
                G_CALLBACK (expand_mail_toggle), e_contact_editor);
3664
3934
 
3665
3935
        widget = e_builder_get_widget (e_contact_editor->builder, "entry-fullname");
3666
3936
        if (widget)
3715
3985
        }
3716
3986
 
3717
3987
        if (e_contact_editor->target_book) {
3718
 
                g_signal_handler_disconnect (e_contact_editor->target_book, e_contact_editor->target_editable_id);
 
3988
                g_signal_handler_disconnect (
 
3989
                        e_contact_editor->target_book,
 
3990
                        e_contact_editor->target_editable_id);
3719
3991
                g_object_unref (e_contact_editor->target_book);
3720
3992
                e_contact_editor->target_book = NULL;
3721
3993
        }
3746
4018
                     EContactEditor *ce)
3747
4019
{
3748
4020
        if (!g_slist_find (eab_editor_get_all_editors (), ce)) {
3749
 
                g_warning ("supported_fields_cb called for book that's still around, but contact editor that's been destroyed.");
 
4021
                g_warning (
 
4022
                        "supported_fields_cb called for book that's still "
 
4023
                        "around, but contact editor that's been destroyed.");
3750
4024
                return;
3751
4025
        }
3752
4026
 
3765
4039
{
3766
4040
 
3767
4041
        if (!g_slist_find (eab_editor_get_all_editors (), ce)) {
3768
 
                g_warning ("supported_fields_cb called for book that's still around, but contact editor that's been destroyed.");
 
4042
                g_warning (
 
4043
                        "supported_fields_cb called for book that's still "
 
4044
                        "around, but contact editor that's been destroyed.");
3769
4045
                return;
3770
4046
        }
3771
4047
 
3798
4074
 
3799
4075
        if (book)
3800
4076
                e_book_get_supported_fields_async (
3801
 
                        book, (EBookEListAsyncCallback)supported_fields_cb, editor);
 
4077
                        book, (EBookEListAsyncCallback)
 
4078
                        supported_fields_cb, editor);
3802
4079
 
3803
4080
        return editor;
3804
4081
}
3821
4098
}
3822
4099
 
3823
4100
static void
3824
 
e_contact_editor_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
 
4101
e_contact_editor_set_property (GObject *object,
 
4102
                               guint prop_id,
 
4103
                               const GValue *value,
 
4104
                               GParamSpec *pspec)
3825
4105
{
3826
4106
        EContactEditor *editor;
3827
4107
 
3885
4165
                        break;
3886
4166
 
3887
4167
                if (editor->target_book) {
3888
 
                        g_signal_handler_disconnect (editor->target_book, editor->target_editable_id);
 
4168
                        g_signal_handler_disconnect (
 
4169
                                editor->target_book,
 
4170
                                editor->target_editable_id);
3889
4171
                        g_object_unref (editor->target_book);
3890
4172
                }
3891
4173
 
3930
4212
                break;
3931
4213
 
3932
4214
        case PROP_IS_NEW_CONTACT:
3933
 
                editor->is_new_contact = g_value_get_boolean (value) ? TRUE : FALSE;
 
4215
                editor->is_new_contact = g_value_get_boolean (value);
3934
4216
                break;
3935
4217
 
3936
4218
        case PROP_EDITABLE: {
3937
 
                gboolean new_value = g_value_get_boolean (value) ? TRUE : FALSE;
 
4219
                gboolean new_value = g_value_get_boolean (value);
3938
4220
                gboolean changed = (editor->target_editable != new_value);
3939
4221
 
3940
4222
                editor->target_editable = new_value;
3945
4227
        }
3946
4228
 
3947
4229
        case PROP_CHANGED: {
3948
 
                gboolean new_value = g_value_get_boolean (value) ? TRUE : FALSE;
 
4230
                gboolean new_value = g_value_get_boolean (value);
3949
4231
                gboolean changed = (editor->changed != new_value);
3950
4232
 
3951
4233
                editor->changed = new_value;
3982
4264
}
3983
4265
 
3984
4266
static void
3985
 
e_contact_editor_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
 
4267
e_contact_editor_get_property (GObject *object,
 
4268
                               guint prop_id,
 
4269
                               GValue *value,
 
4270
                               GParamSpec *pspec)
3986
4271
{
3987
4272
        EContactEditor *e_contact_editor;
3988
4273
 
4003
4288
                break;
4004
4289
 
4005
4290
        case PROP_IS_NEW_CONTACT:
4006
 
                g_value_set_boolean (value, e_contact_editor->is_new_contact ? TRUE : FALSE);
 
4291
                g_value_set_boolean (
 
4292
                        value, e_contact_editor->is_new_contact);
4007
4293
                break;
4008
4294
 
4009
4295
        case PROP_EDITABLE:
4010
 
                g_value_set_boolean (value, e_contact_editor->target_editable ? TRUE : FALSE);
 
4296
                g_value_set_boolean (
 
4297
                        value, e_contact_editor->target_editable);
4011
4298
                break;
4012
4299
 
4013
4300
        case PROP_CHANGED:
4014
 
                g_value_set_boolean (value, e_contact_editor->changed ? TRUE : FALSE);
 
4301
                g_value_set_boolean (
 
4302
                        value, e_contact_editor->changed);
4015
4303
                break;
4016
4304
 
4017
4305
        case PROP_WRITABLE_FIELDS:
4018
4306
                if (e_contact_editor->writable_fields)
4019
 
                        g_value_set_object (value, e_list_duplicate (e_contact_editor->writable_fields));
 
4307
                        g_value_set_object (
 
4308
                                value, e_list_duplicate (
 
4309
                                e_contact_editor->writable_fields));
4020
4310
                else
4021
4311
                        g_value_set_object (value, NULL);
4022
4312
                break;
4023
4313
        case PROP_REQUIRED_FIELDS:
4024
4314
                if (e_contact_editor->required_fields)
4025
 
                        g_value_set_object (value, e_list_duplicate (e_contact_editor->required_fields));
 
4315
                        g_value_set_object (
 
4316
                                value, e_list_duplicate (
 
4317
                                e_contact_editor->required_fields));
4026
4318
                else
4027
4319
                        g_value_set_object (value, NULL);
4028
4320
                break;