Hello.

I'm Christian Hammond, from the Gaim project. I'm working on one of
the gaim<->evolution bounties, and have a couple of patches for your
review and, hopefully, acceptance into CVS.

The first patch adds the ability to set data types of
E_CONTACT_FIELD_TYPE_LIST in evolution-data-server.

The second patch adds fields to the Contact Editor window in evolution
so that a person's AIM, ICQ, Yahoo, MSN, and Jabber accounts can be
set.

Let me know if you'd like me to make any changes.

Thank you.

Christian

-- 
Christian Hammond         <>  The GNUpdate Project
[EMAIL PROTECTED]      <>  http://www.gnupdate.org/
   A seminar on time travel will be held two weeks ago.
Index: addressbook/libebook/e-contact.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/addressbook/libebook/e-contact.c,v
retrieving revision 1.3
diff -u -r1.3 e-contact.c
--- addressbook/libebook/e-contact.c    10 Nov 2003 17:18:56 -0000      1.3
+++ addressbook/libebook/e-contact.c    23 Nov 2003 22:53:26 -0000
@@ -761,6 +761,25 @@
 
                info->struct_setter (contact, attr, data);
        }
+       else if (info->t & E_CONTACT_FIELD_TYPE_LIST) {
+               EVCardAttribute *attr;
+               GList *values, *l;
+
+               attr = e_contact_get_first_attr (contact, info->vcard_field_name);
+
+               if (attr) {
+                       e_vcard_attribute_remove_values (attr);
+               }
+               else {
+                       attr = e_vcard_attribute_new (NULL, info->vcard_field_name);
+                       e_vcard_add_attribute (E_VCARD (contact), attr);
+               }
+
+               values = g_value_get_pointer (value);
+
+               for (l = values; l != NULL; l = l->next)
+                       e_vcard_attribute_add_value (attr, l->data);
+       }
        else {
                g_warning ("unhandled attribute `%s'", info->vcard_field_name);
        }
Index: addressbook/gui/contact-editor/contact-editor.glade
===================================================================
RCS file: /cvs/gnome/evolution/addressbook/gui/contact-editor/contact-editor.glade,v
retrieving revision 1.41
diff -u -r1.41 contact-editor.glade
--- addressbook/gui/contact-editor/contact-editor.glade 21 Oct 2003 18:48:44 -0000     
 1.41
+++ addressbook/gui/contact-editor/contact-editor.glade 23 Nov 2003 22:51:36 -0000
@@ -328,7 +328,7 @@
            <widget class="GtkTable" id="table-contact-editor-general">
              <property name="border_width">6</property>
              <property name="visible">True</property>
-             <property name="n_rows">14</property>
+             <property name="n_rows">15</property>
              <property name="n_columns">8</property>
              <property name="homogeneous">False</property>
              <property name="row_spacing">6</property>
@@ -466,8 +466,8 @@
                <packing>
                  <property name="left_attach">2</property>
                  <property name="right_attach">3</property>
-                 <property name="top_attach">5</property>
-                 <property name="bottom_attach">6</property>
+                 <property name="top_attach">6</property>
+                 <property name="bottom_attach">7</property>
                  <property name="x_options">fill</property>
                  <property name="y_options">fill</property>
                </packing>
@@ -591,8 +591,8 @@
                <packing>
                  <property name="left_attach">4</property>
                  <property name="right_attach">8</property>
-                 <property name="top_attach">4</property>
-                 <property name="bottom_attach">5</property>
+                 <property name="top_attach">5</property>
+                 <property name="bottom_attach">6</property>
                  <property name="y_padding">2</property>
                  <property name="y_options"></property>
                </packing>
@@ -716,8 +716,8 @@
                <packing>
                  <property name="left_attach">3</property>
                  <property name="right_attach">4</property>
-                 <property name="top_attach">5</property>
-                 <property name="bottom_attach">6</property>
+                 <property name="top_attach">6</property>
+                 <property name="bottom_attach">7</property>
                  <property name="y_options"></property>
                </packing>
              </child>
