diff options
Diffstat (limited to 'calendar/gui/dialogs')
-rw-r--r-- | calendar/gui/dialogs/comp-editor-util.c | 12 | ||||
-rw-r--r-- | calendar/gui/dialogs/comp-editor-util.h | 3 | ||||
-rw-r--r-- | calendar/gui/dialogs/event-page.c | 56 | ||||
-rw-r--r-- | calendar/gui/dialogs/event-page.glade | 4 | ||||
-rw-r--r-- | calendar/gui/dialogs/recurrence-page.c | 13 | ||||
-rw-r--r-- | calendar/gui/dialogs/recurrence-page.glade | 2 | ||||
-rw-r--r-- | calendar/gui/dialogs/task-details-page.c | 2 | ||||
-rw-r--r-- | calendar/gui/dialogs/task-page.c | 35 |
8 files changed, 108 insertions, 19 deletions
diff --git a/calendar/gui/dialogs/comp-editor-util.c b/calendar/gui/dialogs/comp-editor-util.c index df682f6880..5d575c8957 100644 --- a/calendar/gui/dialogs/comp-editor-util.c +++ b/calendar/gui/dialogs/comp-editor-util.c @@ -179,13 +179,17 @@ comp_editor_date_label (CompEditorPageDates *dates, GtkWidget *label) * comp_editor_new_date_edit: * @show_date: Whether to show a date picker in the widget. * @show_time: Whether to show a time picker in the widget. + * @make_time_insensitive: Whether the time field is made insensitive rather + * than hiding it. This is useful if you want to preserve the layout of the + * widgets. * * Creates a new #EDateEdit widget, configured using the calendar's preferences. * * Return value: A newly-created #EDateEdit widget. **/ GtkWidget * -comp_editor_new_date_edit (gboolean show_date, gboolean show_time) +comp_editor_new_date_edit (gboolean show_date, gboolean show_time, + gboolean make_time_insensitive) { EDateEdit *dedit; @@ -193,7 +197,11 @@ comp_editor_new_date_edit (gboolean show_date, gboolean show_time) e_date_edit_set_show_date (dedit, show_date); e_date_edit_set_show_time (dedit, show_time); - +#if 0 + e_date_edit_set_make_time_insensitive (dedit, make_time_insensitive); +#else + e_date_edit_set_make_time_insensitive (dedit, FALSE); +#endif calendar_config_configure_e_date_edit (dedit); return GTK_WIDGET (dedit); diff --git a/calendar/gui/dialogs/comp-editor-util.h b/calendar/gui/dialogs/comp-editor-util.h index 0654289698..23f3937a9a 100644 --- a/calendar/gui/dialogs/comp-editor-util.h +++ b/calendar/gui/dialogs/comp-editor-util.h @@ -30,7 +30,8 @@ void comp_editor_dates (CompEditorPageDates *date, CalComponent *comp); void comp_editor_date_label (CompEditorPageDates *dates, GtkWidget *label); -GtkWidget *comp_editor_new_date_edit (gboolean show_date, gboolean show_time); +GtkWidget *comp_editor_new_date_edit (gboolean show_date, gboolean show_time, + gboolean make_time_insensitive); struct tm comp_editor_get_current_time (GtkObject *object, gpointer data); diff --git a/calendar/gui/dialogs/event-page.c b/calendar/gui/dialogs/event-page.c index 8f9d974178..e20822e088 100644 --- a/calendar/gui/dialogs/event-page.c +++ b/calendar/gui/dialogs/event-page.c @@ -299,6 +299,16 @@ check_all_day (EventPage *epage) e_date_edit_set_show_time (E_DATE_EDIT (priv->start_time), !all_day); e_date_edit_set_show_time (E_DATE_EDIT (priv->end_time), !all_day); + + /* We will use DATE values for all-day events eventually, in which + case timezones can't be used. */ + if (all_day) { + gtk_widget_hide (priv->start_timezone); + gtk_widget_hide (priv->end_timezone); + } else { + gtk_widget_show (priv->start_timezone); + gtk_widget_show (priv->end_timezone); + } } /* Fills the widgets with default values */ @@ -602,6 +612,20 @@ event_page_fill_component (CompEditorPage *page, CalComponent *comp) /* FIXME: We should use is_date at some point. */ + /* If the all_day toggle is set, the end date is inclusive of the + entire day on which it points to. Also, we will use DATE values + eventually, which can't have timezones. So for now we just use + the default timezone. */ + all_day_event = e_dialog_toggle_get (priv->all_day_event); + + if (all_day_event) { + char *location; + + location = calendar_config_get_timezone (); + zone = icaltimezone_get_builtin_timezone (location); + } + + date_set = e_date_edit_get_date (E_DATE_EDIT (priv->start_time), &icaltime.year, &icaltime.month, @@ -610,15 +634,12 @@ event_page_fill_component (CompEditorPage *page, CalComponent *comp) &icaltime.hour, &icaltime.minute); g_assert (date_set); - zone = e_timezone_entry_get_timezone (E_TIMEZONE_ENTRY (priv->start_timezone)); + if (!all_day_event) + zone = e_timezone_entry_get_timezone (E_TIMEZONE_ENTRY (priv->start_timezone)); if (zone) date.tzid = icaltimezone_get_tzid (zone); cal_component_set_dtstart (comp, &date); - /* If the all_day toggle is set, the end date is inclusive of the - entire day on which it points to. */ - all_day_event = e_dialog_toggle_get (priv->all_day_event); - date_set = e_date_edit_get_date (E_DATE_EDIT (priv->end_time), &icaltime.year, &icaltime.month, @@ -635,9 +656,10 @@ event_page_fill_component (CompEditorPage *page, CalComponent *comp) icaltime_adjust (&icaltime, 1, 0, 0, 0); } - zone = e_timezone_entry_get_timezone (E_TIMEZONE_ENTRY (priv->end_timezone)); + if (!all_day_event) + zone = e_timezone_entry_get_timezone (E_TIMEZONE_ENTRY (priv->end_timezone)); if (zone) - date.tzid = icaltimezone_get_tzid (zone); + date.tzid = icaltimezone_get_tzid (zone); cal_component_set_dtend (comp, &date); @@ -1036,6 +1058,16 @@ all_day_event_toggled_cb (GtkWidget *toggle, gpointer data) e_date_edit_set_show_time (E_DATE_EDIT (priv->start_time), !all_day); e_date_edit_set_show_time (E_DATE_EDIT (priv->end_time), !all_day); + /* We will use DATE values for all-day events eventually, in which + case timezones can't be used. */ + if (all_day) { + gtk_widget_hide (priv->start_timezone); + gtk_widget_hide (priv->end_timezone); + } else { + gtk_widget_show (priv->start_timezone); + gtk_widget_show (priv->end_timezone); + } + /* Notify upstream */ dates.start = &start_tt; dates.end = &end_tt; @@ -1097,6 +1129,8 @@ static gboolean init_widgets (EventPage *epage) { EventPagePrivate *priv; + char *location; + icaltimezone *zone; priv = epage->priv; @@ -1186,6 +1220,12 @@ init_widgets (EventPage *epage) gtk_container_add (GTK_CONTAINER (priv->contacts_box), priv->contacts_entry); + /* Set the default timezone, so the timezone entry may be hidden. */ + location = calendar_config_get_timezone (); + zone = icaltimezone_get_builtin_timezone (location); + e_timezone_entry_set_default_timezone (E_TIMEZONE_ENTRY (priv->start_timezone), zone); + e_timezone_entry_set_default_timezone (E_TIMEZONE_ENTRY (priv->end_timezone), zone); + return TRUE; } @@ -1257,7 +1297,7 @@ GtkWidget *make_date_edit (void); GtkWidget * make_date_edit (void) { - return comp_editor_new_date_edit (TRUE, TRUE); + return comp_editor_new_date_edit (TRUE, TRUE, TRUE); } GtkWidget *make_timezone_entry (void); diff --git a/calendar/gui/dialogs/event-page.glade b/calendar/gui/dialogs/event-page.glade index 0c3abcfc5f..e90490dd03 100644 --- a/calendar/gui/dialogs/event-page.glade +++ b/calendar/gui/dialogs/event-page.glade @@ -271,9 +271,9 @@ <widget> <class>GtkAlignment</class> <name>alignment1</name> - <xalign>0.5</xalign> + <xalign>1</xalign> <yalign>7.45058e-09</yalign> - <xscale>1</xscale> + <xscale>0</xscale> <yscale>0</yscale> <child> <left_attach>3</left_attach> diff --git a/calendar/gui/dialogs/recurrence-page.c b/calendar/gui/dialogs/recurrence-page.c index 20310f6433..f06d8f76ec 100644 --- a/calendar/gui/dialogs/recurrence-page.c +++ b/calendar/gui/dialogs/recurrence-page.c @@ -1213,7 +1213,8 @@ make_ending_until_special (RecurrencePage *rpage) /* Create the widget */ - priv->ending_date_edit = comp_editor_new_date_edit (TRUE, FALSE); + priv->ending_date_edit = comp_editor_new_date_edit (TRUE, FALSE, + FALSE); de = E_DATE_EDIT (priv->ending_date_edit); gtk_container_add (GTK_CONTAINER (priv->ending_special), @@ -2237,3 +2238,13 @@ recurrence_page_new (void) return rpage; } + + +GtkWidget *make_exdate_date_edit (void); + +GtkWidget * +make_exdate_date_edit (void) +{ + return comp_editor_new_date_edit (TRUE, TRUE, FALSE); +} + diff --git a/calendar/gui/dialogs/recurrence-page.glade b/calendar/gui/dialogs/recurrence-page.glade index 747f89bccb..2858f3a9d6 100644 --- a/calendar/gui/dialogs/recurrence-page.glade +++ b/calendar/gui/dialogs/recurrence-page.glade @@ -494,7 +494,7 @@ forever <widget> <class>Custom</class> <name>exception-date</name> - <creation_function>make_date_edit</creation_function> + <creation_function>make_exdate_date_edit</creation_function> <int1>0</int1> <int2>0</int2> <last_modification_time>Tue, 16 May 2000 01:42:29 GMT</last_modification_time> diff --git a/calendar/gui/dialogs/task-details-page.c b/calendar/gui/dialogs/task-details-page.c index 3955abc182..ff7223362a 100644 --- a/calendar/gui/dialogs/task-details-page.c +++ b/calendar/gui/dialogs/task-details-page.c @@ -709,7 +709,7 @@ task_details_page_create_date_edit (void) { GtkWidget *dedit; - dedit = comp_editor_new_date_edit (TRUE, TRUE); + dedit = comp_editor_new_date_edit (TRUE, TRUE, FALSE); e_date_edit_set_allow_no_date_set (E_DATE_EDIT (dedit), TRUE); return dedit; diff --git a/calendar/gui/dialogs/task-page.c b/calendar/gui/dialogs/task-page.c index 84eb1017d4..8e10ae7383 100644 --- a/calendar/gui/dialogs/task-page.c +++ b/calendar/gui/dialogs/task-page.c @@ -39,6 +39,7 @@ #include "e-util/e-dialog-widgets.h" #include "e-util/e-categories-config.h" #include "../e-timezone-entry.h" +#include "../calendar-config.h" #include "comp-editor-util.h" #include "task-page.h" @@ -335,6 +336,7 @@ task_page_fill_widgets (CompEditorPage *page, CalComponent *comp) /* Due Date. */ cal_component_get_due (comp, &d); + zone = NULL; if (d.value) { struct icaltimetype *due_tt = d.value; e_date_edit_set_date (E_DATE_EDIT (priv->due_date), @@ -343,13 +345,22 @@ task_page_fill_widgets (CompEditorPage *page, CalComponent *comp) e_date_edit_set_time_of_day (E_DATE_EDIT (priv->due_date), due_tt->hour, due_tt->minute); } else { + char *location; + e_date_edit_set_time (E_DATE_EDIT (priv->due_date), -1); + + /* If no time is set, we use the default timezone, so the + user usually doesn't have to set this when they set the + date. */ + location = calendar_config_get_timezone (); + zone = icaltimezone_get_builtin_timezone (location); } /* Note that if we are creating a new task, the timezones may not be on the server, so we try to get the builtin timezone with the TZID first. */ - zone = icaltimezone_get_builtin_timezone_from_tzid (d.tzid); + if (!zone) + zone = icaltimezone_get_builtin_timezone_from_tzid (d.tzid); if (!zone) { get_tz_status = cal_client_get_timezone (page->client, d.tzid, &zone); @@ -366,6 +377,7 @@ task_page_fill_widgets (CompEditorPage *page, CalComponent *comp) /* Start Date. */ cal_component_get_dtstart (comp, &d); + zone = NULL; if (d.value) { struct icaltimetype *start_tt = d.value; e_date_edit_set_date (E_DATE_EDIT (priv->start_date), @@ -374,10 +386,19 @@ task_page_fill_widgets (CompEditorPage *page, CalComponent *comp) e_date_edit_set_time_of_day (E_DATE_EDIT (priv->start_date), start_tt->hour, start_tt->minute); } else { + char *location; + e_date_edit_set_time (E_DATE_EDIT (priv->start_date), -1); + + /* If no time is set, we use the default timezone, so the + user usually doesn't have to set this when they set the + date. */ + location = calendar_config_get_timezone (); + zone = icaltimezone_get_builtin_timezone (location); } - zone = icaltimezone_get_builtin_timezone_from_tzid (d.tzid); + if (!zone) + zone = icaltimezone_get_builtin_timezone_from_tzid (d.tzid); if (!zone) { get_tz_status = cal_client_get_timezone (page->client, d.tzid, &zone); @@ -754,6 +775,8 @@ static gboolean init_widgets (TaskPage *tpage) { TaskPagePrivate *priv; + char *location; + icaltimezone *zone; priv = tpage->priv; @@ -825,6 +848,12 @@ init_widgets (TaskPage *tpage) gtk_container_add (GTK_CONTAINER (priv->contacts_box), priv->contacts_entry); + /* Set the default timezone, so the timezone entry may be hidden. */ + location = calendar_config_get_timezone (); + zone = icaltimezone_get_builtin_timezone (location); + e_timezone_entry_set_default_timezone (E_TIMEZONE_ENTRY (priv->start_timezone), zone); + e_timezone_entry_set_default_timezone (E_TIMEZONE_ENTRY (priv->due_timezone), zone); + return TRUE; } @@ -898,7 +927,7 @@ task_page_create_date_edit (void) { GtkWidget *dedit; - dedit = comp_editor_new_date_edit (TRUE, TRUE); + dedit = comp_editor_new_date_edit (TRUE, TRUE, TRUE); e_date_edit_set_allow_no_date_set (E_DATE_EDIT (dedit), TRUE); return dedit; |