diff options
author | Dan Vrátil <dvratil@redhat.com> | 2011-04-29 15:21:58 +0800 |
---|---|---|
committer | Milan Crha <mcrha@redhat.com> | 2011-04-29 15:21:58 +0800 |
commit | d21199c9199bceb3bba10ca41a0e4c7fa8b1ad36 (patch) | |
tree | 2609b8d0cb9dcece4670db2f6f84fe04c2684668 | |
parent | 0ea909d4e23719823ae30f4d09d7cfc44e29b5ce (diff) | |
download | gsoc2013-evolution-d21199c9199bceb3bba10ca41a0e4c7fa8b1ad36.tar.gz gsoc2013-evolution-d21199c9199bceb3bba10ca41a0e4c7fa8b1ad36.tar.zst gsoc2013-evolution-d21199c9199bceb3bba10ca41a0e4c7fa8b1ad36.zip |
Bug #588891 - Spam settings dialog terribly un-higgy
-rw-r--r-- | mail/mail-config.ui | 120 | ||||
-rw-r--r-- | 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 5305593e8c..faabb282b3 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 6147328aed..22feb95728 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); } |