@@ -729,8 +729,8 @@
                <packing>
                  <property name="left_attach">0</property>
                  <property name="right_attach">4</property>
-                 <property name="top_attach">4</property>
-                 <property name="bottom_attach">5</property>
+                 <property name="top_attach">5</property>
+                 <property name="bottom_attach">6</property>
                  <property name="y_padding">2</property>
                  <property name="y_options"></property>
                </packing>
@@ -804,8 +804,8 @@
                <packing>
                  <property name="left_attach">0</property>
                  <property name="right_attach">4</property>
-                 <property name="top_attach">7</property>
-                 <property name="bottom_attach">8</property>
+                 <property name="top_attach">8</property>
+                 <property name="bottom_attach">9</property>
                  <property name="y_padding">2</property>
                  <property name="y_options">fill</property>
                </packing>
@@ -835,8 +835,8 @@
                <packing>
                  <property name="left_attach">3</property>
                  <property name="right_attach">4</property>
-                 <property name="top_attach">6</property>
-                 <property name="bottom_attach">7</property>
+                 <property name="top_attach">7</property>
+                 <property name="bottom_attach">8</property>
                  <property name="x_options">expand|shrink|fill</property>
                  <property name="y_options">shrink|fill</property>
                </packing>
@@ -872,8 +872,8 @@
                <packing>
                  <property name="left_attach">6</property>
                  <property name="right_attach">7</property>
-                 <property name="top_attach">5</property>
-                 <property name="bottom_attach">6</property>
+                 <property name="top_attach">6</property>
+                 <property name="bottom_attach">7</property>
                  <property name="x_options">fill</property>
                  <property name="y_options">fill</property>
                </packing>
@@ -1027,8 +1027,8 @@
                <packing>
                  <property name="left_attach">1</property>
                  <property name="right_attach">2</property>
-                 <property name="top_attach">5</property>
-                 <property name="bottom_attach">6</property>
+                 <property name="top_attach">6</property>
+                 <property name="bottom_attach">7</property>
                  <property name="x_options">fill</property>
                  <property name="y_options">fill</property>
                </packing>
@@ -1058,8 +1058,8 @@
                <packing>
                  <property name="left_attach">5</property>
                  <property name="right_attach">6</property>
-                 <property name="top_attach">5</property>
-                 <property name="bottom_attach">6</property>
+                 <property name="top_attach">6</property>
+                 <property name="bottom_attach">7</property>
                  <property name="x_options">fill</property>
                  <property name="y_options">fill</property>
                </packing>
@@ -1088,8 +1088,8 @@
                <packing>
                  <property name="left_attach">7</property>
                  <property name="right_attach">8</property>
-                 <property name="top_attach">9</property>
-                 <property name="bottom_attach">10</property>
+                 <property name="top_attach">10</property>
+                 <property name="bottom_attach">11</property>
                  <property name="y_options">fill</property>
                </packing>
              </child>
@@ -1101,8 +1101,8 @@
                <packing>
                  <property name="left_attach">0</property>
                  <property name="right_attach">4</property>
-                 <property name="top_attach">11</property>
-                 <property name="bottom_attach">12</property>
+                 <property name="top_attach">12</property>
+                 <property name="bottom_attach">13</property>
                  <property name="y_padding">2</property>
                  <property name="y_options">fill</property>
                </packing>
@@ -1115,8 +1115,8 @@
                <packing>
                  <property name="left_attach">4</property>
                  <property name="right_attach">8</property>
-                 <property name="top_attach">11</property>
-                 <property name="bottom_attach">12</property>
+                 <property name="top_attach">12</property>
+                 <property name="bottom_attach">13</property>
                  <property name="y_options">fill</property>
                </packing>
              </child>
@@ -1153,46 +1153,6 @@
              </child>
 
              <child>
