aboutsummaryrefslogtreecommitdiffstats
path: root/calendar/gui
diff options
context:
space:
mode:
Diffstat (limited to 'calendar/gui')
-rw-r--r--calendar/gui/e-meeting-model.c124
1 files changed, 66 insertions, 58 deletions
diff --git a/calendar/gui/e-meeting-model.c b/calendar/gui/e-meeting-model.c
index c9555a6f9b..d57da3b78a 100644
--- a/calendar/gui/e-meeting-model.c
+++ b/calendar/gui/e-meeting-model.c
@@ -89,6 +89,17 @@ struct _EMeetingModelPrivate
#define BUF_SIZE 1024
+static char *sections[] = {N_("Chair Persons"),
+ N_("Required Participants"),
+ N_("Optional Participants"),
+ N_("Non-Participants"),
+ NULL};
+static icalparameter_role roles[] = {ICAL_ROLE_CHAIR,
+ ICAL_ROLE_REQPARTICIPANT,
+ ICAL_ROLE_OPTPARTICIPANT,
+ ICAL_ROLE_NONPARTICIPANT,
+ ICAL_ROLE_NONE};
+
typedef struct _EMeetingModelAttendeeRefreshData EMeetingModelAttendeeRefreshData;
struct _EMeetingModelAttendeeRefreshData {
char buffer[BUF_SIZE];
@@ -110,11 +121,11 @@ static void init (EMeetingModel *model);
static void destroy (GtkObject *obj);
static void attendee_changed_cb (EMeetingAttendee *ia, gpointer data);
-static void invite_entry_changed_cb (BonoboListener *listener,
- char *event_name,
- CORBA_any *arg,
- CORBA_Environment *ev,
- gpointer data);
+static void select_names_ok_cb (BonoboListener *listener,
+ char *event_name,
+ CORBA_any *arg,
+ CORBA_Environment *ev,
+ gpointer data);
static void table_destroy_cb (ETableScrolled *etable, gpointer data);
@@ -1326,18 +1337,16 @@ e_meeting_model_etable_from_model (EMeetingModel *im, const gchar *spec_file, co
}
static void
-add_section (GNOME_Evolution_Addressbook_SelectNames corba_select_names, const char *name, int limit)
+add_section (GNOME_Evolution_Addressbook_SelectNames corba_select_names, const char *name)
{
CORBA_Environment ev;
CORBA_exception_init (&ev);
- if (limit != 0)
- GNOME_Evolution_Addressbook_SelectNames_addSectionWithLimit (corba_select_names,
- name, name, limit, &ev);
- else
- GNOME_Evolution_Addressbook_SelectNames_addSection (corba_select_names,
- name, name, &ev);
+ GNOME_Evolution_Addressbook_SelectNames_addSection (corba_select_names,
+ name,
+ gettext (name),
+ &ev);
CORBA_exception_free (&ev);
}
@@ -1346,11 +1355,8 @@ static gboolean
get_select_name_dialog (EMeetingModel *im)
{
EMeetingModelPrivate *priv;
- const char *sections[] = {_("Chair Persons"),
- _("Required Participants"),
- _("Optional Participants"),
- _("Non-Participants")};
CORBA_Environment ev;
+ int i;
priv = im->priv;
@@ -1360,8 +1366,9 @@ get_select_name_dialog (EMeetingModel *im)
int i;
CORBA_exception_init (&ev);
- for (i = 0; i < 4; i++) {
- corba_control = GNOME_Evolution_Addressbook_SelectNames_getEntryBySection (priv->corba_select_names, sections[i], &ev);
+ for (i = 0; sections[i] != NULL; i++) {
+ corba_control = GNOME_Evolution_Addressbook_SelectNames_getEntryBySection
+ (priv->corba_select_names, sections[i], &ev);
if (BONOBO_EX (&ev)) {
CORBA_exception_free (&ev);
return FALSE;
@@ -1380,14 +1387,12 @@ get_select_name_dialog (EMeetingModel *im)
priv->corba_select_names = oaf_activate_from_id (SELECT_NAMES_OAFID, 0, NULL, &ev);
- add_section (priv->corba_select_names, sections[0], 0);
- add_section (priv->corba_select_names, sections[1], 0);
- add_section (priv->corba_select_names, sections[2], 0);
- add_section (priv->corba_select_names, sections[3], 0);
+ for (i = 0; sections[i] != NULL; i++)
+ add_section (priv->corba_select_names, sections[i]);
bonobo_event_source_client_add_listener (priv->corba_select_names,
- invite_entry_changed_cb,
- "GNOME/Evolution:changed:model",
+ select_names_ok_cb,
+ "GNOME/Evolution:ok:dialog",
NULL, im);
if (BONOBO_EX (&ev)) {
@@ -1420,34 +1425,10 @@ e_meeting_model_invite_others_dialog (EMeetingModel *im)
}
static void
-invite_entry_changed_cb (BonoboListener *listener,
- char *event_name,
- CORBA_any *arg,
- CORBA_Environment *ev,
- gpointer data)
+process_section (EMeetingModel *im, EDestination **destv, icalparameter_role role)
{
- EMeetingModel *im = data;
- EMeetingModelPrivate *priv;
- Bonobo_Control corba_control;
- GtkWidget *control_widget;
- EDestination **destv;
- char *string = NULL, *section;
int i;
- priv = im->priv;
-
- section = BONOBO_ARG_GET_STRING (arg);
-
- g_message ("event: \"%s\", section \"%s\"", event_name, section);
-
- corba_control = GNOME_Evolution_Addressbook_SelectNames_getEntryBySection (priv->corba_select_names, section, ev);
- control_widget = bonobo_widget_new_control_from_objref (corba_control, CORBA_OBJECT_NIL);
-
- bonobo_widget_get_property (BONOBO_WIDGET (control_widget), "destinations", &string, NULL);
- destv = e_destination_importv (string);
- if (destv == NULL)
- return;
-
for (i = 0; destv[i] != NULL; i++) {
EMeetingAttendee *ia;
const char *name, *address;
@@ -1455,22 +1436,49 @@ invite_entry_changed_cb (BonoboListener *listener,
name = e_destination_get_name (destv[i]);
address = e_destination_get_email (destv[i]);
+ if (address == NULL || *address == '\0')
+ continue;
+
if (e_meeting_model_find_attendee (im, address, NULL) == NULL) {
ia = e_meeting_model_add_attendee_with_defaults (im);
e_meeting_attendee_set_address (ia, g_strdup_printf ("MAILTO:%s", address));
- if (!strcmp (section, _("Chair Persons")))
- e_meeting_attendee_set_role (ia, ICAL_ROLE_CHAIR);
- else if (!strcmp (section, _("Required Participants")))
- e_meeting_attendee_set_role (ia, ICAL_ROLE_REQPARTICIPANT);
- else if (!strcmp (section, _("Optional Participants")))
- e_meeting_attendee_set_role (ia, ICAL_ROLE_OPTPARTICIPANT);
- else if (!strcmp (section, _("Non-Participants")))
- e_meeting_attendee_set_role (ia, ICAL_ROLE_NONPARTICIPANT);
+ e_meeting_attendee_set_role (ia, role);
e_meeting_attendee_set_cn (ia, g_strdup (name));
}
}
- e_destination_freev (destv);
+}
+
+static void
+select_names_ok_cb (BonoboListener *listener,
+ char *event_name,
+ CORBA_any *arg,
+ CORBA_Environment *ev,
+ gpointer data)
+{
+ EMeetingModel *im = data;
+ EMeetingModelPrivate *priv;
+ Bonobo_Control corba_control;
+ GtkWidget *control_widget;
+ EDestination **destv;
+ char *string = NULL;
+ int i;
+
+ priv = im->priv;
+
+ for (i = 0; sections[i] != NULL; i++) {
+ corba_control = GNOME_Evolution_Addressbook_SelectNames_getEntryBySection
+ (priv->corba_select_names, sections[i], ev);
+ control_widget = bonobo_widget_new_control_from_objref
+ (corba_control, CORBA_OBJECT_NIL);
+
+ bonobo_widget_get_property (BONOBO_WIDGET (control_widget), "destinations", &string, NULL);
+ destv = e_destination_importv (string);
+ if (destv != NULL) {
+ process_section (im, destv, roles[i]);
+ e_destination_freev (destv);
+ }
+ }
}
static void