aboutsummaryrefslogtreecommitdiffstats
path: root/calendar/gui/e-meeting-edit.c
diff options
context:
space:
mode:
Diffstat (limited to 'calendar/gui/e-meeting-edit.c')
-rw-r--r--calendar/gui/e-meeting-edit.c131
1 files changed, 116 insertions, 15 deletions
diff --git a/calendar/gui/e-meeting-edit.c b/calendar/gui/e-meeting-edit.c
index 6873288c01..f54fb0dea0 100644
--- a/calendar/gui/e-meeting-edit.c
+++ b/calendar/gui/e-meeting-edit.c
@@ -25,6 +25,8 @@
#include <icaltypes.h>
#include <ical.h>
#include <widgets/meeting-time-sel/e-meeting-time-sel.h>
+#include <composer/Composer.h>
+#include <string.h>
#include "e-meeting-edit.h"
#define E_MEETING_GLADE_XML "e-meeting-dialog.glade"
@@ -42,7 +44,7 @@ struct _EMeetingEditorPrivate {
GtkWidget *organizer_entry;
GtkWidget *role_entry;
GtkWidget *rsvp_check;
- GtkWidget *schedule_button;
+ GtkWidget *send_button, *schedule_button;
gint changed_signal_id;
@@ -246,12 +248,14 @@ put_property_in_list (icalproperty *prop, gint rownum, gpointer data)
-/* edit_attendee() performs the GUI manipulation and interaction for
- editing `prop' and returns TRUE if the user indicated that he wants
- to save the new property information.
-
- Note that it is necessary that the property have parameters of the types
- RSVP, PARTSTAT, and ROLE already when passed into this function. */
+/********
+ * edit_attendee() performs the GUI manipulation and interaction for
+ * editing `prop' and returns TRUE if the user indicated that he wants
+ * to save the new property information.
+ *
+ * Note that it is necessary that the property have parameters of the types
+ * RSVP, PARTSTAT, and ROLE already when passed into this function.
+ ********/
static gboolean
edit_attendee (icalproperty *prop, gpointer data)
{
@@ -483,7 +487,108 @@ schedule_button_clicked_cb (GtkWidget *widget, gpointer data)
return;
}
+#define COMPOSER_OAFID "OAFIID:evolution-composer:evolution-mail:cd8618ea-53e1-4b9e-88cf-ec578bdb903b"
+
+
+static gchar *itip_methods = {
+ "REQUEST"
+};
+
+enum itip_method_enum {
+ METHOD_REQUEST
+};
+
+/********
+ * This routine is called when the send button is clicked. Duh.
+ * Actually, I'm just testing my commenting macros.
+ ********/
+static void
+send_button_clicked_cb (GtkWidget *widget, gpointer data)
+{
+ EMeetingEditorPrivate *priv;
+ BonoboObjectClient *bonobo_server;
+ Evolution_Composer composer_server;
+ CORBA_Environment ev;
+ Evolution_Composer_RecipientList *to_list, *cc_list, *bcc_list;
+ Evolution_Composer_Recipient *recipient;
+ gchar *cell_text;
+ CORBA_char *subject;
+ gint cntr;
+ gint len;
+ CalComponentText caltext;
+ CORBA_char *content_type, *filename, *description, *data;
+ CORBA_boolean show_inline;
+ CORBA_char tempstr[200];
+
+
+ /********
+ * CODE
+ ********/
+
+ priv = (EMeetingEditorPrivate *) ((EMeetingEditor *)data)->priv;
+
+ CORBA_exception_init (&ev);
+
+ /* First, I obtain an object reference that represents the Composer. */
+ bonobo_server = bonobo_object_activate (COMPOSER_OAFID, 0);
+
+ g_return_if_fail (bonobo_server != NULL);
+
+ composer_server = bonobo_object_corba_objref (BONOBO_OBJECT (bonobo_server));
+
+ /* All right, now I have to convert my list of recipients into one of those
+ CORBA sequences. */
+ to_list = Evolution_Composer_RecipientList__alloc ();
+ to_list->_maximum = priv->numentries;
+ to_list->_length = priv->numentries;
+ to_list->_buffer = CORBA_sequence_Evolution_Composer_Recipient_allocbuf (priv->numentries);
+
+ for (cntr = 0; cntr < priv->numentries; cntr++) {
+ gtk_clist_get_text (GTK_CLIST (priv->attendee_list),
+ cntr, ADDRESS_COL,
+ &cell_text);
+ len = strlen (cell_text);
+ recipient = &(to_list->_buffer[cntr]);
+ recipient->name = CORBA_string_alloc (0); /* FIXME: we may want an actual name here. */
+ recipient->address = CORBA_string_alloc (len);
+ strcpy (recipient->address, cell_text);
+ }
+
+ cc_list = Evolution_Composer_RecipientList__alloc ();
+ cc_list->_maximum = cc_list->_length = 0;
+ bcc_list = Evolution_Composer_RecipientList__alloc ();
+ bcc_list->_maximum = bcc_list->_length = 0;
+
+ cal_component_get_summary (priv->comp, &caltext);
+ subject = CORBA_string_alloc (strlen (caltext.value));
+ strcpy (subject, caltext.value);
+
+ Evolution_Composer_set_headers (composer_server, to_list, cc_list, bcc_list, subject, &ev);
+ if (ev._major != CORBA_NO_EXCEPTION) {
+ g_printerr ("gui/e-meeting-edit.c: I couldn't set the composer headers via CORBA! Aagh.\n");
+ CORBA_exception_free (&ev);
+ }
+
+ sprintf (tempstr, "text/calendar; METHOD=%s", itip_methods[METHOD_REQUEST]);
+ content_type = CORBA_string_alloc (strlen (tempstr));
+ filename = CORBA_string_alloc (0);
+ description = CORBA_string_alloc (0);
+ show_inline = FALSE;
+
+ /* For tomorrow, I need to extract a string representation of our iCal object, and
+ copy it into the `data' member, to send via CORBA. */
+
+
+
+ CORBA_exception_free (&ev);
+
+ bonobo_object_unref (BONOBO_OBJECT (bonobo_server));
+
+
+}
+
+
static void
add_button_clicked_cb (GtkWidget *widget, gpointer data)
{
@@ -583,14 +688,6 @@ edit_button_clicked_cb (GtkWidget *widget, gpointer data)
icalproperty_remove_parameter (prop, ICAL_RSVP_PARAMETER);
icalproperty_remove_parameter (prop, ICAL_PARTSTAT_PARAMETER);
-#if 0
- /* This was used when I was debugging libical. */
- param = get_icalparam_by_type (prop, ICAL_ROLE_PARAMETER);
- if (param != NULL)
- g_print ("e-meeting-edit.c: param should be NULL, but it isn't.\n");
-#endif
-
-
param = icalparameter_new_clone (get_icalparam_by_type (new_prop, ICAL_ROLE_PARAMETER));
g_assert (param != NULL);
icalproperty_add_parameter (prop, param);
@@ -719,6 +816,10 @@ e_meeting_edit (EMeetingEditor *editor)
gtk_signal_connect (GTK_OBJECT (priv->schedule_button), "clicked",
GTK_SIGNAL_FUNC (schedule_button_clicked_cb), editor);
+
+ gtk_signal_connect (GTK_OBJECT (priv->send_button), "clicked",
+ GTK_SIGNAL_FUNC (send_button_clicked_cb), editor);
+
add_button = glade_xml_get_widget (priv->xml, "add_button");
delete_button = glade_xml_get_widget (priv->xml, "delete_button");