-               <widget class="Custom" id="custom1">
-                 <property name="visible">True</property>
-                 <property name="creation_function">e_create_image_widget</property>
-                 <property name="string1">malehead.png</property>
-                 <property name="string2"></property>
-                 <property name="int1">0</property>
-                 <property name="int2">0</property>
-                 <property name="last_modification_time">Thu, 18 May 2000 12:19:47 
GMT</property>
-               </widget>
-               <packing>
-                 <property name="left_attach">0</property>
-                 <property name="right_attach">1</property>
-                 <property name="top_attach">0</property>
-                 <property name="bottom_attach">4</property>
-                 <property name="x_options">fill</property>
-                 <property name="y_options">fill</property>
-               </packing>
-             </child>
-
-             <child>
-               <widget class="Custom" id="custom2">
-                 <property name="visible">True</property>
-                 <property name="creation_function">e_create_image_widget</property>
-                 <property name="string1">cellphone.png</property>
-                 <property name="string2"></property>
-                 <property name="int1">0</property>
-                 <property name="int2">0</property>
-                 <property name="last_modification_time">Thu, 18 May 2000 12:20:02 
GMT</property>
-               </widget>
-               <packing>
-                 <property name="left_attach">4</property>
-                 <property name="right_attach">5</property>
-                 <property name="top_attach">0</property>
-                 <property name="bottom_attach">4</property>
-                 <property name="x_options">fill</property>
-                 <property name="y_options">fill</property>
-               </packing>
-             </child>
-
-             <child>
                <widget class="Custom" id="custom3">
                  <property name="visible">True</property>
                  <property name="creation_function">e_create_image_widget</property>
@@ -1205,8 +1165,8 @@
                <packing>
                  <property name="left_attach">0</property>
                  <property name="right_attach">1</property>
-                 <property name="top_attach">5</property>
-                 <property name="bottom_attach">7</property>
+                 <property name="top_attach">6</property>
+                 <property name="bottom_attach">8</property>
                  <property name="x_options">fill</property>
                  <property name="y_options">fill</property>
                </packing>
@@ -1225,8 +1185,8 @@
                <packing>
                  <property name="left_attach">4</property>
                  <property name="right_attach">5</property>
-                 <property name="top_attach">5</property>
-                 <property name="bottom_attach">10</property>
+                 <property name="top_attach">6</property>
+                 <property name="bottom_attach">11</property>
                  <property name="x_options">fill</property>
                  <property name="y_options">fill</property>
                </packing>
@@ -1245,8 +1205,8 @@
                <packing>
                  <property name="left_attach">0</property>
                  <property name="right_attach">1</property>
-                 <property name="top_attach">8</property>
-                 <property name="bottom_attach">10</property>
+                 <property name="top_attach">9</property>
+                 <property name="bottom_attach">11</property>
                  <property name="x_options">fill</property>
                  <property name="y_options">fill</property>
                </packing>
@@ -1288,8 +1248,8 @@
                <packing>
                  <property name="left_attach">5</property>
                  <property name="right_attach">7</property>
-                 <property name="top_attach">6</property>
-                 <property name="bottom_attach">7</property>
+                 <property name="top_attach">7</property>
+                 <property name="bottom_attach">8</property>
                  <property name="x_options">fill</property>
                  <property name="y_options">fill</property>
                </packing>
@@ -1338,8 +1298,8 @@
                <packing>
                  <property name="left_attach">1</property>
                  <property name="right_attach">3</property>
-                 <property name="top_attach">8</property>
-                 <property name="bottom_attach">9</property>
+                 <property name="top_attach">9</property>
+                 <property name="bottom_attach">10</property>
                  <property name="x_options">fill</property>
                  <property name="y_options"></property>
                </packing>
@@ -1366,8 +1326,8 @@
                <packing>
                  <property name="left_attach">1</property>
                  <property name="right_attach">3</property>
-                 <property name="top_attach">12</property>
-                 <property name="bottom_attach">13</property>
+                 <property name="top_attach">13</property>
+                 <property name="bottom_attach">14</property>
                  <property name="x_options">fill</property>
                  <property name="y_options">fill</property>
                </packing>
@@ -1386,8 +1346,8 @@
                <packing>
                  <property name="left_attach">0</property>
                  <property name="right_attach">1</property>
