aboutsummaryrefslogtreecommitdiffstats
path: root/calendar/gui
diff options
context:
space:
mode:
Diffstat (limited to 'calendar/gui')
-rw-r--r--calendar/gui/calendar-commands.c14
-rw-r--r--calendar/gui/dialogs/recurrence-page.glade8
-rw-r--r--calendar/gui/e-day-view.c63
-rw-r--r--calendar/gui/e-day-view.h3
-rw-r--r--calendar/gui/e-week-view.c74
-rw-r--r--calendar/gui/e-week-view.h3
-rw-r--r--calendar/gui/print.c4
7 files changed, 142 insertions, 27 deletions
diff --git a/calendar/gui/calendar-commands.c b/calendar/gui/calendar-commands.c
index 8fd3bb038e..12fe653619 100644
--- a/calendar/gui/calendar-commands.c
+++ b/calendar/gui/calendar-commands.c
@@ -423,20 +423,24 @@ calendar_set_folder_bar_label (GnomeCalendar *gcal, BonoboControl *control)
if (start_tm.tm_year == end_tm.tm_year) {
if (start_tm.tm_mon == end_tm.tm_mon) {
strftime (buffer, sizeof (buffer),
- _("%B %Y"), &start_tm);
+ _("%d"), &start_tm);
+ strftime (end_buffer, sizeof (end_buffer),
+ _("%d %B %Y"), &end_tm);
+ strcat (buffer, " - ");
+ strcat (buffer, end_buffer);
} else {
strftime (buffer, sizeof (buffer),
- _("%B"), &start_tm);
+ _("%d %B"), &start_tm);
strftime (end_buffer, sizeof (end_buffer),
- _("%B %Y"), &end_tm);
+ _("%d %B %Y"), &end_tm);
strcat (buffer, " - ");
strcat (buffer, end_buffer);
}
} else {
strftime (buffer, sizeof (buffer),
- _("%B %Y"), &start_tm);
+ _("%d %B %Y"), &start_tm);
strftime (end_buffer, sizeof (end_buffer),
- _("%B %Y"), &end_tm);
+ _("%d %B %Y"), &end_tm);
strcat (buffer, " - ");
strcat (buffer, end_buffer);
}
diff --git a/calendar/gui/dialogs/recurrence-page.glade b/calendar/gui/dialogs/recurrence-page.glade
index aaf3f7e05a..747f89bccb 100644
--- a/calendar/gui/dialogs/recurrence-page.glade
+++ b/calendar/gui/dialogs/recurrence-page.glade
@@ -207,7 +207,7 @@
<class>GtkRadioButton</class>
<name>none</name>
<can_focus>True</can_focus>
- <label>No recurrence</label>
+ <label>_No recurrence</label>
<active>False</active>
<draw_indicator>True</draw_indicator>
<group>recurrence-radio</group>
@@ -222,7 +222,7 @@
<class>GtkRadioButton</class>
<name>simple</name>
<can_focus>True</can_focus>
- <label>Simple recurrence</label>
+ <label>_Simple recurrence</label>
<active>False</active>
<draw_indicator>True</draw_indicator>
<group>recurrence-radio</group>
@@ -237,7 +237,7 @@
<class>GtkRadioButton</class>
<name>custom</name>
<can_focus>True</can_focus>
- <label>Custom recurrence</label>
+ <label>_Custom recurrence</label>
<active>False</active>
<draw_indicator>True</draw_indicator>
<group>recurrence-radio</group>
@@ -471,7 +471,7 @@ forever
<class>GtkButton</class>
<name>exception-delete</name>
<can_focus>True</can_focus>
- <label>_Delete</label>
+ <label>_Remove</label>
<child>
<padding>0</padding>
<expand>False</expand>
diff --git a/calendar/gui/e-day-view.c b/calendar/gui/e-day-view.c
index 7c3879fc13..7fbe482772 100644
--- a/calendar/gui/e-day-view.c
+++ b/calendar/gui/e-day-view.c
@@ -92,6 +92,10 @@
pressed, as a fraction of the page size. */
#define E_DAY_VIEW_WHEEL_MOUSE_STEP_SIZE 0.25
+/* The timeout before we do a layout, so we don't do a layout for each event
+ we get from the server. */
+#define E_DAY_VIEW_LAYOUT_TIMEOUT 100
+
/* Drag and Drop stuff. */
enum {
@@ -422,6 +426,10 @@ static void selection_get (GtkWidget *invisible,
EDayView *day_view);
static void invisible_destroyed (GtkWidget *invisible, EDayView *day_view);
+static void e_day_view_queue_layout (EDayView *day_view);
+static void e_day_view_cancel_layout (EDayView *day_view);
+static gboolean e_day_view_layout_timeout_cb (gpointer data);
+
static GtkTableClass *parent_class;
static GdkAtom clipboard_atom = GDK_NONE;
@@ -498,6 +506,8 @@ e_day_view_init (EDayView *day_view)
day_view->long_events_need_layout = FALSE;
day_view->long_events_need_reshape = FALSE;
+ day_view->layout_timeout_id = 0;
+
for (day = 0; day < E_DAY_VIEW_MAX_DAYS; day++) {
day_view->events[day] = g_array_new (FALSE, FALSE,
sizeof (EDayViewEvent));
@@ -879,6 +889,8 @@ e_day_view_destroy (GtkObject *object)
day_view = E_DAY_VIEW (object);
+ e_day_view_cancel_layout (day_view);
+
e_day_view_stop_auto_scroll (day_view);
if (day_view->client) {
@@ -915,8 +927,11 @@ e_day_view_destroy (GtkObject *object)
e_day_view_free_events (day_view);
g_array_free (day_view->long_events, TRUE);
- for (day = 0; day < E_DAY_VIEW_MAX_DAYS; day++)
+ day_view->long_events = NULL;
+ for (day = 0; day < E_DAY_VIEW_MAX_DAYS; day++) {
g_array_free (day_view->events[day], TRUE);
+ day_view->events[day] = NULL;
+ }
if (day_view->invisible)
gtk_widget_destroy (day_view->invisible);
@@ -1510,10 +1525,7 @@ query_obj_updated_cb (CalQuery *query, const char *uid,
cal_client_resolve_tzid_cb, day_view->client);
gtk_object_unref (GTK_OBJECT (comp));
- e_day_view_check_layout (day_view);
-
- gtk_widget_queue_draw (day_view->top_canvas);
- gtk_widget_queue_draw (day_view->main_canvas);
+ e_day_view_queue_layout (day_view);
}
/* Callback used when a component is removed from the live query */
@@ -1599,9 +1611,10 @@ update_query (EDayView *day_view)
e_day_view_stop_editing_event (day_view);
- e_day_view_free_events (day_view);
gtk_widget_queue_draw (day_view->top_canvas);
gtk_widget_queue_draw (day_view->main_canvas);
+ e_day_view_free_events (day_view);
+ e_day_view_queue_layout (day_view);
if (!(day_view->client
&& cal_client_get_load_state (day_view->client) == CAL_CLIENT_LOAD_LOADED))
@@ -4376,8 +4389,8 @@ e_day_view_add_event (CalComponent *comp,
event.start_minute = start_tt.hour * 60 + start_tt.minute - offset;
event.end_minute = end_tt.hour * 60 + end_tt.minute - offset;
- event.start_row_or_col = -1;
- event.num_columns = -1;
+ event.start_row_or_col = 0;
+ event.num_columns = 0;
event.different_timezone = FALSE;
if (!cal_comp_util_compare_event_timezones (comp, day_view->client,
@@ -6834,3 +6847,37 @@ e_day_view_get_visible_time_range (EDayView *day_view,
return TRUE;
}
+
+/* Queues a layout, unless one is already queued. */
+static void
+e_day_view_queue_layout (EDayView *day_view)
+{
+ if (day_view->layout_timeout_id == 0) {
+ day_view->layout_timeout_id = g_timeout_add (E_DAY_VIEW_LAYOUT_TIMEOUT, e_day_view_layout_timeout_cb, day_view);
+ }
+}
+
+
+/* Removes any queued layout. */
+static void
+e_day_view_cancel_layout (EDayView *day_view)
+{
+ if (day_view->layout_timeout_id != 0) {
+ gtk_timeout_remove (day_view->layout_timeout_id);
+ day_view->layout_timeout_id = 0;
+ }
+}
+
+
+static gboolean
+e_day_view_layout_timeout_cb (gpointer data)
+{
+ EDayView *day_view = E_DAY_VIEW (data);
+
+ gtk_widget_queue_draw (day_view->top_canvas);
+ gtk_widget_queue_draw (day_view->main_canvas);
+ e_day_view_check_layout (day_view);
+
+ day_view->layout_timeout_id = 0;
+ return FALSE;
+}
diff --git a/calendar/gui/e-day-view.h b/calendar/gui/e-day-view.h
index d8a5372c8c..d260f33980 100644
--- a/calendar/gui/e-day-view.h
+++ b/calendar/gui/e-day-view.h
@@ -280,6 +280,9 @@ struct _EDayView
gboolean long_events_need_reshape;
gboolean need_reshape[E_DAY_VIEW_MAX_DAYS];
+ /* The ID of the timeout function for doing a new layout. */
+ gint layout_timeout_id;
+
/* The number of minutes per row. 5, 10, 15, 30 or 60. */
gint mins_per_row;
diff --git a/calendar/gui/e-week-view.c b/calendar/gui/e-week-view.c
index 0fa54c75b5..094e0b4776 100644
--- a/calendar/gui/e-week-view.c
+++ b/calendar/gui/e-week-view.c
@@ -39,6 +39,7 @@
#include <gtk/gtksignal.h>
#include <gtk/gtkvscrollbar.h>
#include <gtk/gtkwindow.h>
+#include <gtk/gtkmain.h>
#include <libgnome/gnome-defs.h>
#include <libgnome/gnome-i18n.h>
#include <gdk-pixbuf/gdk-pixbuf.h>
@@ -74,6 +75,11 @@
#define E_WEEK_VIEW_JUMP_BUTTON_X_PAD 3
#define E_WEEK_VIEW_JUMP_BUTTON_Y_PAD 3
+/* The timeout before we do a layout, so we don't do a layout for each event
+ we get from the server. */
+#define E_WEEK_VIEW_LAYOUT_TIMEOUT 100
+
+
static void e_week_view_class_init (EWeekViewClass *class);
static void e_week_view_init (EWeekView *week_view);
static void e_week_view_destroy (GtkObject *object);
@@ -192,6 +198,11 @@ static void selection_received (GtkWidget *invisible,
guint time,
EWeekView *week_view);
+static void e_week_view_queue_layout (EWeekView *week_view);
+static void e_week_view_cancel_layout (EWeekView *week_view);
+static gboolean e_week_view_layout_timeout_cb (gpointer data);
+
+
static GtkTableClass *parent_class;
static GdkAtom clipboard_atom = GDK_NONE;
@@ -271,6 +282,8 @@ e_week_view_init (EWeekView *week_view)
week_view->events_need_layout = FALSE;
week_view->events_need_reshape = FALSE;
+ week_view->layout_timeout_id = 0;
+
week_view->spans = NULL;
week_view->zone = NULL;
@@ -446,7 +459,11 @@ e_week_view_destroy (GtkObject *object)
week_view = E_WEEK_VIEW (object);
+ e_week_view_cancel_layout (week_view);
+
e_week_view_free_events (week_view);
+ g_array_free (week_view->events, TRUE);
+ week_view->events = NULL;
if (week_view->client) {
gtk_signal_disconnect_by_data (GTK_OBJECT (week_view->client), week_view);
@@ -1006,9 +1023,7 @@ query_obj_updated_cb (CalQuery *query, const char *uid,
gtk_object_unref (GTK_OBJECT (comp));
- e_week_view_check_layout (week_view);
-
- gtk_widget_queue_draw (week_view->main_canvas);
+ e_week_view_queue_layout (week_view);
}
/* Callback used when a component is removed from the live query */
@@ -1022,8 +1037,8 @@ query_obj_removed_cb (CalClient *client, const char *uid, gpointer data)
e_week_view_foreach_event_with_uid (week_view, uid,
e_week_view_remove_event_cb, NULL);
- e_week_view_check_layout (week_view);
gtk_widget_queue_draw (week_view->main_canvas);
+ e_week_view_check_layout (week_view);
}
/* Callback used when a query ends */
@@ -1038,6 +1053,8 @@ query_query_done_cb (CalQuery *query, CalQueryDoneStatus status, const char *err
if (status != CAL_QUERY_DONE_SUCCESS)
fprintf (stderr, "query done: %s\n", error_str);
+
+ gtk_widget_queue_draw (week_view->main_canvas);
}
/* Callback used when an evaluation error occurs when running a query */
@@ -1051,6 +1068,8 @@ query_eval_error_cb (CalQuery *query, const char *error_str, gpointer data)
/* FIXME */
fprintf (stderr, "eval error: %s\n", error_str);
+
+ gtk_widget_queue_draw (week_view->main_canvas);
}
/* Builds a complete query sexp for the week view by adding the predicates to
@@ -1092,8 +1111,9 @@ update_query (EWeekView *week_view)
CalQuery *old_query;
char *real_sexp;
- e_week_view_free_events (week_view);
gtk_widget_queue_draw (week_view->main_canvas);
+ e_week_view_free_events (week_view);
+ e_week_view_queue_layout (week_view);
if (!(week_view->client
&& cal_client_get_load_state (week_view->client) == CAL_CLIENT_LOAD_LOADED))
@@ -1110,8 +1130,9 @@ update_query (EWeekView *week_view)
g_assert (week_view->sexp != NULL);
real_sexp = adjust_query_sexp (week_view, week_view->sexp);
- if (!real_sexp)
+ if (!real_sexp) {
return; /* No time range is set, so don't start a query */
+ }
week_view->query = cal_client_get_query (week_view->client, real_sexp);
g_free (real_sexp);
@@ -2265,6 +2286,11 @@ e_week_view_free_events (EWeekView *week_view)
for (day = 0; day <= num_days; day++) {
week_view->rows_per_day[day] = 0;
}
+
+ /* Hide all the jump buttons. */
+ for (day = 0; day < E_WEEK_VIEW_MAX_WEEKS * 7; day++) {
+ gnome_canvas_item_hide (week_view->jump_buttons[day]);
+ }
}
@@ -2726,8 +2752,6 @@ e_week_view_on_adjustment_changed (GtkAdjustment *adjustment,
if (week_view->calendar)
gnome_calendar_set_selected_time_range (week_view->calendar, start, end);
}
-
- gtk_widget_queue_draw (week_view->main_canvas);
}
@@ -3747,3 +3771,37 @@ e_week_view_get_visible_time_range (EWeekView *week_view,
return TRUE;
}
+
+
+/* Queues a layout, unless one is already queued. */
+static void
+e_week_view_queue_layout (EWeekView *week_view)
+{
+ if (week_view->layout_timeout_id == 0) {
+ week_view->layout_timeout_id = g_timeout_add (E_WEEK_VIEW_LAYOUT_TIMEOUT, e_week_view_layout_timeout_cb, week_view);
+ }
+}
+
+
+/* Removes any queued layout. */
+static void
+e_week_view_cancel_layout (EWeekView *week_view)
+{
+ if (week_view->layout_timeout_id != 0) {
+ gtk_timeout_remove (week_view->layout_timeout_id);
+ week_view->layout_timeout_id = 0;
+ }
+}
+
+
+static gboolean
+e_week_view_layout_timeout_cb (gpointer data)
+{
+ EWeekView *week_view = E_WEEK_VIEW (data);
+
+ gtk_widget_queue_draw (week_view->main_canvas);
+ e_week_view_check_layout (week_view);
+
+ week_view->layout_timeout_id = 0;
+ return FALSE;
+}
diff --git a/calendar/gui/e-week-view.h b/calendar/gui/e-week-view.h
index 7060d97bf7..84e113b1b5 100644
--- a/calendar/gui/e-week-view.h
+++ b/calendar/gui/e-week-view.h
@@ -205,6 +205,9 @@ struct _EWeekView
gboolean events_need_layout;
gboolean events_need_reshape;
+ /* The ID of the timeout function for doing a new layout. */
+ gint layout_timeout_id;
+
/* An array of EWeekViewEventSpan elements. Each event has its own
space within this array, and uses the spans_index and num_spans
fields of the EWeekViewEvent struct to access it. */
diff --git a/calendar/gui/print.c b/calendar/gui/print.c
index aa8fb92432..e1bae904ff 100644
--- a/calendar/gui/print.c
+++ b/calendar/gui/print.c
@@ -839,8 +839,8 @@ print_day_add_event (CalComponent *comp,
event.start_minute = start_tt.hour * 60 + start_tt.minute - offset;
event.end_minute = end_tt.hour * 60 + end_tt.minute - offset;
- event.start_row_or_col = -1;
- event.num_columns = -1;
+ event.start_row_or_col = 0;
+ event.num_columns = 0;
/* Find out which array to add the event to. */
for (day = 0; day < days_shown; day++) {