diff options
-rw-r--r-- | calendar/ChangeLog | 13 | ||||
-rw-r--r-- | calendar/gui/alarm-notify/alarm-queue.c | 71 | ||||
-rw-r--r-- | calendar/gui/alarm-notify/save.c | 98 | ||||
-rw-r--r-- | calendar/gui/alarm-notify/save.h | 3 |
4 files changed, 164 insertions, 21 deletions
diff --git a/calendar/ChangeLog b/calendar/ChangeLog index 3ed9734e9e..a7e8e9c633 100644 --- a/calendar/ChangeLog +++ b/calendar/ChangeLog @@ -1,3 +1,16 @@ +2002-01-13 JP Rosevear <jpr@ximian.com> + + * gui/alarm-notify/save.h: add protos + + * gui/alarm-notify/save.c (save_blessed_program): records a + program as blessed + (is_blessed_program): checks to see if a program is blessed + + * gui/alarm-notify/alarm-queue.c (procedure_notification_dialog): + popup a dialog notifying the user that is a program and let them + not see the dialog about this program again + (procedure_notification): use above + 2002-01-11 Damon Chaplin <damon@ximian.com> * gui/e-timezone-entry.c: diff --git a/calendar/gui/alarm-notify/alarm-queue.c b/calendar/gui/alarm-notify/alarm-queue.c index eedeff0f76..fd22649e71 100644 --- a/calendar/gui/alarm-notify/alarm-queue.c +++ b/calendar/gui/alarm-notify/alarm-queue.c @@ -23,16 +23,21 @@ #endif #include <glib.h> +#include <liboaf/liboaf.h> +#include <bonobo/bonobo-object.h> +#include <gtk/gtksignal.h> +#include <gtk/gtkbox.h> +#include <gtk/gtklabel.h> +#include <gtk/gtkcheckbutton.h> #include <libgnome/gnome-defs.h> #include <libgnome/gnome-i18n.h> -#include <gtk/gtksignal.h> -#include <liboaf/liboaf.h> #include <libgnome/gnome-exec.h> #include <libgnome/gnome-sound.h> #include <libgnomeui/gnome-dialog.h> #include <libgnomeui/gnome-dialog-util.h> +#include <libgnomeui/gnome-dialog.h> +#include <libgnomeui/gnome-stock.h> #include <libgnomeui/gnome-uidefs.h> -#include <bonobo/bonobo-object.h> #include <cal-util/timeutil.h> #include "alarm.h" #include "alarm-notify-dialog.h" @@ -735,6 +740,49 @@ mail_notification (time_t trigger, CompQueuedAlarms *cqa, gpointer alarm_id) } /* Performs notification of a procedure alarm */ +static gboolean +procedure_notification_dialog (const char *cmd, const char *url) +{ + GtkWidget *dialog, *label, *checkbox; + char *str; + int btn; + + if (is_blessed_program (url)) + return TRUE; + + dialog = gnome_dialog_new (_("Warning"), + GNOME_STOCK_BUTTON_YES, + GNOME_STOCK_BUTTON_NO, + NULL); + + str = g_strdup_printf (_("An Evolution Calendar reminder is about to trigger. " + "This reminder is configured to run the following program:\n\n" + " %s\n\n" + "Are you sure you want to run this program?"), + cmd); + label = gtk_label_new (str); + gtk_label_set_line_wrap (GTK_LABEL (label), TRUE); + gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT); + gtk_widget_show (label); + gtk_box_pack_start (GTK_BOX (GNOME_DIALOG (dialog)->vbox), + label, TRUE, TRUE, 4); + g_free (str); + + checkbox = gtk_check_button_new_with_label + (_("Do not ask me about this program again.")); + gtk_widget_show (checkbox); + gtk_box_pack_start (GTK_BOX (GNOME_DIALOG (dialog)->vbox), + checkbox, TRUE, TRUE, 4); + + /* Run the dialog */ + btn = gnome_dialog_run (GNOME_DIALOG (dialog)); + if (btn == GNOME_YES && gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (checkbox))) + save_blessed_program (url); + gnome_dialog_close (GNOME_DIALOG (dialog)); + + return (btn == GNOME_YES); +} + static void procedure_notification (time_t trigger, CompQueuedAlarms *cqa, gpointer alarm_id) { @@ -744,8 +792,7 @@ procedure_notification (time_t trigger, CompQueuedAlarms *cqa, gpointer alarm_id CalComponentText description; icalattach *attach; const char *url; - char *cmd, *str; - GtkWidget *dialog; + char *cmd; int result; comp = cqa->alarms->comp; @@ -772,25 +819,15 @@ procedure_notification (time_t trigger, CompQueuedAlarms *cqa, gpointer alarm_id g_assert (url != NULL); /* Ask for confirmation before executing the stuff */ - if (description.value) cmd = g_strconcat (url, " ", description.value, NULL); else cmd = (char *) url; - str = g_strdup_printf (_("An Evolution Calendar reminder is about to trigger.\n" - "This reminder is configured to run the following program:\n\n" - " %s\n\n" - "Are you sure you want to run this program?"), - cmd); - - dialog = gnome_question_dialog_modal (str, NULL, NULL); - g_free (str); - result = 0; - if (gnome_dialog_run (GNOME_DIALOG (dialog)) == GNOME_YES) + if (procedure_notification_dialog (cmd, url)) result = gnome_execute_shell (NULL, cmd); - + if (cmd != (char *) url) g_free (cmd); diff --git a/calendar/gui/alarm-notify/save.c b/calendar/gui/alarm-notify/save.c index a7f70cd740..92dc94b65a 100644 --- a/calendar/gui/alarm-notify/save.c +++ b/calendar/gui/alarm-notify/save.c @@ -35,6 +35,8 @@ #define KEY_LAST_NOTIFICATION_TIME "/Calendar/AlarmNotify/LastNotificationTime" #define KEY_NUM_CALENDARS_TO_LOAD "/Calendar/AlarmNotify/NumCalendarsToLoad" #define BASE_KEY_CALENDAR_TO_LOAD "/Calendar/AlarmNotify/CalendarToLoad" +#define KEY_NUM_BLESSED_PROGRAMS "/Calendar/AlarmNotify/NumBlessedPrograms" +#define BASE_KEY_BLESSED_PROGRAM "/Calendar/AlarmNotify/BlessedProgram" @@ -160,8 +162,8 @@ save_calendars_to_load (GPtrArray *uris) CORBA_exception_init (&ev); bonobo_config_set_long (db, KEY_NUM_CALENDARS_TO_LOAD, len, &ev); - if (ev._major != CORBA_NO_EXCEPTION) - g_warning ("Cannot save config key %s -- %s", KEY_NUM_CALENDARS_TO_LOAD, ev._repo_id); + if (BONOBO_EX (&ev)) + g_warning ("Cannot save config key %s -- %s", KEY_NUM_CALENDARS_TO_LOAD, BONOBO_EX_ID (&ev)); for (i = 0; i < len; i++) { const char *uri; @@ -171,8 +173,8 @@ save_calendars_to_load (GPtrArray *uris) key = g_strdup_printf ("%s%d", BASE_KEY_CALENDAR_TO_LOAD, i); bonobo_config_set_string (db, key, uri, &ev); - if (ev._major != CORBA_NO_EXCEPTION) - g_warning ("Cannot save config key %s -- %s", key, ev._repo_id); + if (BONOBO_EX (&ev)) + g_warning ("Cannot save config key %s -- %s", key, BONOBO_EX_ID (&ev)); g_free (key); } @@ -223,3 +225,91 @@ get_calendars_to_load (void) return uris; } + +/** + * save_blessed_program: + * @program: a program name + * + * Saves a program name as "blessed" + **/ +void +save_blessed_program (const char *program) +{ + Bonobo_ConfigDatabase db; + CORBA_Environment ev; + char *key; + int len; + + g_return_if_fail (program != NULL); + + db = get_config_db (); + if (db == CORBA_OBJECT_NIL) + return; + + /* Up the number saved */ + len = bonobo_config_get_long_with_default (db, KEY_NUM_BLESSED_PROGRAMS, 0, NULL); + len++; + + bonobo_config_set_long (db, KEY_NUM_BLESSED_PROGRAMS, len, &ev); + if (BONOBO_EX (&ev)) + g_warning ("Cannot save config key %s -- %s", KEY_NUM_BLESSED_PROGRAMS, BONOBO_EX_ID (&ev)); + + /* Save the program name */ + key = g_strdup_printf ("%s%d", BASE_KEY_BLESSED_PROGRAM, len - 1); + bonobo_config_set_string (db, key, program, &ev); + if (BONOBO_EX (&ev)) + g_warning ("Cannot save config key %s -- %s", key, BONOBO_EX_ID (&ev)); + g_free (key); + + CORBA_exception_free (&ev); + + discard_config_db (db); +} + +/** + * is_blessed_program: + * @program: a program name + * + * Checks to see if a program is blessed + * + * Return value: TRUE if program is blessed, FALSE otherwise + **/ +gboolean +is_blessed_program (const char *program) +{ + Bonobo_ConfigDatabase db; + int len, i; + + g_return_val_if_fail (program != NULL, FALSE); + + db = get_config_db (); + if (db == CORBA_OBJECT_NIL) + return FALSE; + + /* Getting the default value below is not necessarily an error, as we + * may not have saved the list of calendar yet. + */ + + len = bonobo_config_get_long_with_default (db, KEY_NUM_BLESSED_PROGRAMS, 0, NULL); + + for (i = 0; i < len; i++) { + char *key, *value; + gboolean used_default; + + key = g_strdup_printf ("%s%d", BASE_KEY_BLESSED_PROGRAM, i); + value = bonobo_config_get_string_with_default (db, key, "", &used_default); + if (used_default) + g_message ("get_calendars_to_load(): Could not read calendar name %d", i); + + if (value != NULL && !strcmp (value, program)) { + g_free (key); + g_free (value); + return TRUE; + } + + g_free (key); + g_free (value); + } + + return FALSE; +} diff --git a/calendar/gui/alarm-notify/save.h b/calendar/gui/alarm-notify/save.h index ff95bd6870..50371e0a5b 100644 --- a/calendar/gui/alarm-notify/save.h +++ b/calendar/gui/alarm-notify/save.h @@ -33,4 +33,7 @@ time_t get_saved_notification_time (void); void save_calendars_to_load (GPtrArray *uris); GPtrArray *get_calendars_to_load (void); +void save_blessed_program (const char *program); +gboolean is_blessed_program (const char *program); + #endif |