-                 <property name="top_attach">12</property>
-                 <property name="bottom_attach">14</property>
+                 <property name="top_attach">13</property>
+                 <property name="bottom_attach">15</property>
                  <property name="x_options">fill</property>
                  <property name="y_options">fill</property>
                </packing>
@@ -1418,8 +1378,8 @@
                <packing>
                  <property name="left_attach">3</property>
                  <property name="right_attach">4</property>
-                 <property name="top_attach">12</property>
-                 <property name="bottom_attach">13</property>
+                 <property name="top_attach">13</property>
+                 <property name="bottom_attach">14</property>
                  <property name="x_options">fill</property>
                  <property name="y_options">fill</property>
                </packing>
@@ -1455,8 +1415,8 @@
                <packing>
                  <property name="left_attach">7</property>
                  <property name="right_attach">8</property>
-                 <property name="top_attach">5</property>
-                 <property name="bottom_attach">9</property>
+                 <property name="top_attach">6</property>
+                 <property name="bottom_attach">10</property>
                  <property name="y_options">fill</property>
                </packing>
              </child>
@@ -1472,8 +1432,8 @@
                <packing>
                  <property name="left_attach">3</property>
                  <property name="right_attach">4</property>
-                 <property name="top_attach">8</property>
-                 <property name="bottom_attach">9</property>
+                 <property name="top_attach">9</property>
+                 <property name="bottom_attach">10</property>
                  <property name="x_options">fill</property>
                  <property name="y_options">fill</property>
                </packing>
@@ -1497,8 +1457,8 @@
                <packing>
                  <property name="left_attach">1</property>
                  <property name="right_attach">3</property>
-                 <property name="top_attach">9</property>
-                 <property name="bottom_attach">10</property>
+                 <property name="top_attach">10</property>
+                 <property name="bottom_attach">11</property>
                  <property name="x_options">fill</property>
                  <property name="y_options"></property>
                </packing>
@@ -1515,12 +1475,124 @@
                <packing>
                  <property name="left_attach">3</property>
                  <property name="right_attach">4</property>
-                 <property name="top_attach">9</property>
-                 <property name="bottom_attach">10</property>
+                 <property name="top_attach">10</property>
+                 <property name="bottom_attach">11</property>
+                 <property name="x_options">fill</property>
+                 <property name="y_options">fill</property>
+               </packing>
+             </child>
+
+             <child>
+               <widget class="Custom" id="custom2">
+                 <property name="visible">True</property>
+                 <property name="creation_function">e_create_image_widget</property>
+                 <property name="string1">cellphone.png</property>
+                 <property name="string2"></property>
+                 <property name="int1">0</property>
+                 <property name="int2">0</property>
+                 <property name="last_modification_time">Thu, 18 May 2000 12:20:02 
GMT</property>
+               </widget>
+               <packing>
+                 <property name="left_attach">4</property>
+                 <property name="right_attach">5</property>
+                 <property name="top_attach">0</property>
+                 <property name="bottom_attach">5</property>
                  <property name="x_options">fill</property>
                  <property name="y_options">fill</property>
                </packing>
              </child>
