[evolution] Bug #588891 - Spam settings dialog terribly un-higgy



commit d21199c9199bceb3bba10ca41a0e4c7fa8b1ad36
Author: Dan Vrátil <dvratil redhat com>
Date:   Fri Apr 29 09:21:58 2011 +0200

    Bug #588891 - Spam settings dialog terribly un-higgy

 mail/mail-config.ui            |  120 ++++++++++++++++++++++++++++++++++++++++
 modules/mail/em-mailer-prefs.c |   83 +++++++++++++++-------------
 2 files changed, 164 insertions(+), 39 deletions(-)
---
diff --git a/mail/mail-config.ui b/mail/mail-config.ui
index 5305593..faabb28 100644
--- a/mail/mail-config.ui
+++ b/mail/mail-config.ui
@@ -5236,6 +5236,126 @@ for display purposes only. </property>
         <property name="tab_fill">False</property>
       </packing>
     </child>
+  </object> 
+  <object class="GtkDialog" id="add-custom-junk-header">
+    <property name="type_hint">dialog</property>
+    <property name="title" translatable="yes">Set custom junk header</property>
+    <property name="border-width">12</property>
+    <property name="width-request">400</property>
+    <property name="resizable">FALSE</property>
+    <child internal-child="vbox">
+      <object class="GtkVBox" id="inner-vbox">
+        <property name="visible">True</property>
+        <property name="orientation">vertical</property>
+        <property name="border-width">12</property>
+        <property name="spacing">12</property>
+        <child>
+          <object class="GtkLabel" id="junk_header_info">
+            <property name="visible">True</property>
+            <property name="wrap">True</property>
+            <property name="label" translatable="yes">All new emails with header that matches given content will be automatically filtered as junk</property>
+          </object>
+        </child>
+        <child>        
+          <object class="GtkTable" id="junk_header_table">
+            <property name="visible">True</property>
+            <property name="n_rows">2</property>
+            <property name="n_columns">2</property>
+            <property name="column_spacing">12</property>
+            <property name="row_spacing">6</property>
+            <child>
+              <object class="GtkLabel" id="junk_header_label1">
+                <property name="visible">True</property>
+                <property name="label" translatable="yes">Header name</property>
+                <property name="mnemonic_widget">junk-header-name</property>
+                <property name="xalign">0</property>
+              </object>
+	      <packing>
+		<property name="x_options">GTK_SHRINK</property>
+	      </packing>
+            </child>
+            <child>
+	      <object class="GtkLabel" id="junk_header_label2">
+	        <property name="visible">True</property>
+	        <property name="label" translatable="yes">Header content</property>
+	        <property name="mnemonic_widget">junk-header-content</property>
+	        <property name="xalign">0</property>
+	      </object>
+	      <packing>
+	        <property name="top_attach">1</property>
+	        <property name="bottom_attach">2</property>
+		<property name="x_options">GTK_SHRINK</property>
+	      </packing>
+	    </child>
+	    <child>
+	      <object class="GtkEntry" id="junk-header-name">
+	        <property name="visible">True</property>
+	        <property name="can_focus">True</property>
+	      </object>
+	      <packing>
+	        <property name="left_attach">1</property>
+	        <property name="right_attach">2</property>
+	      </packing>
+	    </child>
+	    <child>
+	      <object class="GtkEntry" id="junk-header-content">
+	        <property name="visible">True</property>
+	        <property name="can_focus">True</property>
+	      </object>
+	      <packing>
+	        <property name="left_attach">1</property>
+	        <property name="right_attach">2></property>
+	        <property name="top_attach">1</property>
+	        <property name="bottom_attach">2</property>
+	      </packing>
+	    </child>
+	  </object>
+        </child>
+        <child internal-child="action_area">
+          <object class="GtkHButtonBox" id="junk_header_hbutton_box">
+            <property name="visible">True</property>
+            <property name="layout_style">end</property>
+            <child>
+              <object class="GtkButton" id="junk-header-cancel">
+                <property name="label">gtk-cancel</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="use_stock">True</property>
+                <property name="use_underline">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="junk-header-ok">
+                <property name="label" translatable="yes">gtk-ok</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="use_stock">True</property>
+                <property name="use_underline">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="pack_type">end</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+    <action-widgets>
+    	<action-widget response="-6">junk-header-cancel</action-widget>
+        <action-widget response="-3">junk-header-ok</action-widget>
+    </action-widgets>
   </object>
   <object class="GtkSizeGroup" id="composer-label-size-group">
     <widgets>
diff --git a/modules/mail/em-mailer-prefs.c b/modules/mail/em-mailer-prefs.c
index 6147328..22feb95 100644
--- a/modules/mail/em-mailer-prefs.c
+++ b/modules/mail/em-mailer-prefs.c
@@ -163,55 +163,60 @@ jh_tree_refill (EMMailerPrefs *prefs)
 }
 
 static void
