/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */ /* e-summary-callbacks.c * * Author: * Iain Holmes * * Copyright (C) 2000 Helix Code, Inc. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public * License along with this program; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include #include "e-summary.h" #include "Composer.h" #define COMPOSER_IID "OAFIID:GNOME_Evolution_Mail_Composer" typedef struct _PropertyData { ESummary *esummary; GnomePropertyBox *box; GladeXML *xml; } PropertyData; void embed_service (GtkWidget *widget, ESummary *esummary) { char *required_interfaces[2] = {"IDL:GNOME/Evolution:Summary:ComponentFactory:1.0", NULL}; char *obj_id; obj_id = bonobo_selector_select_id ("Select a service", (const char **) required_interfaces); if (obj_id == NULL) return; e_summary_embed_service_from_id (esummary, obj_id); } void new_mail (GtkWidget *widget, ESummary *esummary) { GNOME_Evolution_Composer_RecipientList *to, *cc, *bcc; CORBA_char *subject; CORBA_Object composer; CORBA_Environment ev; CORBA_exception_init (&ev); composer = oaf_activate_from_id ((char *)COMPOSER_IID, 0, NULL, &ev); if (ev._major != CORBA_NO_EXCEPTION || composer == NULL) { CORBA_exception_free (&ev); g_warning ("Unable to start composer component!"); return; } CORBA_exception_free (&ev); to = GNOME_Evolution_Composer_RecipientList__alloc (); to->_length = 0; to->_maximum = 0; to->_buffer = CORBA_sequence_GNOME_Evolution_Composer_Recipient_allocbuf (0); cc = GNOME_Evolution_Composer_RecipientList__alloc (); cc->_length = 0; cc->_maximum = 0; cc->_buffer = CORBA_sequence_GNOME_Evolution_Composer_Recipient_allocbuf (0); bcc = GNOME_Evolution_Composer_RecipientList__alloc (); bcc->_length = 0; bcc->_maximum = 0; bcc->_buffer = CORBA_sequence_GNOME_Evolution_Composer_Recipient_allocbuf (0); subject = CORBA_string_dup (""); CORBA_exception_init (&ev); GNOME_Evolution_Composer_setHeaders (composer, to, cc, bcc, subject, &ev); if (ev._major != CORBA_NO_EXCEPTION) { CORBA_exception_free (&ev); CORBA_free (to); CORBA_free (cc); CORBA_free (bcc); CORBA_free (subject); g_warning ("Error setting headers!"); return; } CORBA_free (to); CORBA_free (cc); CORBA_free (bcc); CORBA_free (subject); GNOME_Evolution_Composer_show (composer, &ev); if (ev._major != CORBA_NO_EXCEPTION) { CORBA_exception_free (&ev); g_warning ("Error showing composer"); return; } CORBA_exception_free (&ev); return; } static void destroy_prefs_cb (GtkObject *object, PropertyData *data) { gtk_object_unref (data->xml); g_free (data); } static void html_page_changed_cb (GtkEntry *entry, PropertyData *data) { ESummaryPrefs *prefs; /* Change the tmp prefs so that we can restore if the user cancels */ prefs = data->esummary->tmp_prefs; if (prefs->page) g_free (prefs->page); prefs->page = g_strdup (gtk_entry_get_text (entry)); gnome_property_box_changed (data->box); } static void apply_prefs_cb (GnomePropertyBox *property_box, int page, ESummary *esummary) { g_print ("Applying\n"); if (page != -1) return; esummary->prefs = e_summary_prefs_copy (esummary->tmp_prefs); e_summary_reconfigure (esummary); } void configure_summary (GtkWidget *widget, ESummary *esummary) { static GtkWidget *prefs = NULL; PropertyData *data; GtkWidget *html_page; if (prefs != NULL) { g_assert (GTK_WIDGET_REALIZED (prefs)); gdk_window_show (prefs->window); gdk_window_raise (prefs->window); return; } data = g_new (PropertyData, 1); data->esummary = esummary; if (esummary->tmp_prefs != NULL) { e_summary_prefs_free (esummary->tmp_prefs); } esummary->tmp_prefs = e_summary_prefs_copy (esummary->prefs); data->xml = glade_xml_new (EVOLUTION_GLADEDIR "/executive-summary-config.glade", NULL); prefs = glade_xml_get_widget (data->xml, "summaryprefs"); data->box = prefs; html_page = glade_xml_get_widget (data->xml, "htmlpage"); if (esummary->prefs->page != NULL) gtk_entry_set_text (GTK_ENTRY (gnome_file_entry_gtk_entry (GNOME_FILE_ENTRY (html_page))), esummary->prefs->page); gtk_signal_connect (GTK_OBJECT (gnome_file_entry_gtk_entry (GNOME_FILE_ENTRY (html_page))), "changed", GTK_SIGNAL_FUNC (html_page_changed_cb), data); gtk_signal_connect (GTK_OBJECT (prefs), "apply", GTK_SIGNAL_FUNC (apply_prefs_cb), esummary); gtk_signal_connect (GTK_OBJECT (prefs), "destroy", GTK_SIGNAL_FUNC (destroy_prefs_cb), data); gtk_signal_connect (GTK_OBJECT (prefs), "destroy", GTK_SIGNAL_FUNC (gtk_widget_destroyed), &prefs); }