aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mail/ChangeLog11
-rw-r--r--mail/mail-accounts.c50
-rw-r--r--mail/mail-accounts.h4
-rw-r--r--mail/mail-config.c14
-rw-r--r--mail/mail-config.glade118
-rw-r--r--mail/mail-config.h16
-rw-r--r--mail/mail-ops.c18
7 files changed, 213 insertions, 18 deletions
diff --git a/mail/ChangeLog b/mail/ChangeLog
index 9a080da8ce..ece98ae751 100644
--- a/mail/ChangeLog
+++ b/mail/ChangeLog
@@ -1,3 +1,14 @@
+2001-12-18 Jeffrey Stedfast <fejj@ximian.com>
+
+ * mail-accounts.c (construct): Setup the new-mail-notification
+ widgets.
+ (notify_command_changed): Update the command-line for new mail
+ notification.
+ (notify_radio_toggled): Update the new-mail-notification type.
+
+ * mail-ops.c (filter_folder_free): See if we got any new mail and
+ "sound the alarm" if we did.
+
2001-12-17 Jon Trowbridge <trow@ximian.com>
* mail-format.c (handle_text_plain_flowed): Set citation color to
diff --git a/mail/mail-accounts.c b/mail/mail-accounts.c
index 2b386e1b11..ea82a1b815 100644
--- a/mail/mail-accounts.c
+++ b/mail/mail-accounts.c
@@ -683,6 +683,31 @@ images_radio_toggled (GtkWidget *radio, gpointer data)
}
static void
+notify_radio_toggled (GtkWidget *radio, gpointer data)
+{
+ MailAccountsDialog *dialog = data;
+
+ if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (radio)))
+ return;
+
+ if (radio == (GtkWidget *) dialog->notify_not)
+ mail_config_set_new_mail_notify (MAIL_CONFIG_NOTIFY_NOT);
+ else if (radio == (GtkWidget *) dialog->notify_beep)
+ mail_config_set_new_mail_notify (MAIL_CONFIG_NOTIFY_BEEP);
+ else
+ mail_config_set_new_mail_notify (MAIL_CONFIG_NOTIFY_EXEC);
+}
+
+static void
+notify_command_changed (GtkWidget *file_entry, gpointer data)
+{
+ char *command;
+
+ command = gnome_file_entry_get_full_path (GNOME_FILE_ENTRY (file_entry), FALSE);
+ mail_config_set_new_mail_notify_command (command);
+}
+
+static void
empty_trash_toggled (GtkWidget *toggle, gpointer data)
{
mail_config_set_empty_trash_on_exit (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (toggle)));
@@ -782,7 +807,7 @@ static void
construct (MailAccountsDialog *dialog)
{
GladeXML *gui;
- GtkWidget *notebook, *menu;
+ GtkWidget *notebook, *menu, *entry;
int num;
gui = glade_xml_new (EVOLUTION_GLADEDIR "/mail-config.glade", NULL);
@@ -914,7 +939,7 @@ construct (MailAccountsDialog *dialog)
gtk_toggle_button_set_active (dialog->prompt_bcc_only, mail_config_get_prompt_only_bcc ());
gtk_signal_connect (GTK_OBJECT (dialog->prompt_bcc_only), "toggled",
GTK_SIGNAL_FUNC (prompt_bcc_only_toggled), dialog);
-
+
dialog->prompt_unwanted_html = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui, "chkPromptWantHTML"));
gtk_toggle_button_set_active (dialog->prompt_unwanted_html, mail_config_get_confirm_unwanted_html ());
gtk_signal_connect (GTK_OBJECT (dialog->prompt_unwanted_html), "toggled",
@@ -956,6 +981,27 @@ construct (MailAccountsDialog *dialog)
gtk_signal_connect (GTK_OBJECT (dialog->confirm_expunge), "toggled",
GTK_SIGNAL_FUNC (confirm_expunge_toggled), dialog);
+ dialog->notify_not = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui, "radioNotifyNot"));
+ gtk_toggle_button_set_active (dialog->notify_not, mail_config_get_new_mail_notify () == MAIL_CONFIG_NOTIFY_NOT);
+ gtk_signal_connect (GTK_OBJECT (dialog->notify_not), "toggled",
+ GTK_SIGNAL_FUNC (notify_radio_toggled), dialog);
+
+ dialog->notify_beep = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui, "radioNotifyBeep"));
+ gtk_toggle_button_set_active (dialog->notify_beep, mail_config_get_new_mail_notify () == MAIL_CONFIG_NOTIFY_BEEP);
+ gtk_signal_connect (GTK_OBJECT (dialog->notify_beep), "toggled",
+ GTK_SIGNAL_FUNC (notify_radio_toggled), dialog);
+
+ dialog->notify_exec = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui, "radioNotifyExec"));
+ gtk_toggle_button_set_active (dialog->notify_exec, mail_config_get_new_mail_notify () == MAIL_CONFIG_NOTIFY_EXEC);
+ gtk_signal_connect (GTK_OBJECT (dialog->notify_exec), "toggled",
+ GTK_SIGNAL_FUNC (notify_radio_toggled), dialog);
+
+ dialog->command_line = GNOME_FILE_ENTRY (glade_xml_get_widget (gui, "fileNotifyCommandLine"));
+ gtk_entry_set_text (GTK_ENTRY (gnome_file_entry_gtk_entry (dialog->command_line)),
+ mail_config_get_new_mail_notify_command ());
+ gtk_signal_connect (GTK_OBJECT (dialog->command_line), "changed",
+ GTK_SIGNAL_FUNC (notify_command_changed), dialog);
+
/* now to fill in the clists */
dialog->accounts_row = -1;
dialog->accounts = mail_config_get_accounts ();
diff --git a/mail/mail-accounts.h b/mail/mail-accounts.h
index f2580874d3..bb29819343 100644
--- a/mail/mail-accounts.h
+++ b/mail/mail-accounts.h
@@ -93,6 +93,10 @@ struct _MailAccountsDialog {
GtkToggleButton *filter_log;
GnomeFileEntry *filter_log_path;
GtkToggleButton *confirm_expunge;
+ GtkToggleButton *notify_not;
+ GtkToggleButton *notify_beep;
+ GtkToggleButton *notify_exec;
+ GnomeFileEntry *command_line;
/* PGP page */
GnomeFileEntry *pgp_path;
diff --git a/mail/mail-config.c b/mail/mail-config.c
index 184f4fb281..a21af27d17 100644
--- a/mail/mail-config.c
+++ b/mail/mail-config.c
@@ -107,7 +107,7 @@ typedef struct {
gboolean filter_log;
char *filter_log_path;
- MailConfigNewMailNotification notify;
+ MailConfigNewMailNotify notify;
char *notify_command;
} MailConfig;
@@ -614,7 +614,7 @@ config_read (void)
/* New Mail Notification */
config->notify = bonobo_config_get_long_with_default (
config->db, "/Mail/Notify/new_mail_notification",
- MAIL_CONFIG_NEW_MAIL_NOTIFICATION_NONE, NULL);
+ MAIL_CONFIG_NOTIFY_NOT, NULL);
config->notify_command = bonobo_config_get_string (
config->db, "/Mail/Notify/new_mail_notification_command", NULL);
@@ -1628,26 +1628,26 @@ mail_config_set_default_charset (const char *charset)
config->default_charset = g_strdup (charset);
}
-MailConfigNewMailNotification
-mail_config_get_new_mail_notification (void)
+MailConfigNewMailNotify
+mail_config_get_new_mail_notify (void)
{
return config->notify;
}
void
-mail_config_set_new_mail_notification (MailConfigNewMailNotification type)
+mail_config_set_new_mail_notify (MailConfigNewMailNotify type)
{
config->notify = type;
}
const char *
-mail_config_get_new_mail_notification_command (void)
+mail_config_get_new_mail_notify_command (void)
{
return config->notify_command;
}
void
-mail_config_set_new_mail_notification_command (const char *command)
+mail_config_set_new_mail_notify_command (const char *command)
{
g_free (config->notify_command);
config->notify_command = g_strdup (command);
diff --git a/mail/mail-config.glade b/mail/mail-config.glade
index 4f53b4c583..7e1953cf01 100644
--- a/mail/mail-config.glade
+++ b/mail/mail-config.glade
@@ -3125,6 +3125,124 @@ Quoted
<fill>False</fill>
</child>
</widget>
+
+ <widget>
+ <class>GtkFrame</class>
+ <name>frame</name>
+ <label>New Mail Notification</label>
+ <label_xalign>0</label_xalign>
+ <shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
+ <child>
+ <padding>0</padding>
+ <expand>True</expand>
+ <fill>True</fill>
+ </child>
+
+ <widget>
+ <class>GtkVBox</class>
+ <name>vbox66</name>
+ <homogeneous>False</homogeneous>
+ <spacing>0</spacing>
+
+ <widget>
+ <class>GtkRadioButton</class>
+ <name>radioNotifyNot</name>
+ <can_focus>True</can_focus>
+ <label>Do not notify me when new mail arrives</label>
+ <active>True</active>
+ <draw_indicator>True</draw_indicator>
+ <group>new_mail_notify</group>
+ <child>
+ <padding>0</padding>
+ <expand>False</expand>
+ <fill>False</fill>
+ </child>
+ </widget>
+
+ <widget>
+ <class>GtkRadioButton</class>
+ <name>radioNotifyBeep</name>
+ <can_focus>True</can_focus>
+ <label>Beep when new mail arrives</label>
+ <active>False</active>
+ <draw_indicator>True</draw_indicator>
+ <group>new_mail_notify</group>
+ <child>
+ <padding>0</padding>
+ <expand>False</expand>
+ <fill>False</fill>
+ </child>
+ </widget>
+
+ <widget>
+ <class>GtkRadioButton</class>
+ <name>radioNotifyExec</name>
+ <can_focus>True</can_focus>
+ <label>Execute command line when new mail arrives</label>
+ <active>False</active>
+ <draw_indicator>True</draw_indicator>
+ <group>new_mail_notify</group>
+ <child>
+ <padding>0</padding>
+ <expand>False</expand>
+ <fill>False</fill>
+ </child>
+ </widget>
+
+ <widget>
+ <class>GtkHBox</class>
+ <name>hbox60</name>
+ <homogeneous>False</homogeneous>
+ <spacing>0</spacing>
+ <child>
+ <padding>0</padding>
+ <expand>True</expand>
+ <fill>True</fill>
+ </child>
+
+ <widget>
+ <class>GtkLabel</class>
+ <name>label54</name>
+ <label>Specify command:</label>
+ <justify>GTK_JUSTIFY_CENTER</justify>
+ <wrap>False</wrap>
+ <xalign>0.5</xalign>
+ <yalign>0.5</yalign>
+ <xpad>0</xpad>
+ <ypad>0</ypad>
+ <child>
+ <padding>0</padding>
+ <expand>False</expand>
+ <fill>False</fill>
+ </child>
+ </widget>
+
+ <widget>
+ <class>GnomeFileEntry</class>
+ <name>fileNotifyExecCommand</name>
+ <max_saved>10</max_saved>
+ <directory>False</directory>
+ <modal>False</modal>
+ <child>
+ <padding>0</padding>
+ <expand>True</expand>
+ <fill>True</fill>
+ </child>
+
+ <widget>
+ <class>GtkEntry</class>
+ <child_name>GnomeEntry:entry</child_name>
+ <name>combo-entry3</name>
+ <can_focus>True</can_focus>
+ <editable>True</editable>
+ <text_visible>True</text_visible>
+ <text_max_length>0</text_max_length>
+ <text></text>
+ </widget>
+ </widget>
+ </widget>
+ </widget>
+ </widget>
</widget>
<widget>
diff --git a/mail/mail-config.h b/mail/mail-config.h
index 82f863dba3..c54fef4eba 100644
--- a/mail/mail-config.h
+++ b/mail/mail-config.h
@@ -88,10 +88,10 @@ typedef enum {
} MailConfigDisplayStyle;
typedef enum {
- MAIL_CONFIG_NEW_MAIL_NOTIFICATION_NONE,
- MAIL_CONFIG_NEW_MAIL_NOTIFICATION_BEEP,
- MAIL_CONFIG_NEW_MAIL_NOTIFICATION_COMMAND,
-} MailConfigNewMailNotification;
+ MAIL_CONFIG_NOTIFY_NOT,
+ MAIL_CONFIG_NOTIFY_BEEP,
+ MAIL_CONFIG_NOTIFY_EXEC,
+} MailConfigNewMailNotify;
/* Identities */
MailConfigIdentity *identity_copy (const MailConfigIdentity *id);
@@ -181,10 +181,10 @@ void mail_config_set_default_forward_style (MailConfigForwardS
MailConfigDisplayStyle mail_config_get_message_display_style (void);
void mail_config_set_message_display_style (MailConfigDisplayStyle style);
-MailConfigNewMailNotification mail_config_get_new_mail_notification (void);
-void mail_config_set_new_mail_notification (MailConfigNewMailNotification type);
-const char *mail_config_get_new_mail_notification_command (void);
-void mail_config_set_new_mail_notification_command (const char *command);
+MailConfigNewMailNotify mail_config_get_new_mail_notify (void);
+void mail_config_set_new_mail_notify (MailConfigNewMailNotify type);
+const char *mail_config_get_new_mail_notify_command (void);
+void mail_config_set_new_mail_notify_command (const char *command);
const char *mail_config_get_default_charset (void);
void mail_config_set_default_charset (const char *charset);
diff --git a/mail/mail-ops.c b/mail/mail-ops.c
index 023d1781d1..cbccb274db 100644
--- a/mail/mail-ops.c
+++ b/mail/mail-ops.c
@@ -145,7 +145,7 @@ static void
filter_folder_free (struct _mail_msg *mm)
{
struct _filter_mail_msg *m = (struct _filter_mail_msg *)mm;
- int i;
+ int count, i;
if (m->source_folder)
camel_object_unref (CAMEL_OBJECT (m->source_folder));
@@ -163,6 +163,22 @@ filter_folder_free (struct _mail_msg *mm)
if (m->destination)
camel_object_unref (CAMEL_OBJECT (m->destination));
+ count = camel_filter_driver_get_filtered_count (m->driver);
+ camel_filter_driver_reset_filtered_count (m->driver);
+
+ if (count > 0) {
+ switch (mail_config_get_new_mail_notify ()) {
+ case MAIL_CONFIG_NOTIFY_BEEP:
+ gdk_beep ();
+ break;
+ case MAIL_CONFIG_NOTIFY_EXEC:
+ mail_execute_shell_command (m->driver, mail_config_get_new_mail_notify_command (), NULL);
+ break;
+ default:
+ break;
+ }
+ }
+
if (m->driver)
camel_object_unref (CAMEL_OBJECT (m->driver));
}