aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--calendar/ChangeLog12
-rw-r--r--calendar/gui/alarm-notify/alarm.c2
-rw-r--r--calendar/gui/dialogs/alarm-page.c124
3 files changed, 99 insertions, 39 deletions
diff --git a/calendar/ChangeLog b/calendar/ChangeLog
index 10d997bcfe..b1a9bdf457 100644
--- a/calendar/ChangeLog
+++ b/calendar/ChangeLog
@@ -1,3 +1,15 @@
+2001-09-26 Federico Mena Quintero <federico@ximian.com>
+
+ Fixes the GUI part of bug #7892.
+
+ * gui/dialogs/alarm-page.c (get_alarm_duration_string): Return
+ NULL if the duration is zero.
+ (get_alarm_string): Handle duration of zero. Also, hopefully
+ make the strings be more l10n-friendly.
+
+ * gui/alarm-notify/alarm.c (alarm_ready_cb): I am a moron. Fix
+ reversed test.
+
2001-09-26 JP Rosevear <jpr@ximian.com>
* gui/dialogs/comp-editor.c (comp_editor_destroy): disconnect
diff --git a/calendar/gui/alarm-notify/alarm.c b/calendar/gui/alarm-notify/alarm.c
index 0fa24f66ce..f750ed515c 100644
--- a/calendar/gui/alarm-notify/alarm.c
+++ b/calendar/gui/alarm-notify/alarm.c
@@ -106,7 +106,7 @@ alarm_ready_cb (gpointer data)
* re-entered and added an alarm of its own, so the timer will
* already be set up.
*/
- if (timeout_id != 0)
+ if (timeout_id == 0)
setup_timeout (now);
} else
g_assert (timeout_id == 0);
diff --git a/calendar/gui/dialogs/alarm-page.c b/calendar/gui/dialogs/alarm-page.c
index e140392d98..811760eb6f 100644
--- a/calendar/gui/dialogs/alarm-page.c
+++ b/calendar/gui/dialogs/alarm-page.c
@@ -293,41 +293,64 @@ clear_widgets (AlarmPage *apage)
gtk_clist_clear (GTK_CLIST (priv->list));
}
+/* Builds a string for the duration of the alarm. If the duration is zero, returns NULL. */
static char *
get_alarm_duration_string (struct icaldurationtype *duration)
{
GString *string = g_string_new (NULL);
char *ret;
+ gboolean have_something;
- if (duration->days > 1)
+ have_something = FALSE;
+
+ if (duration->days > 1) {
g_string_sprintf (string, _("%d days"), duration->days);
- else if (duration->days == 1)
+ have_something = TRUE;
+ } else if (duration->days == 1) {
g_string_append (string, _("1 day"));
+ have_something = TRUE;
+ }
- if (duration->weeks > 1)
+ if (duration->weeks > 1) {
g_string_sprintf (string, _("%d weeks"), duration->weeks);
- else if (duration->weeks == 1)
+ have_something = TRUE;
+ } else if (duration->weeks == 1) {
g_string_append (string, _("1 week"));
+ have_something = TRUE;
+ }
- if (duration->hours > 1)
+ if (duration->hours > 1) {
g_string_sprintf (string, _("%d hours"), duration->hours);
- else if (duration->hours == 1)
+ have_something = TRUE;
+ } else if (duration->hours == 1) {
g_string_append (string, _("1 hour"));
+ have_something = TRUE;
+ }
- if (duration->minutes > 1)
+ if (duration->minutes > 1) {
g_string_sprintf (string, _("%d minutes"), duration->minutes);
- else if (duration->minutes == 1)
+ have_something = TRUE;
+ } else if (duration->minutes == 1) {
g_string_append (string, _("1 minute"));
+ have_something = TRUE;
+ }
- if (duration->seconds > 1)
+ if (duration->seconds > 1) {
g_string_sprintf (string, _("%d seconds"), duration->seconds);
- else if (duration->seconds == 1)
+ have_something = TRUE;
+ } else if (duration->seconds == 1) {
g_string_append (string, _("1 second"));
+ have_something = TRUE;
+ }
- ret = string->str;
- g_string_free (string, FALSE);
-
- return ret;
+ if (have_something) {
+ ret = string->str;
+ g_string_free (string, FALSE);
+ return ret;
+ } else {
+ g_string_free (string, TRUE);
+ return NULL;
+ }
}
static char *
@@ -365,7 +388,7 @@ get_alarm_string (CalComponentAlarm *alarm)
case CAL_ALARM_NONE:
case CAL_ALARM_UNKNOWN:
default:
- base = _("Unknown");
+ base = _("Unknown action to be performed");
break;
}
@@ -375,33 +398,58 @@ get_alarm_string (CalComponentAlarm *alarm)
case CAL_ALARM_TRIGGER_RELATIVE_START:
dur = get_alarm_duration_string (&trigger.u.rel_duration);
- if (trigger.u.rel_duration.is_neg)
- str = g_strdup_printf ("%s %s %s", base, dur,
- _("before start of appointment"));
- else
- str = g_strdup_printf ("%s %s %s", base, dur,
- _("after start of appointment"));
+ if (dur) {
+ if (trigger.u.rel_duration.is_neg)
+ str = g_strdup_printf (_("%s %s before the start of the appointment"),
+ base, dur);
+ else
+ str = g_strdup_printf (_("%s %s after the start of the appointment"),
+ base, dur);
+
+ g_free (dur);
+ } else
+ str = g_strdup_printf (_("%s at the start of the appointment"), base);
- g_free (dur);
break;
case CAL_ALARM_TRIGGER_RELATIVE_END:
dur = get_alarm_duration_string (&trigger.u.rel_duration);
- if (trigger.u.rel_duration.is_neg)
- str = g_strdup_printf ("%s %s %s", base, dur,
- _("before end of appointment"));
- else
- str = g_strdup_printf ("%s %s %s", base, dur,
- _("after end of appointment"));
+ if (dur) {
+ if (trigger.u.rel_duration.is_neg)
+ str = g_strdup_printf (_("%s %s before the end of the appointment"),
+ base, dur);
+ else
+ str = g_strdup_printf (_("%s %s after the end of the appointment"),
+ base, dur);
+
+ g_free (dur);
+ } else
+ str = g_strdup_printf (_("%s at the end of the appointment"), base);
- g_free (dur);
break;
+
+ case CAL_ALARM_TRIGGER_ABSOLUTE: {
+ time_t t;
+ struct tm tm;
+ char *date;
+
+ t = icaltime_as_timet (trigger.u.abs_time);
+ if (t == -1)
+ date = g_strdup_printf (_("%s at an unknown time"), base);
+ else {
+ char buf[256];
+
+ tm = *localtime (&t);
+ strftime (buf, sizeof (buf), "%A %b %d %Y %H:%M", &tm);
+ date = g_strdup_printf (_("%s at %s"), base, buf);
+ }
+
+ break; }
+
case CAL_ALARM_TRIGGER_NONE:
- case CAL_ALARM_TRIGGER_ABSOLUTE:
default:
- str = g_strdup_printf ("%s %s", base,
- _("Unknown"));
+ str = g_strdup_printf (_("%s for an unknown trigger type"), base);
break;
}
@@ -441,7 +489,7 @@ alarm_page_fill_widgets (CompEditorPage *page, CalComponent *comp)
GList *alarms, *l;
GtkCList *clist;
CompEditorPageDates dates;
-
+
apage = ALARM_PAGE (page);
priv = apage->priv;
@@ -536,7 +584,7 @@ alarm_page_set_summary (CompEditorPage *page, const char *summary)
AlarmPage *apage;
AlarmPagePrivate *priv;
gchar *s;
-
+
apage = ALARM_PAGE (page);
priv = apage->priv;
@@ -576,7 +624,7 @@ get_widgets (AlarmPage *apage)
gtk_widget_ref (priv->main);
gtk_widget_unparent (priv->main);
-
+
priv->summary = GW ("summary");
priv->date_time = GW ("date-time");
@@ -613,10 +661,10 @@ field_changed_cb (GtkWidget *widget, gpointer data)
{
AlarmPage *apage;
AlarmPagePrivate *priv;
-
+
apage = ALARM_PAGE (data);
priv = apage->priv;
-
+
if (!priv->updating)
comp_editor_page_notify_changed (COMP_EDITOR_PAGE (apage));
}
@@ -644,7 +692,7 @@ add_clicked_cb (GtkButton *button, gpointer data)
switch (e_dialog_option_menu_get (priv->value_units, value_map)) {
case MINUTES:
- trigger.u.rel_duration.minutes =
+ trigger.u.rel_duration.minutes =
e_dialog_spin_get_int (priv->interval_value);
break;