+jh_dialog_entry_changed_cb (GtkEntry *entry, gpointer user_data)
+{
+	GtkBuilder *builder = GTK_BUILDER (user_data);
+	GtkWidget *ok_button, *entry1, *entry2;
+	const gchar *name, *value;
+
+	ok_button = e_builder_get_widget (builder, "junk-header-ok");
+	entry1 = e_builder_get_widget (builder, "junk-header-name");
+	entry2 = e_builder_get_widget (builder, "junk-header-content");
+
+	name = gtk_entry_get_text (GTK_ENTRY (entry1));
+	value = gtk_entry_get_text (GTK_ENTRY (entry2));
+
+	gtk_widget_set_sensitive (ok_button, name && *name && value && *value);
+}
+
+static void
 jh_add_cb (GtkWidget *widget, gpointer user_data)
 {
+	GtkWidget *dialog;
+	GtkWidget *entry;
 	EMMailerPrefs *prefs = (EMMailerPrefs *) user_data;
-	GtkWidget *dialog, *l1, *l2, *entry1, *entry2, *vbox, *hbox;
-	GtkWidget *content_area;
-	gint response;
-
-	dialog = gtk_dialog_new_with_buttons (
-		_("Add Custom Junk Header"),
-		(GtkWindow *) gtk_widget_get_toplevel (widget),
-		GTK_DIALOG_DESTROY_WITH_PARENT,
-		GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
-		GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, NULL);
-
-	vbox = gtk_vbox_new (FALSE, 6);
-	hbox = gtk_hbox_new (FALSE, 0);
-	l1 = gtk_label_new_with_mnemonic (_("Header Name:"));
-	l2 = gtk_label_new_with_mnemonic (_("Header Value Contains:"));
-	entry1 = gtk_entry_new ();
-	entry2 = gtk_entry_new ();
-	gtk_box_pack_start ((GtkBox *) hbox, l1, FALSE, FALSE, 6);
-	gtk_box_pack_start ((GtkBox *)hbox, entry1, FALSE, FALSE, 6);
-	gtk_box_pack_start ((GtkBox *)vbox, hbox, FALSE, FALSE, 6);
-
-	hbox = gtk_hbox_new (FALSE, 0);
-	gtk_box_pack_start ((GtkBox *)hbox, l2, FALSE, FALSE, 6);
-	gtk_box_pack_start ((GtkBox *)hbox, entry2, FALSE, FALSE, 6);
-	gtk_box_pack_start ((GtkBox *)vbox, hbox, FALSE, FALSE, 6);
-
-	gtk_widget_show_all (vbox);
-	content_area = gtk_dialog_get_content_area (GTK_DIALOG (dialog));
-	gtk_container_add (GTK_CONTAINER (content_area), vbox);
-	response = gtk_dialog_run ((GtkDialog *)dialog);
-	if (response == GTK_RESPONSE_ACCEPT) {
-		const gchar *name = gtk_entry_get_text ((GtkEntry *)entry1);
-		const gchar *value = gtk_entry_get_text ((GtkEntry *)entry2);
-		gchar *tok;
-		GSList *list = gconf_client_get_list (prefs->gconf, "/apps/evolution/mail/junk/custom_header", GCONF_VALUE_STRING, NULL);
-
-		/* FIXME: Validate the values */
-
+	GtkBuilder *builder = gtk_builder_new();
+	gchar *tok;
+	const gchar *name, *value;
+	GSList *list;
+
+	e_load_ui_builder_definition (builder, "mail-config.ui");
+	dialog = e_builder_get_widget (builder, "add-custom-junk-header");
+	jh_dialog_entry_changed_cb (NULL, builder);
+
+	entry = e_builder_get_widget (builder, "junk-header-name");
+	g_signal_connect (entry, "changed",
+		G_CALLBACK (jh_dialog_entry_changed_cb), builder);
+	entry = e_builder_get_widget (builder, "junk-header-content");
+	g_signal_connect (entry, "changed",
+		G_CALLBACK (jh_dialog_entry_changed_cb), builder);
+
+	if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) {
+		name = gtk_entry_get_text (GTK_ENTRY (e_builder_get_widget (builder, "junk-header-name")));
+		value = gtk_entry_get_text (GTK_ENTRY (e_builder_get_widget (builder, "junk-header-content")));
+
+		list = gconf_client_get_list (prefs->gconf, "/apps/evolution/mail/junk/custom_header", GCONF_VALUE_STRING, NULL);
 		tok = g_strdup_printf ("%s=%s", name, value);
 		list = g_slist_append (list, tok);
 		gconf_client_set_list (prefs->gconf, "/apps/evolution/mail/junk/custom_header", GCONF_VALUE_STRING, list, NULL);
-		g_slist_foreach (list, (GFunc)g_free, NULL);
 
+		g_slist_foreach (list, (GFunc) g_free, NULL);
 		g_slist_free (list);
 	}
+
+	g_object_unref (builder);
 	gtk_widget_destroy (dialog);
+
 	jh_tree_refill (prefs);
 }
 



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