+
+             <child>
+               <widget class="Custom" id="custom1">
+                 <property name="visible">True</property>
+                 <property name="creation_function">e_create_image_widget</property>
+                 <property name="string1">malehead.png</property>
+                 <property name="string2"></property>
+                 <property name="int1">0</property>
+                 <property name="int2">0</property>
+                 <property name="last_modification_time">Thu, 18 May 2000 12:19:47 
GMT</property>
+               </widget>
+               <packing>
+                 <property name="left_attach">0</property>
+                 <property name="right_attach">1</property>
+                 <property name="top_attach">0</property>
+                 <property name="bottom_attach">5</property>
+                 <property name="x_options">fill</property>
+                 <property name="y_options">fill</property>
+               </packing>
+             </child>
+
+             <child>
+               <widget class="GtkLabel" id="label-im1">
+                 <property name="visible">True</property>
+                 <property name="label" translatable="yes">A_IM account:</property>
+                 <property name="use_underline">True</property>
+                 <property name="use_markup">False</property>
+                 <property name="justify">GTK_JUSTIFY_LEFT</property>
+                 <property name="wrap">False</property>
+                 <property name="selectable">False</property>
+                 <property name="xalign">1</property>
+                 <property name="yalign">0.5</property>
+                 <property name="xpad">0</property>
+                 <property name="ypad">0</property>
+               </widget>
+               <packing>
+                 <property name="left_attach">5</property>
+                 <property name="right_attach">6</property>
+                 <property name="top_attach">4</property>
+                 <property name="bottom_attach">5</property>
+                 <property name="x_options">fill</property>
+                 <property name="y_options"></property>
+               </packing>
+             </child>
+
+             <child>
+               <widget class="GtkButton" id="button-im1">
+                 <property name="visible">True</property>
+                 <property name="relief">GTK_RELIEF_NORMAL</property>
+
+                 <child>
+                   <widget class="GtkArrow" id="arrow7">
+                     <property name="visible">True</property>
+                     <property name="arrow_type">GTK_ARROW_DOWN</property>
+                     <property name="shadow_type">GTK_SHADOW_OUT</property>
+                     <property name="xalign">0.5</property>
+                     <property name="yalign">0.5</property>
+                     <property name="xpad">0</property>
+                     <property name="ypad">0</property>
+                   </widget>
+                 </child>
+               </widget>
+               <packing>
+                 <property name="left_attach">6</property>
+                 <property name="right_attach">7</property>
+                 <property name="top_attach">4</property>
+                 <property name="bottom_attach">5</property>
+                 <property name="x_options">fill</property>
+                 <property name="y_options"></property>
+               </packing>
+             </child>
+
+             <child>
+               <widget class="GtkEntry" id="entry-im1">
+                 <property name="visible">True</property>
+                 <property name="can_focus">True</property>
+                 <property name="editable">True</property>
+                 <property name="visibility">True</property>
+                 <property name="max_length">0</property>
+                 <property name="text" translatable="yes"></property>
+                 <property name="has_frame">True</property>
+                 <property name="invisible_char" translatable="yes">*</property>
+                 <property name="activates_default">False</property>
+               </widget>
+               <packing>
+                 <property name="left_attach">7</property>
+                 <property name="right_attach">8</property>
+                 <property name="top_attach">4</property>
+                 <property name="bottom_attach">5</property>
+                 <property name="y_options"></property>
+               </packing>
+             </child>
            </widget>
            <packing>
              <property name="tab_expand">False</property>
Index: addressbook/gui/contact-editor/e-contact-editor.c
===================================================================
RCS file: /cvs/gnome/evolution/addressbook/gui/contact-editor/e-contact-editor.c,v
retrieving revision 1.153
diff -u -r1.153 e-contact-editor.c
--- addressbook/gui/contact-editor/e-contact-editor.c   21 Oct 2003 18:48:45 -0000     
 1.153
+++ addressbook/gui/contact-editor/e-contact-editor.c   23 Nov 2003 22:51:37 -0000
@@ -76,6 +76,7 @@
 static void e_contact_editor_get_property (GObject *object, guint prop_id, GValue 
*value, GParamSpec *pspec);
 static void e_contact_editor_dispose (GObject *object);
 
+static void _im_arrow_pressed (GtkWidget *widget, GdkEventButton *button, 
EContactEditor *editor);
 static void _email_arrow_pressed (GtkWidget *widget, GdkEventButton *button, 
EContactEditor *editor);
 static void _phone_arrow_pressed (GtkWidget *widget, GdkEventButton *button, 
EContactEditor *editor);
 static void _address_arrow_pressed (GtkWidget *widget, GdkEventButton *button, 
EContactEditor *editor);
@@ -136,6 +137,22 @@
        E_CONTACT_PHONE_TTYTDD,
 };
 
