Hope, i am there now ... Attached the updated patch.
Almost there.
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);
+ if (display_license (prov)) {
+ providers_list = g_slist_append (providers_list,
+ (gpointer)prov->protocol);
+ status = gconf_client_set_list (gconf,
+ "/apps/evolution/mail/licenses",
+ GCONF_VALUE_STRING,
+ providers_list, NULL);
} else {
- g_free (gconf_license_key);
+ g_slist_free (providers_list);
return FALSE;
}
}
- g_free (gconf_license_key);
+ g_slist_free (providers_list);
}
you also have to free the strings in the slist, otherwise they leak.
I suggest instead of having the two return statements, just have one at the end, and let the logic fall through to that case. This way you only need 1 copy of the free code.
e.g. "return accepted;" at the end, and set accepted based on the display_license return.
Thanks -- Sarfraaz Ahmed <asarfraaz novell com> |
Index: mail-account-gui.c =================================================================== RCS file: /cvs/gnome/evolution/mail/mail-account-gui.c,v retrieving revision 1.161 diff -u -r1.161 mail-account-gui.c --- mail-account-gui.c 28 Apr 2004 06:39:25 -0000 1.161 +++ mail-account-gui.c 3 May 2004 11:05:41 -0000 @@ -157,21 +157,6 @@ 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) { @@ -217,14 +202,16 @@ } static gboolean -display_license(const char *filename) +display_license (CamelProvider *prov) { GladeXML *xml; GtkWidget *top_widget; GtkTextView *text_entry; GtkButton *button_yes, *button_no; GtkCheckButton *check_button; - GtkResponseType response; + GtkResponseType response = GTK_RESPONSE_NONE; + GtkLabel *top_label; + char *label_text, *dialog_title; gboolean status; xml = glade_xml_new (EVOLUTION_GLADEDIR "/mail-license.glade", @@ -232,7 +219,7 @@ 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); + status = populate_text_entry (GTK_TEXT_VIEW (text_entry), prov->license_file); if (!status) goto failed; @@ -246,25 +233,31 @@ check_button = GTK_CHECK_BUTTON (glade_xml_get_widget (xml, "lic_checkbutton")); + top_label = GTK_LABEL (glade_xml_get_widget (xml, "lic_top_label")); + + label_text = g_strdup_printf (_("\n Please read carefully the license agreement\n" + " for %s displayed below\n" + " and tick the check box for accepting it\n"), prov->license_name); + + gtk_label_set_label (top_label, label_text); + + dialog_title = g_strdup_printf (_("%s License Agreement"), prov->license_name); + + gtk_window_set_title (GTK_WINDOW (top_widget), dialog_title); + 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; - } + + g_free (label_text); + g_free (dialog_title); + failed: gtk_widget_destroy (top_widget); g_object_unref (xml); - return FALSE; + + return (response == GTK_RESPONSE_ACCEPT); } static gboolean @@ -331,34 +324,43 @@ mail_account_gui_check_for_license (CamelProvider *prov) { GConfClient *gconf; - gboolean accepted, status; - char *gconf_license_key; + gboolean accepted = TRUE, status; + GSList * providers_list, *l, *n; + char *provider; 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); + providers_list = gconf_client_get_list (gconf, "/apps/evolution/mail/licenses", GCONF_VALUE_STRING, NULL); + + for (l = providers_list, accepted = FALSE; l && !accepted; l = g_slist_next (l)) + accepted = (strcmp ((char *)l->data, prov->protocol) == 0); 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; + /* accepted = display_license (prov); */ + if ((accepted = display_license (prov)) == TRUE) { + provider = g_strdup (prov->protocol); + providers_list = g_slist_append (providers_list, + provider); + status = gconf_client_set_list (gconf, + "/apps/evolution/mail/licenses", + GCONF_VALUE_STRING, + providers_list, NULL); } } - g_free (gconf_license_key); + l = providers_list; + while (l) { + n = g_slist_next (l); + g_free (l->data); + g_slist_free_1 (l); + l = n; + } } - return TRUE; + return accepted; } gboolean Index: evolution-mail.schemas.in.in =================================================================== RCS file: /cvs/gnome/evolution/mail/evolution-mail.schemas.in.in,v retrieving revision 1.14 diff -u -r1.14 evolution-mail.schemas.in.in --- evolution-mail.schemas.in.in 30 Apr 2004 18:23:21 -0000 1.14 +++ evolution-mail.schemas.in.in 3 May 2004 11:05:48 -0000 @@ -814,5 +814,21 @@ </locale> </schema> + <schema> + <key>/schemas/apps/evolution/mail/licenses</key> + <applyto>/apps/evolution/mail/licenses</applyto> + <owner>evolution-mail</owner> + <type>list</type> + <list_type>string</list_type> + <default></default> + <locale name="C"> + <short>List of accepted licenses</short> + <long> + List of protocol names whose license + has been accepted + </long> + </locale> + </schema> + </schemalist> </gconfschemafile> Index: mail-license.glade =================================================================== RCS file: /cvs/gnome/evolution/mail/mail-license.glade,v retrieving revision 1.1 diff -u -r1.1 mail-license.glade --- mail-license.glade 23 Apr 2004 06:15:39 -0000 1.1 +++ mail-license.glade 3 May 2004 11:05:54 -0000 @@ -5,7 +5,7 @@ <widget class="GtkDialog" id="lic_dialog"> <property name="visible">True</property> - <property name="title" translatable="yes">Exchange Connector License Agreement for Evolution</property> + <property name="title" translatable="yes">License Agreement</property> <property name="type">GTK_WINDOW_TOPLEVEL</property> <property name="window_position">GTK_WIN_POS_NONE</property> <property name="modal">False</property> @@ -29,10 +29,10 @@ <property name="visible">True</property> <property name="can_default">True</property> <property name="can_focus">True</property> - <property name="label" translatable="yes">NO</property> - <property name="use_underline">True</property> + <property name="label">gtk-no</property> + <property name="use_stock">True</property> <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="response_id">0</property> + <property name="response_id">-6</property> </widget> </child> @@ -41,10 +41,64 @@ <property name="visible">True</property> <property name="can_default">True</property> <property name="can_focus">True</property> - <property name="label" translatable="yes">YES</property> - <property name="use_underline">True</property> <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="response_id">0</property> + <property name="response_id">-3</property> + + <child> + <widget class="GtkAlignment" id="alignment1"> + <property name="visible">True</property> + <property name="xalign">0.5</property> + <property name="yalign">0.5</property> + <property name="xscale">0</property> + <property name="yscale">0</property> + + <child> + <widget class="GtkHBox" id="hbox1"> + <property name="visible">True</property> + <property name="homogeneous">False</property> + <property name="spacing">2</property> + + <child> + <widget class="GtkImage" id="image1"> + <property name="visible">True</property> + <property name="stock">gtk-yes</property> + <property name="icon_size">4</property> + <property name="xalign">0.5</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + + <child> + <widget class="GtkLabel" id="label1"> + <property name="visible">True</property> + <property name="label" translatable="yes">Accept License</property> + <property name="use_underline">True</property> + <property name="use_markup">False</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">False</property> + <property name="selectable">False</property> + <property name="xalign">0.5</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + </widget> + </child> + </widget> + </child> </widget> </child> </widget> @@ -66,8 +120,7 @@ <widget class="GtkLabel" id="lic_top_label"> <property name="visible">True</property> <property name="label" translatable="yes"> - Please read carefully the license agreement - for Evolution Exchange Connector displayed + Please read carefully the license agreement displayed below and tick the check box for accepting it </property> <property name="use_underline">False</property>