diff options
-rw-r--r-- | mail/ChangeLog | 8 | ||||
-rw-r--r-- | mail/mail-account-gui.c | 152 |
2 files changed, 159 insertions, 1 deletions
diff --git a/mail/ChangeLog b/mail/ChangeLog index f850374bd8..0cc9d67efb 100644 --- a/mail/ChangeLog +++ b/mail/ChangeLog @@ -1,3 +1,11 @@ +2004-04-23 Sarfraaz Ahmed <asarfraaz@novell.com> + + * mail-account-gui.c (mail_account_gui_source_complete): Added a + check for HAS_LICENSE flag. + (mail_account_gui_check_for_license)(display_license) + (populate_text_entry)(check_button_state)(set_license_accepted) + (set_license_rejected): Implemented + 2004-04-22 Not Zed <NotZed@Ximian.com> * em-migrate.c (em_migrate_imap_cmeta_1_4): do the imap cmeta diff --git a/mail/mail-account-gui.c b/mail/mail-account-gui.c index 3814f9bf97..ed91f4ae29 100644 --- a/mail/mail-account-gui.c +++ b/mail/mail-account-gui.c @@ -27,6 +27,8 @@ #include <config.h> #endif +#include <glib.h> + #include <string.h> #include <stdarg.h> @@ -155,6 +157,116 @@ auto_detected_foreach (gpointer key, gpointer value, gpointer user_data) g_free (value); } +static void +set_license_rejected (GtkWidget *widget, gpointer data) +{ + gtk_dialog_response (GTK_DIALOG (data), GTK_RESPONSE_DELETE_EVENT); + return; +} + +static void +set_license_accepted (GtkWidget *widget, gpointer data) +{ + gtk_dialog_response (GTK_DIALOG (data), GTK_RESPONSE_ACCEPT); + return; + +} + +static void +check_button_state (GtkToggleButton *button, gpointer data) +{ + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (button))) + gtk_widget_set_sensitive (GTK_WIDGET (data), TRUE); + else + gtk_widget_set_sensitive (GTK_WIDGET (data), FALSE); +} + + +static gboolean +populate_text_entry (GtkTextView *view, const char *filename) +{ + FILE *fd; + char *filebuf; + GtkTextIter iter; + GtkTextBuffer *buffer; + int count; + + g_return_val_if_fail (filename != NULL , FALSE); + + fd = fopen (filename, "r"); + + if (!fd) { + /* FIXME: Should never come here */ + return FALSE; + } + + filebuf = g_malloc (1024); + + buffer = gtk_text_buffer_new (NULL); + gtk_text_buffer_get_start_iter (buffer, &iter); + + while (!feof (fd) && !ferror (fd)) { + count = fread (filebuf, 1, sizeof (filebuf), fd); + gtk_text_buffer_insert (buffer, &iter, filebuf, count); + } + gtk_text_view_set_buffer (GTK_TEXT_VIEW (view), + GTK_TEXT_BUFFER (buffer)); + fclose (fd); + g_free (filebuf); + return TRUE; +} + +static gboolean +display_license(const char *filename) +{ + GladeXML *xml; + GtkWidget *top_widget; + GtkTextView *text_entry; + GtkButton *button_yes, *button_no; + GtkCheckButton *check_button; + GtkResponseType response; + gboolean status; + + xml = glade_xml_new (EVOLUTION_GLADEDIR "/mail-license.glade", + "lic_dialog", NULL); + + top_widget = glade_xml_get_widget (xml, "lic_dialog"); + text_entry = GTK_TEXT_VIEW (glade_xml_get_widget (xml, "textview1")); + status = populate_text_entry (GTK_TEXT_VIEW (text_entry), filename); + if (!status) + goto failed; + + gtk_text_view_set_editable (GTK_TEXT_VIEW (text_entry), FALSE); + + button_yes = GTK_BUTTON (glade_xml_get_widget (xml, "lic_yes_button")); + gtk_widget_set_sensitive (GTK_WIDGET (button_yes), FALSE); + + button_no = GTK_BUTTON (glade_xml_get_widget (xml, "lic_no_button")); + + check_button = GTK_CHECK_BUTTON (glade_xml_get_widget (xml, + "lic_checkbutton")); + + g_signal_connect (check_button, "toggled", + G_CALLBACK (check_button_state), button_yes); + g_signal_connect (button_yes, "clicked", + G_CALLBACK (set_license_accepted), + GTK_WIDGET (top_widget)); + g_signal_connect (button_no, "clicked", + G_CALLBACK (set_license_rejected), + GTK_WIDGET (top_widget)); + + response = gtk_dialog_run (GTK_DIALOG (top_widget)); + if (response == GTK_RESPONSE_ACCEPT) { + gtk_widget_destroy (top_widget); + g_object_unref (xml); + return TRUE; + } +failed: + gtk_widget_destroy (top_widget); + g_object_unref (xml); + return FALSE; +} + static gboolean service_complete (MailAccountGuiService *service, GHashTable *extra_config, GtkWidget **incomplete) { @@ -216,6 +328,40 @@ service_complete (MailAccountGuiService *service, GHashTable *extra_config, GtkW } gboolean +mail_account_gui_check_for_license (CamelProvider *prov) +{ + GConfClient *gconf; + gboolean accepted, status; + char *gconf_license_key; + + if (prov->flags & CAMEL_PROVIDER_HAS_LICENSE) { + gconf = mail_config_get_gconf_client (); + gconf_license_key = g_strdup_printf ( + "/apps/evolution/mail/licenses/%s_accepted", + prov->license); + + accepted = gconf_client_get_bool (gconf, gconf_license_key, + NULL); + if (!accepted) { + /* Since the license is not yet accepted, pop-up a + * dialog to display the license agreement and check + * if the user accepts it + */ + + if (display_license (prov->license_file)) { + status = gconf_client_set_bool (gconf, + gconf_license_key, TRUE, NULL); + } else { + g_free (gconf_license_key); + return FALSE; + } + } + g_free (gconf_license_key); + } + return TRUE; +} + +gboolean mail_account_gui_source_complete (MailAccountGui *gui, GtkWidget **incomplete) { return service_complete (&gui->source, gui->extra_config, incomplete); @@ -492,6 +638,7 @@ source_type_changed (GtkWidget *widget, gpointer user_data) GtkWidget *file_entry, *label, *frame, *dwidget = NULL; CamelProvider *provider; gboolean writeable; + gboolean license_accepted = TRUE; provider = g_object_get_data ((GObject *) widget, "provider"); @@ -521,8 +668,11 @@ source_type_changed (GtkWidget *widget, gpointer user_data) else gtk_label_set_text (gui->source.description, ""); + if (gui->source.provider) + license_accepted = mail_account_gui_check_for_license (gui->source.provider); + frame = glade_xml_get_widget (gui->xml, "source_frame"); - if (provider) { + if (provider && license_accepted) { gtk_widget_show (frame); /* hostname */ |