+static EContactField ims[] = {
+       E_CONTACT_IM_AIM,
+       E_CONTACT_IM_JABBER,
+       E_CONTACT_IM_YAHOO,
+       E_CONTACT_IM_MSN,
+       E_CONTACT_IM_ICQ
+};
+
+static const char *im_labels[] = {
+       N_("AIM account"),
+       N_("Jabber account"),
+       N_("Yahoo account"),
+       N_("MSN account"),
+       N_("ICQ account")
+};
+
 static EContactField emails[] = {
        E_CONTACT_EMAIL_1,
        E_CONTACT_EMAIL_2,
@@ -279,6 +296,7 @@
        connect_arrow_button_signal(editor, "button-phone3", G_CALLBACK 
(_phone_arrow_pressed));
        connect_arrow_button_signal(editor, "button-phone4", G_CALLBACK 
(_phone_arrow_pressed));
        connect_arrow_button_signal(editor, "button-address", G_CALLBACK 
(_address_arrow_pressed));
+       connect_arrow_button_signal(editor, "button-im1", G_CALLBACK 
(_im_arrow_pressed));
        connect_arrow_button_signal(editor, "button-email1", G_CALLBACK 
(_email_arrow_pressed));
 }
 
@@ -319,6 +337,21 @@
 }
 
 static void
+im_entry_changed (GtkWidget *widget, EContactEditor *editor)
+{
+       GtkEntry *entry = GTK_ENTRY(widget);
+       GList *l;
+
+       l = g_list_append(NULL, (char*)gtk_entry_get_text(entry));
+
+       e_contact_set(editor->contact, editor->im_choice, l);
+
+       g_list_free(l);
+
+       widget_changed (widget, editor);
+}
+
+static void
 email_entry_changed (GtkWidget *widget, EContactEditor *editor)
 {
        GtkEntry *entry = GTK_ENTRY(widget);
@@ -633,6 +666,15 @@
 }
 
 static void
+set_entry_changed_signal_im(EContactEditor *editor, char *id)
+{
+       GtkWidget *widget = glade_xml_get_widget(editor->gui, id);
+       if (widget && GTK_IS_ENTRY(widget))
+               g_signal_connect(widget, "changed",
+                                G_CALLBACK (im_entry_changed), editor);
+}
+
+static void
 set_entry_changed_signal_email(EContactEditor *editor, char *id)
 {
        GtkWidget *widget = glade_xml_get_widget(editor->gui, id);
@@ -684,6 +726,8 @@
        set_entry_changed_signal_phone(editor, "entry-phone3");
        set_entry_changed_signal_phone(editor, "entry-phone4");
 
+       set_entry_changed_signal_im(editor, "entry-im1");
+
        set_entry_changed_signal_email(editor, "entry-email1");
 
        widget = glade_xml_get_widget(editor->gui, "text-address");
@@ -1254,6 +1298,7 @@
                list = add_to_tab_order(list, gui, "entry-phone2");
                list = add_to_tab_order(list, gui, "entry-phone3");
                list = add_to_tab_order(list, gui, "entry-phone4");
+               list = add_to_tab_order(list, gui, "entry-im1");
 
                list = add_to_tab_order(list, gui, "entry-email1");
                list = add_to_tab_order(list, gui, "alignment-htmlmail");
@@ -1278,6 +1323,7 @@
        char *icon_path;
 
        e_contact_editor->email_info = NULL;
+       e_contact_editor->im_info = NULL;
        e_contact_editor->phone_info = NULL;
        e_contact_editor->address_info = NULL;
        e_contact_editor->email_popup = NULL;
@@ -1289,6 +1335,7 @@
        e_contact_editor->name = e_contact_name_new();
        e_contact_editor->company = g_strdup("");
        
+       e_contact_editor->im_choice = E_CONTACT_IM_AIM;
        e_contact_editor->email_choice = E_CONTACT_EMAIL_1;
        e_contact_editor->phone_choice[0] = E_CONTACT_PHONE_BUSINESS;
        e_contact_editor->phone_choice[1] = E_CONTACT_PHONE_HOME;
@@ -1401,6 +1448,14 @@
                g_list_free(e_contact_editor->email_list);
                e_contact_editor->email_list = NULL;
        }
