diff options
Diffstat (limited to 'e-util/e-send-options.c')
-rw-r--r-- | e-util/e-send-options.c | 767 |
1 files changed, 767 insertions, 0 deletions
diff --git a/e-util/e-send-options.c b/e-util/e-send-options.c new file mode 100644 index 0000000000..bf50dbefc0 --- /dev/null +++ b/e-util/e-send-options.c @@ -0,0 +1,767 @@ +/* + * Evolution calendar - Main page of the Groupwise send options Dialog + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) version 3. + * + * 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the program; if not, see <http://www.gnu.org/licenses/> + * + * + * Authors: + * Chenthill Palanisamy <pchenthill@novell.com> + * + * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) + * + */ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include "e-send-options.h" + +#include <string.h> +#include <glib/gi18n.h> +#include <time.h> + +#include "e-dateedit.h" +#include "e-misc-utils.h" +#include "e-util-private.h" + +#define E_SEND_OPTIONS_DIALOG_GET_PRIVATE(obj) \ + (G_TYPE_INSTANCE_GET_PRIVATE \ + ((obj), E_TYPE_SEND_OPTIONS_DIALOG, ESendOptionsDialogPrivate)) + +struct _ESendOptionsDialogPrivate { + GtkBuilder *builder; + + gboolean gopts_needed; + gboolean global; + + /* Widgets */ + + GtkWidget *main; + + /* Noteboook to add options page and status tracking page*/ + GtkNotebook *notebook; + + GtkWidget *status; + + /* priority */ + GtkWidget *priority; + + /* Security */ + GtkWidget *security; + + /* Widgets for Reply Requestion options */ + GtkWidget *reply_request; + GtkWidget *reply_convenient; + GtkWidget *reply_within; + GtkWidget *within_days; + + /* Widgets for delay delivery Option */ + GtkWidget *delay_delivery; + GtkWidget *delay_until; + + /* Widgets for Choosing expiration date */ + GtkWidget *expiration; + GtkWidget *expire_after; + + /* Widgets to for tracking information through sent Item */ + GtkWidget *create_sent; + GtkWidget *delivered; + GtkWidget *delivered_opened; + GtkWidget *all_info; + GtkWidget *autodelete; + + /* Widgets for setting the Return Notification */ + GtkWidget *when_opened; + GtkWidget *when_declined; + GtkWidget *when_accepted; + GtkWidget *when_completed; + + /* label widgets */ + GtkWidget *security_label; + GtkWidget *priority_label; + GtkWidget *gopts_label; + GtkWidget *opened_label; + GtkWidget *declined_label; + GtkWidget *accepted_label; + GtkWidget *completed_label; + GtkWidget *until_label; + gchar *help_section; +}; + +static void e_send_options_dialog_finalize (GObject *object); +static void e_send_options_cb (GtkDialog *dialog, gint state, gpointer func_data); + +enum { + SOD_RESPONSE, + LAST_SIGNAL +}; + +static guint signals[LAST_SIGNAL] = {0}; + +G_DEFINE_TYPE ( + ESendOptionsDialog, + e_send_options_dialog, + G_TYPE_OBJECT) + +static void +e_send_options_get_widgets_data (ESendOptionsDialog *sod) +{ + ESendOptionsDialogPrivate *priv; + ESendOptionsGeneral *gopts; + ESendOptionsStatusTracking *sopts; + + priv = sod->priv; + gopts = sod->data->gopts; + sopts = sod->data->sopts; + + gopts->priority = gtk_combo_box_get_active ((GtkComboBox *) priv->priority); + gopts->security = gtk_combo_box_get_active ((GtkComboBox *) priv->security); + + gopts->reply_enabled = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->reply_request)); + gopts->reply_convenient = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->reply_convenient)); + gopts->reply_within = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (priv->within_days)); + + gopts->expiration_enabled = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->expiration)); + gopts->expire_after = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (priv->expire_after)); + gopts->delay_enabled = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->delay_delivery)); + + if (e_date_edit_date_is_valid (E_DATE_EDIT (priv->delay_until)) && + e_date_edit_time_is_valid (E_DATE_EDIT (priv->delay_until))) + gopts->delay_until = e_date_edit_get_time (E_DATE_EDIT (priv->delay_until)); + + sopts->tracking_enabled = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->create_sent)); + + sopts->autodelete = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->autodelete)); + + if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->delivered))) + sopts->track_when = E_DELIVERED; + else if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->delivered_opened))) + sopts->track_when = E_DELIVERED_OPENED; + else + sopts->track_when = E_ALL; + + sopts->opened = gtk_combo_box_get_active ((GtkComboBox *) priv->when_opened); + sopts->accepted = gtk_combo_box_get_active ((GtkComboBox *) priv->when_accepted); + sopts->declined = gtk_combo_box_get_active ((GtkComboBox *) priv->when_declined); + sopts->completed = gtk_combo_box_get_active ((GtkComboBox *) priv->when_completed); +} + +static void +e_send_options_fill_widgets_with_data (ESendOptionsDialog *sod) +{ + ESendOptionsDialogPrivate *priv; + ESendOptionsGeneral *gopts; + ESendOptionsStatusTracking *sopts; + time_t tmp; + + priv = sod->priv; + gopts = sod->data->gopts; + sopts = sod->data->sopts; + tmp = time (NULL); + + gtk_combo_box_set_active ((GtkComboBox *) priv->priority, gopts->priority); + gtk_combo_box_set_active ((GtkComboBox *) priv->security, gopts->security); + + if (gopts->reply_enabled) + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->reply_request), TRUE); + else + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->reply_request), FALSE); + + if (gopts->reply_convenient) + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->reply_convenient), TRUE); + else + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->reply_within), TRUE); + + gtk_spin_button_set_value (GTK_SPIN_BUTTON (priv->within_days), (gdouble) gopts->reply_within); + + if (gopts->expiration_enabled) + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->expiration), TRUE); + else + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->expiration), FALSE); + + gtk_spin_button_set_value (GTK_SPIN_BUTTON (priv->expire_after), (gdouble) gopts->expire_after); + + if (gopts->delay_enabled) + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->delay_delivery), TRUE); + else + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->delay_delivery), FALSE); + + if (!gopts->delay_until || difftime (gopts->delay_until, tmp) < 0) + e_date_edit_set_time (E_DATE_EDIT (priv->delay_until), 0); + else + e_date_edit_set_time (E_DATE_EDIT (priv->delay_until), gopts->delay_until); + + if (sopts->tracking_enabled) + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->create_sent), TRUE); + else + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->create_sent), FALSE); + + if (sopts->autodelete) + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->autodelete), TRUE); + else + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->autodelete), FALSE); + + switch (sopts->track_when) { + case E_DELIVERED: + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->delivered), TRUE); + break; + case E_DELIVERED_OPENED: + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->delivered_opened), TRUE); + break; + case E_ALL: + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->all_info), TRUE); + } + + gtk_combo_box_set_active ((GtkComboBox *) priv->when_opened, sopts->opened); + gtk_combo_box_set_active ((GtkComboBox *) priv->when_declined, sopts->declined); + gtk_combo_box_set_active ((GtkComboBox *) priv->when_accepted, sopts->accepted); + gtk_combo_box_set_active ((GtkComboBox *) priv->when_completed, sopts->completed); +} + +static void +sensitize_widgets (ESendOptionsDialog *sod) +{ + ESendOptionsDialogPrivate *priv; + ESendOptionsGeneral *gopts; + ESendOptionsStatusTracking *sopts; + + priv = sod->priv; + gopts = sod->data->gopts; + sopts = sod->data->sopts; + + if (!gopts->reply_enabled) { + gtk_widget_set_sensitive (priv->reply_convenient, FALSE); + gtk_widget_set_sensitive (priv->reply_within, FALSE); + gtk_widget_set_sensitive (priv->within_days, FALSE); + } + + if (!gopts->expiration_enabled) + gtk_widget_set_sensitive (priv->expire_after, FALSE); + + if (!gopts->delay_enabled) { + gtk_widget_set_sensitive (priv->delay_until, FALSE); + } + + if (!sopts->tracking_enabled) { + gtk_widget_set_sensitive (priv->delivered, FALSE); + gtk_widget_set_sensitive (priv->delivered_opened, FALSE); + gtk_widget_set_sensitive (priv->all_info, FALSE); + gtk_widget_set_sensitive (priv->autodelete, FALSE); + } +} + +static void +expiration_toggled_cb (GtkToggleButton *toggle, + gpointer data) +{ + gboolean active; + ESendOptionsDialog *sod; + ESendOptionsDialogPrivate *priv; + + sod = data; + priv = sod->priv; + + active = gtk_toggle_button_get_active (toggle); + + gtk_widget_set_sensitive (priv->expire_after, active); +} + +static void +reply_request_toggled_cb (GtkToggleButton *toggle, + gpointer data) +{ + gboolean active; + ESendOptionsDialog *sod; + ESendOptionsDialogPrivate *priv; + + sod = data; + priv = sod->priv; + active = gtk_toggle_button_get_active (toggle); + + gtk_widget_set_sensitive (priv->reply_convenient, active); + gtk_widget_set_sensitive (priv->reply_within, active); + gtk_widget_set_sensitive (priv->within_days, active); + +} + +static void +delay_delivery_toggled_cb (GtkToggleButton *toggle, + gpointer data) +{ + gboolean active; + ESendOptionsDialog *sod; + ESendOptionsDialogPrivate *priv; + + sod = data; + priv = sod->priv; + active = gtk_toggle_button_get_active (toggle); + + gtk_widget_set_sensitive (priv->delay_until, active); +} + +static void +sent_item_toggled_cb (GtkToggleButton *toggle, + gpointer data) +{ + gboolean active; + ESendOptionsDialog *sod; + ESendOptionsDialogPrivate *priv; + + sod = data; + priv = sod->priv; + active = gtk_toggle_button_get_active (toggle); + + gtk_widget_set_sensitive (priv->delivered, active); + gtk_widget_set_sensitive (priv->delivered_opened, active); + gtk_widget_set_sensitive (priv->all_info, active); + gtk_widget_set_sensitive (priv->autodelete, active); +} + +static void +delay_until_date_changed_cb (GtkWidget *dedit, + gpointer data) +{ + ESendOptionsDialog *sod; + ESendOptionsDialogPrivate *priv; + time_t tmp, current; + + sod = data; + priv = sod->priv; + + current = time (NULL); + tmp = e_date_edit_get_time (E_DATE_EDIT (priv->delay_until)); + + if ((difftime (tmp, current) < 0) || !e_date_edit_time_is_valid (E_DATE_EDIT (priv->delay_until)) + || !e_date_edit_date_is_valid (E_DATE_EDIT (priv->delay_until))) + e_date_edit_set_time (E_DATE_EDIT (priv->delay_until), 0); + +} +static void +page_changed_cb (GtkNotebook *notebook, + GtkWidget *page, + gint num, + gpointer data) +{ + ESendOptionsDialog *sod = data; + ESendOptionsDialogPrivate *priv = sod->priv; + + e_send_options_get_widgets_data (sod); + if (num > 0) { + GtkWidget *child; + + if (num == 1) { + gtk_widget_hide (priv->accepted_label); + gtk_widget_hide (priv->when_accepted); + gtk_widget_hide (priv->completed_label); + gtk_widget_hide (priv->when_completed); + gtk_widget_set_sensitive (priv->autodelete, TRUE); + sod->data->sopts = sod->data->mopts; + + child = gtk_notebook_get_nth_page (notebook, 1); + if (child != priv->status && (!GTK_IS_BIN (child) || gtk_bin_get_child (GTK_BIN (child)) != priv->status)) + gtk_widget_reparent (priv->status, child); + } else if (num == 2) { + gtk_widget_hide (priv->completed_label); + gtk_widget_hide (priv->when_completed); + gtk_widget_set_sensitive (priv->autodelete, FALSE); + + gtk_widget_show (priv->accepted_label); + gtk_widget_show (priv->when_accepted); + sod->data->sopts = sod->data->copts; + + child = gtk_notebook_get_nth_page (notebook, 2); + if (gtk_bin_get_child (GTK_BIN (child)) != priv->status) + gtk_widget_reparent (priv->status, child); + } else { + gtk_widget_set_sensitive (priv->autodelete, FALSE); + + gtk_widget_show (priv->completed_label); + gtk_widget_show (priv->when_completed); + gtk_widget_show (priv->accepted_label); + gtk_widget_show (priv->when_accepted); + sod->data->sopts = sod->data->topts; + + child = gtk_notebook_get_nth_page (notebook, 3); + if (gtk_bin_get_child (GTK_BIN (child)) != priv->status) + gtk_widget_reparent (priv->status, child); + } + } + e_send_options_fill_widgets_with_data (sod); +} + +static void +init_widgets (ESendOptionsDialog *sod) +{ + ESendOptionsDialogPrivate *priv; + + priv = sod->priv; + + g_signal_connect ( + priv->expiration, "toggled", + G_CALLBACK (expiration_toggled_cb), sod); + g_signal_connect ( + priv->reply_request, "toggled", + G_CALLBACK (reply_request_toggled_cb), sod); + g_signal_connect ( + priv->delay_delivery, "toggled", + G_CALLBACK (delay_delivery_toggled_cb), sod); + g_signal_connect ( + priv->create_sent, "toggled", + G_CALLBACK (sent_item_toggled_cb), sod); + + g_signal_connect ( + priv->main, "response", + G_CALLBACK (e_send_options_cb), sod); + g_signal_connect ( + priv->delay_until, "changed", + G_CALLBACK (delay_until_date_changed_cb), sod); + + if (priv->global) + g_signal_connect ( + priv->notebook, "switch-page", + G_CALLBACK (page_changed_cb), sod); + +} + +static gboolean +get_widgets (ESendOptionsDialog *sod) +{ + ESendOptionsDialogPrivate *priv; + GtkBuilder *builder; + + priv = sod->priv; + builder = sod->priv->builder; + + priv->main = e_builder_get_widget (builder, "send-options-dialog"); + if (!priv->main) + return FALSE; + + priv->priority = e_builder_get_widget (builder, "combo-priority"); + priv->status = e_builder_get_widget (builder, "status-tracking"); + priv->security = e_builder_get_widget (builder, "security-combo"); + priv->notebook = (GtkNotebook *) e_builder_get_widget (builder, "notebook"); + priv->reply_request = e_builder_get_widget (builder, "reply-request-button"); + priv->reply_convenient = e_builder_get_widget (builder, "reply-convinient"); + priv->reply_within = e_builder_get_widget (builder, "reply-within"); + priv->within_days = e_builder_get_widget (builder, "within-days"); + priv->delay_delivery = e_builder_get_widget (builder, "delay-delivery-button"); + priv->delay_until = e_builder_get_widget (builder, "until-date"); + gtk_widget_show (priv->delay_until); + priv->expiration = e_builder_get_widget (builder, "expiration-button"); + priv->expire_after = e_builder_get_widget (builder, "expire-after"); + priv->create_sent = e_builder_get_widget (builder, "create-sent-button"); + priv->delivered = e_builder_get_widget (builder, "delivered"); + priv->delivered_opened = e_builder_get_widget (builder, "delivered-opened"); + priv->all_info = e_builder_get_widget (builder, "all-info"); + priv->autodelete = e_builder_get_widget (builder, "autodelete"); + priv->when_opened = e_builder_get_widget (builder, "open-combo"); + priv->when_declined = e_builder_get_widget (builder, "delete-combo"); + priv->when_accepted = e_builder_get_widget (builder, "accept-combo"); + priv->when_completed = e_builder_get_widget (builder, "complete-combo"); + priv->security_label = e_builder_get_widget (builder, "security-label"); + priv->gopts_label = e_builder_get_widget (builder, "gopts-label"); + priv->priority_label = e_builder_get_widget (builder, "priority-label"); + priv->until_label = e_builder_get_widget (builder, "until-label"); + priv->opened_label = e_builder_get_widget (builder, "opened-label"); + priv->declined_label = e_builder_get_widget (builder, "declined-label"); + priv->accepted_label = e_builder_get_widget (builder, "accepted-label"); + priv->completed_label = e_builder_get_widget (builder, "completed-label"); + + return (priv->priority + && priv->security + && priv->status + && priv->reply_request + && priv->reply_convenient + && priv->reply_within + && priv->within_days + && priv->delay_delivery + && priv->delay_until + && priv->expiration + && priv->expire_after + && priv->create_sent + && priv->delivered + && priv->delivered_opened + && priv->autodelete + && priv->all_info + && priv->when_opened + && priv->when_declined + && priv->when_accepted + && priv->when_completed + && priv->security_label + && priv->priority_label + && priv->opened_label + && priv->gopts_label + && priv->declined_label + && priv->accepted_label + && priv->completed_label); + +} + +static void +setup_widgets (ESendOptionsDialog *sod, + Item_type type) +{ + ESendOptionsDialogPrivate *priv; + + priv = sod->priv; + + if (!priv->gopts_needed) { + gtk_notebook_set_show_tabs (priv->notebook, FALSE); + gtk_notebook_set_current_page (priv->notebook, 1); + gtk_widget_hide (priv->delay_until); + } else + gtk_notebook_set_show_tabs (priv->notebook, TRUE); + + gtk_label_set_mnemonic_widget (GTK_LABEL (priv->priority_label), priv->priority); + gtk_label_set_mnemonic_widget (GTK_LABEL (priv->security_label), priv->security); + gtk_label_set_mnemonic_widget (GTK_LABEL (priv->accepted_label), priv->when_accepted); + gtk_label_set_mnemonic_widget (GTK_LABEL (priv->declined_label), priv->when_declined); + gtk_label_set_mnemonic_widget (GTK_LABEL (priv->opened_label), priv->when_opened); + gtk_label_set_mnemonic_widget (GTK_LABEL (priv->completed_label), priv->when_completed); + gtk_label_set_mnemonic_widget (GTK_LABEL (priv->until_label), priv->delay_until); + + if (priv->global) { + GtkWidget *widget, *page; + + widget = gtk_label_new (_("Mail")); + page = gtk_alignment_new (0.0, 0.0, 0.0, 0.0); + gtk_widget_reparent (priv->status, page); + gtk_notebook_append_page (priv->notebook, page, widget); + gtk_container_child_set (GTK_CONTAINER (priv->notebook), page, "tab-fill", FALSE, "tab-expand", FALSE, NULL); + gtk_widget_show (page); + gtk_widget_show (widget); + + widget = gtk_label_new (_("Calendar")); + page = gtk_alignment_new (0.0, 0.0, 0.0, 0.0); + gtk_notebook_append_page (priv->notebook, page, widget); + gtk_container_child_set (GTK_CONTAINER (priv->notebook), page, "tab-fill", FALSE, "tab-expand", FALSE, NULL); + gtk_widget_show (page); + gtk_widget_show (widget); + + widget = gtk_label_new (_("Task")); + page = gtk_alignment_new (0.0, 0.0, 0.0, 0.0); + gtk_notebook_append_page (priv->notebook, page, widget); + gtk_container_child_set (GTK_CONTAINER (priv->notebook), page, "tab-fill", FALSE, "tab-expand", FALSE, NULL); + gtk_widget_show (page); + gtk_widget_show (widget); + + gtk_notebook_set_show_tabs (priv->notebook, TRUE); + } + + switch (type) { + case E_ITEM_MAIL: + priv->help_section = g_strdup ("groupwise-placeholder"); + gtk_widget_hide (priv->accepted_label); + gtk_widget_hide (priv->when_accepted); + gtk_widget_hide (priv->completed_label); + gtk_widget_hide (priv->when_completed); + gtk_label_set_text_with_mnemonic (GTK_LABEL (priv->declined_label), (_("When de_leted:"))); + break; + case E_ITEM_CALENDAR: + priv->help_section = g_strdup ("groupwise-placeholder"); + gtk_widget_hide (priv->completed_label); + gtk_widget_hide (priv->when_completed); + case E_ITEM_TASK: + priv->help_section = g_strdup ("groupwise-placeholder"); + gtk_widget_hide (priv->security_label); + gtk_widget_hide (priv->security); + gtk_widget_set_sensitive (priv->autodelete, FALSE); + break; + default: + break; + } +} + +ESendOptionsDialog * +e_send_options_dialog_new (void) +{ + ESendOptionsDialog *sod; + + sod = g_object_new (E_TYPE_SEND_OPTIONS_DIALOG, NULL); + + return sod; +} + +void +e_send_options_set_need_general_options (ESendOptionsDialog *sod, + gboolean needed) +{ + g_return_if_fail (E_IS_SEND_OPTIONS_DIALOG (sod)); + + sod->priv->gopts_needed = needed; +} + +gboolean +e_send_options_get_need_general_options (ESendOptionsDialog *sod) +{ + g_return_val_if_fail (E_IS_SEND_OPTIONS_DIALOG (sod), FALSE); + + return sod->priv->gopts_needed; +} + +gboolean +e_send_options_set_global (ESendOptionsDialog *sod, + gboolean set) +{ + g_return_val_if_fail (E_IS_SEND_OPTIONS_DIALOG (sod), FALSE); + + sod->priv->global = set; + + return TRUE; +} + +static void +e_send_options_cb (GtkDialog *dialog, + gint state, + gpointer func_data) +{ + ESendOptionsDialogPrivate *priv; + ESendOptionsDialog *sod; + + sod = func_data; + priv = sod->priv; + + switch (state) { + case GTK_RESPONSE_OK: + e_send_options_get_widgets_data (sod); + case GTK_RESPONSE_CANCEL: + gtk_widget_hide (priv->main); + gtk_widget_destroy (priv->main); + g_object_unref (priv->builder); + break; + case GTK_RESPONSE_HELP: + e_display_help ( + GTK_WINDOW (priv->main), + priv->help_section); + break; + } + + g_signal_emit (func_data, signals[SOD_RESPONSE], 0, state); +} + +gboolean +e_send_options_dialog_run (ESendOptionsDialog *sod, + GtkWidget *parent, + Item_type type) +{ + ESendOptionsDialogPrivate *priv; + GtkWidget *toplevel; + + g_return_val_if_fail (sod != NULL || E_IS_SEND_OPTIONS_DIALOG (sod), FALSE); + + priv = sod->priv; + + /* Make sure our custom widget classes are registered with + * GType before we load the GtkBuilder definition file. */ + E_TYPE_DATE_EDIT; + + priv->builder = gtk_builder_new (); + e_load_ui_builder_definition (priv->builder, "e-send-options.ui"); + + if (!get_widgets (sod)) { + g_object_unref (priv->builder); + g_message (G_STRLOC ": Could not get the Widgets \n"); + return FALSE; + } + + if (priv->global) { + g_free (sod->data->sopts); + sod->data->sopts = sod->data->mopts; + } + + setup_widgets (sod, type); + + toplevel = gtk_widget_get_toplevel (priv->main); + if (parent) + gtk_window_set_transient_for (GTK_WINDOW (toplevel), + GTK_WINDOW (parent)); + + e_send_options_fill_widgets_with_data (sod); + sensitize_widgets (sod); + init_widgets (sod); + gtk_window_set_modal ((GtkWindow *) priv->main, TRUE); + + gtk_widget_show (priv->main); + + return TRUE; +} + +static void +e_send_options_dialog_finalize (GObject *object) +{ + ESendOptionsDialog *sod; + + sod = E_SEND_OPTIONS_DIALOG (object); + + g_free (sod->priv->help_section); + + g_free (sod->data->gopts); + + if (!sod->priv->global) + g_free (sod->data->sopts); + + g_free (sod->data->mopts); + g_free (sod->data->copts); + g_free (sod->data->topts); + g_free (sod->data); + + /* Chain up to parent's finalize() method. */ + G_OBJECT_CLASS (e_send_options_dialog_parent_class)->finalize (object); +} + +/* Object initialization function for the task page */ +static void +e_send_options_dialog_init (ESendOptionsDialog *sod) +{ + ESendOptionsData *new; + + new = g_new0 (ESendOptionsData, 1); + new->gopts = g_new0 (ESendOptionsGeneral, 1); + new->sopts = g_new0 (ESendOptionsStatusTracking, 1); + new->mopts = g_new0 (ESendOptionsStatusTracking, 1); + new->copts = g_new0 (ESendOptionsStatusTracking, 1); + new->topts = g_new0 (ESendOptionsStatusTracking, 1); + + sod->priv = E_SEND_OPTIONS_DIALOG_GET_PRIVATE (sod); + + sod->data = new; + sod->data->initialized = FALSE; + sod->data->gopts->security = 0; + + sod->priv->gopts_needed = TRUE; +} + +/* Class initialization function for the Send Options */ +static void +e_send_options_dialog_class_init (ESendOptionsDialogClass *class) +{ + GObjectClass *object_class; + + g_type_class_add_private (class, sizeof (ESendOptionsDialogPrivate)); + + object_class = G_OBJECT_CLASS (class); + object_class->finalize = e_send_options_dialog_finalize; + + signals[SOD_RESPONSE] = g_signal_new ( + "sod_response", + G_TYPE_FROM_CLASS (class), + G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET (ESendOptionsDialogClass, sod_response), + NULL, NULL, + g_cclosure_marshal_VOID__INT, + G_TYPE_NONE, 1, + G_TYPE_INT); + +} |