aboutsummaryrefslogtreecommitdiffstats
path: root/calendar/gui
diff options
context:
space:
mode:
Diffstat (limited to 'calendar/gui')
-rw-r--r--calendar/gui/dialogs/comp-editor-util.c12
-rw-r--r--calendar/gui/dialogs/comp-editor-util.h3
-rw-r--r--calendar/gui/dialogs/event-page.c56
-rw-r--r--calendar/gui/dialogs/event-page.glade4
-rw-r--r--calendar/gui/dialogs/recurrence-page.c13
-rw-r--r--calendar/gui/dialogs/recurrence-page.glade2
-rw-r--r--calendar/gui/dialogs/task-details-page.c2
-rw-r--r--calendar/gui/dialogs/task-page.c35
-rw-r--r--calendar/gui/e-calendar-table.c1
-rw-r--r--calendar/gui/e-timezone-entry.c68
-rw-r--r--calendar/gui/e-timezone-entry.h6
11 files changed, 182 insertions, 20 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;
diff --git a/calendar/gui/e-calendar-table.c b/calendar/gui/e-calendar-table.c
index 8bca2db755..1b37c8662e 100644
--- a/calendar/gui/e-calendar-table.c
+++ b/calendar/gui/e-calendar-table.c
@@ -802,6 +802,7 @@ e_calendar_table_on_double_click (ETable *table,
GdkEvent *event,
ECalendarTable *cal_table)
{
+ g_print ("In e_calendar_table_on_double_click\n");
open_task_by_row (cal_table, row);
}
diff --git a/calendar/gui/e-timezone-entry.c b/calendar/gui/e-timezone-entry.c
index 2b4f06af6d..1cc1e83676 100644
--- a/calendar/gui/e-timezone-entry.c
+++ b/calendar/gui/e-timezone-entry.c
@@ -38,6 +38,8 @@
#include "dialogs/e-timezone-dialog.h"
#include "e-timezone-entry.h"
+/* The timezone icon for the button. */
+#include "art/timezone-16.xpm"
struct _ETimezoneEntryPrivate {
/* This is the timezone set in e_timezone_entry_set_timezone().
@@ -53,6 +55,11 @@ struct _ETimezoneEntryPrivate {
GtkWidget *entry;
GtkWidget *button;
+
+ /* This can be set to the default timezone. If the current timezone
+ setting in the ETimezoneEntry matches this, then the entry field
+ is hidden. This makes the user interface simpler. */
+ icaltimezone *default_zone;
};
@@ -73,6 +80,8 @@ static void on_button_clicked (GtkWidget *widget,
static char* e_timezone_entry_get_display_name (icaltimezone *zone);
+static void e_timezone_entry_set_entry_visibility (ETimezoneEntry *tentry);
+
static GtkHBoxClass *parent_class;
static guint timezone_entry_signals[LAST_SIGNAL] = { 0 };
@@ -137,11 +146,16 @@ static void
e_timezone_entry_init (ETimezoneEntry *tentry)
{
ETimezoneEntryPrivate *priv;
+ GdkColormap *colormap;
+ GdkPixmap *timezone_icon;
+ GdkBitmap *timezone_mask;
+ GtkWidget *pixmap;
tentry->priv = priv = g_new0 (ETimezoneEntryPrivate, 1);
priv->zone = NULL;
priv->changed = FALSE;
+ priv->default_zone = NULL;
priv->entry = gtk_entry_new ();
gtk_entry_set_editable (GTK_ENTRY (priv->entry), FALSE);
@@ -151,11 +165,18 @@ e_timezone_entry_init (ETimezoneEntry *tentry)
gtk_signal_connect (GTK_OBJECT (priv->entry), "changed",
GTK_SIGNAL_FUNC (on_entry_changed), tentry);
- priv->button = gtk_button_new_with_label ("...");
+ priv->button = gtk_button_new ();
gtk_signal_connect (GTK_OBJECT (priv->button), "clicked",
GTK_SIGNAL_FUNC (on_button_clicked), tentry);
gtk_box_pack_start (GTK_BOX (tentry), priv->button, FALSE, FALSE, 0);
gtk_widget_show (priv->button);
+
+ colormap = gtk_widget_get_colormap (priv->button);
+ timezone_icon = gdk_pixmap_colormap_create_from_xpm_d (NULL, colormap, &timezone_mask, NULL, timezone_16_xpm);
+
+ pixmap = gtk_pixmap_new (timezone_icon, timezone_mask);
+ gtk_container_add (GTK_CONTAINER (priv->button), pixmap);
+ gtk_widget_show (pixmap);
}
@@ -233,6 +254,7 @@ on_button_clicked (GtkWidget *widget,
}
gtk_entry_set_text (GTK_ENTRY (priv->entry), display_name);
+ e_timezone_entry_set_entry_visibility (tentry);
}
gtk_object_unref (GTK_OBJECT (timezone_dialog));
@@ -287,6 +309,8 @@ e_timezone_entry_set_timezone (ETimezoneEntry *tentry,
gtk_entry_set_text (GTK_ENTRY (priv->entry),
zone ? e_timezone_entry_get_display_name (zone) : "");
+
+ e_timezone_entry_set_entry_visibility (tentry);
}
@@ -306,3 +330,45 @@ e_timezone_entry_get_display_name (icaltimezone *zone)
return display_name;
}
+
+
+/* Sets the default timezone. If the current timezone matches this, then the
+ entry field is hidden. This is useful since most people do not use timezones
+ so it makes the user interface simpler. */
+void
+e_timezone_entry_set_default_timezone (ETimezoneEntry *tentry,
+ icaltimezone *zone)
+{
+ ETimezoneEntryPrivate *priv;
+
+ g_return_if_fail (E_IS_TIMEZONE_ENTRY (tentry));
+
+ priv = tentry->priv;
+
+ priv->default_zone = zone;
+
+ e_timezone_entry_set_entry_visibility (tentry);
+}
+
+
+static void
+e_timezone_entry_set_entry_visibility (ETimezoneEntry *tentry)
+{
+ ETimezoneEntryPrivate *priv;
+ icaltimezone *zone;
+ gboolean show_entry = TRUE;
+
+ priv = tentry->priv;
+
+ if (priv->default_zone) {
+ zone = e_timezone_entry_get_timezone (tentry);
+ if (zone == priv->default_zone)
+ show_entry = FALSE;
+ }
+
+ if (show_entry)
+ gtk_widget_show (priv->entry);
+ else
+ gtk_widget_hide (priv->entry);
+}
+
diff --git a/calendar/gui/e-timezone-entry.h b/calendar/gui/e-timezone-entry.h
index bfc8525f64..61bae2b7b4 100644
--- a/calendar/gui/e-timezone-entry.h
+++ b/calendar/gui/e-timezone-entry.h
@@ -71,6 +71,12 @@ icaltimezone* e_timezone_entry_get_timezone (ETimezoneEntry *tentry);
void e_timezone_entry_set_timezone (ETimezoneEntry *tentry,
icaltimezone *zone);
+/* Sets the default timezone. If the current timezone matches this, then the
+ entry field is hidden. This is useful since most people do not use timezones
+ so it makes the user interface simpler. */
+void e_timezone_entry_set_default_timezone(ETimezoneEntry *tentry,
+ icaltimezone *zone);
+
END_GNOME_DECLS
#endif /* __E_TIMEZONE_ENTRY_H_ */