Re: [evolution-patches] camel provider changes for connector



On Mon, 2004-05-03 at 16:43 +0800, Not Zed wrote:

Almost there.


Hope, i am there now :) ... Attached the updated patch.

                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>


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]