diff options
Diffstat (limited to 'calendar/gui')
-rw-r--r-- | calendar/gui/calendar-commands.c | 14 | ||||
-rw-r--r-- | calendar/gui/dialogs/recurrence-page.glade | 8 | ||||
-rw-r--r-- | calendar/gui/e-day-view.c | 63 | ||||
-rw-r--r-- | calendar/gui/e-day-view.h | 3 | ||||
-rw-r--r-- | calendar/gui/e-week-view.c | 74 | ||||
-rw-r--r-- | calendar/gui/e-week-view.h | 3 | ||||
-rw-r--r-- | calendar/gui/print.c | 4 |
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++) { |