+       if (e_contact_editor->im_info) {
+               g_free(e_contact_editor->im_info);
+               e_contact_editor->im_info = NULL;
+       }
+       if (e_contact_editor->im_popup) {
+               g_object_unref(e_contact_editor->im_popup);
+               e_contact_editor->im_popup = NULL;
+       }
        if (e_contact_editor->email_info) {
                g_free(e_contact_editor->email_info);
                e_contact_editor->email_info = NULL;
@@ -1750,6 +1805,27 @@
 }
 
 static void
+e_contact_editor_build_im_ui (EContactEditor *editor)
+{
+       int i;
+
+       if (editor->im_list == NULL) {
+               for (i = 0; i < G_N_ELEMENTS (ims); i++)
+                       editor->im_list = g_list_append(editor->im_list, 
g_strdup(im_labels[i]));
+       }
+       if (editor->im_info == NULL) {
+               e_contact_editor_build_ui_info(editor->im_list, &editor->im_info);
+
+               if ( editor->im_popup )
+                       g_object_unref(editor->im_popup);
+
+               editor->im_popup = gnome_popup_menu_new(editor->im_info);
+               g_object_ref (editor->im_popup);
+               gtk_object_sink (GTK_OBJECT (editor->im_popup));
+       }
+}
+
+static void
 e_contact_editor_build_email_ui (EContactEditor *editor)
 {
        int i;
@@ -1844,6 +1920,37 @@
 }
 
 static void
+_im_arrow_pressed (GtkWidget *widget, GdkEventButton *button, EContactEditor *editor)
+{
+       int i;
+       int result;
+
+       e_contact_editor_build_im_ui (editor);
+
+       for(i = 0; i < G_N_ELEMENTS (ims); i++) {
+               GList *list = e_contact_get(editor->contact, ims[i]);
+               gboolean checked;
+               checked = (list != NULL);
+
+               
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(editor->im_info[i].widget),
+                                              checked);
+       }
+       
+       result = _arrow_pressed (widget, button, editor, editor->im_popup, 
&editor->im_list, &editor->im_info, "label-im1");
+       
+       if (result != -1) {
+               GtkWidget *entry = glade_xml_get_widget (editor->gui, "entry-im1");
+               editor->im_choice = ims[result];
+
+               set_fields (editor);
+
+               /* make sure the buttons/entry is/are sensitive */
+               enable_widget (glade_xml_get_widget (editor->gui, "label-im1"), TRUE);
+               enable_widget (entry, editor->editable);
+       }
+}
+
+static void
 _email_arrow_pressed (GtkWidget *widget, GdkEventButton *button, EContactEditor 
*editor)
 {
        int i;
@@ -1937,6 +2044,8 @@
        const char *oldstring = gtk_entry_get_text(entry);
        if (!string)
                string = "";
+       printf("oldstring = '%s'\n", oldstring);
+       printf("string = '%s'\n", string);
        if (strcmp(string, oldstring)) {
                g_signal_handlers_block_matched (entry,
                                                 G_SIGNAL_MATCH_DATA,
@@ -1976,7 +2085,17 @@
        entry = glade_xml_get_widget(editor->gui, "entry-phone4");
        if (entry && GTK_IS_ENTRY(entry))
                set_phone_field(editor, entry, e_contact_get_const(editor->contact, 
editor->phone_choice[3]));
-       
+
+       entry = glade_xml_get_widget(editor->gui, "entry-im1");
+       if (entry && GTK_IS_ENTRY(entry)) {
+               GList *values = e_contact_get(editor->contact, editor->im_choice);
+
+               if (values && values->data)
+                       set_field(editor, GTK_ENTRY(entry), values->data);
+               else
+                       set_field(editor, GTK_ENTRY(entry), NULL);
+       }
+
        entry = glade_xml_get_widget(editor->gui, "entry-email1");
        if (entry && GTK_IS_ENTRY(entry))
                set_field(editor, GTK_ENTRY(entry), 
e_contact_get_const(editor->contact, editor->email_choice));
@@ -2185,10 +2304,15 @@
                g_hash_table_insert (dropdown_hash,
                                     (char*)e_contact_field_name(phones[i]),
                                     editor->phone_info[i].widget);
+       e_contact_editor_build_im_ui (editor);
+       for (i = 0; i < G_N_ELEMENTS (ims); i ++)
+               g_hash_table_insert (dropdown_hash,
+                                    (char*)e_contact_field_name(ims[i]),
+                                    editor->im_info[i].widget);
        e_contact_editor_build_email_ui (editor);
        for (i = 0; i < G_N_ELEMENTS (emails); i ++)
                g_hash_table_insert (dropdown_hash,
-                                    (char*)e_contact_field_name(phones[i]),
+                                    (char*)e_contact_field_name(emails[i]),
                                     editor->email_info[i].widget);
 #if notyet
        e_contact_editor_build_address_ui (editor);
@@ -2212,6 +2336,8 @@
                enable_widget (glade_xml_get_widget (editor->gui, widget_name), FALSE);
                g_free (widget_name);
        }
+       enable_widget (glade_xml_get_widget (editor->gui, "label-im1"), FALSE);
+       enable_widget (glade_xml_get_widget (editor->gui, "entry-im1"), FALSE);
        enable_widget (glade_xml_get_widget (editor->gui, "label-email1"), FALSE);
        enable_widget (glade_xml_get_widget (editor->gui, "entry-email1"), FALSE);
        enable_widget (glade_xml_get_widget (editor->gui, "checkbutton-htmlmail"), 
FALSE);
@@ -2260,6 +2386,10 @@
                        enable_widget (glade_xml_get_widget (editor->gui, 
"checkbutton-mailingaddress"), editor->editable);
                        enable_widget (glade_xml_get_widget (editor->gui, 
"text-address"), editor->editable);
                }
+               else if (!strcmp (field, e_contact_field_name (editor->im_choice))) {
+                       enable_widget (glade_xml_get_widget (editor->gui, 
"label-im1"), TRUE);
+                       enable_widget (glade_xml_get_widget (editor->gui, 
"entry-im1"), TRUE);
+               }
                else for (i = 0; i < 4; i ++) {
                        if (!strcmp (field, e_contact_field_name 
(editor->phone_choice[i]))) {
                                widget_name = g_strdup_printf ("label-phone%d", i+1);
@@ -2325,6 +2455,11 @@
                g_free (entry);
        }
 
+       /* handle the im dropdown entry */
+       entry = "entry-im1";
+       enable_widget (glade_xml_get_widget(editor->gui, entry),
+                      editor->editable);
+
        /* handle the email dropdown entry */
        entry = "entry-email1";
        enable_widget (glade_xml_get_widget(editor->gui, entry),
Index: addressbook/gui/contact-editor/e-contact-editor.h
===================================================================
RCS file: /cvs/gnome/evolution/addressbook/gui/contact-editor/e-contact-editor.h,v
retrieving revision 1.36
diff -u -r1.36 e-contact-editor.h
--- addressbook/gui/contact-editor/e-contact-editor.h   7 Nov 2003 05:51:33 -0000      
 1.36
+++ addressbook/gui/contact-editor/e-contact-editor.h   23 Nov 2003 22:51:37 -0000
@@ -62,12 +62,15 @@
        
        GladeXML *gui;
        GtkWidget *app;
+       GnomeUIInfo *im_info;
        GnomeUIInfo *email_info;
        GnomeUIInfo *phone_info;
        GnomeUIInfo *address_info;
+       GtkWidget *im_popup;
        GtkWidget *email_popup;
        GtkWidget *phone_popup;
        GtkWidget *address_popup;
+       GList *im_list;
        GList *email_list;
        GList *phone_list;
        GList *address_list;
@@ -75,6 +78,7 @@
        EContactName *name;
        char *company;
 
+       EContactField im_choice;
        EContactField email_choice;
        EContactField phone_choice[4];
        EContactField address_choice;

Attachment: pgp00000.pgp
Description: PGP signature

Reply via email to