[evolution/wip/webkit2] Bug 756664 - Preserve selection on date change in Day/Work Week views
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution/wip/webkit2] Bug 756664 - Preserve selection on date change in Day/Work Week views
- Date: Wed, 2 Mar 2016 13:14:05 +0000 (UTC)
commit f4ecbab0a5752f3f49e0f70e564c0cae2e55f70c
Author: Milan Crha <mcrha redhat com>
Date: Fri Oct 16 10:51:08 2015 +0200
Bug 756664 - Preserve selection on date change in Day/Work Week views
modules/calendar/e-cal-shell-content.c | 33 ++++++++++++++++++++++++++++++++
1 files changed, 33 insertions(+), 0 deletions(-)
---
diff --git a/modules/calendar/e-cal-shell-content.c b/modules/calendar/e-cal-shell-content.c
index d8936be..0831edc 100644
--- a/modules/calendar/e-cal-shell-content.c
+++ b/modules/calendar/e-cal-shell-content.c
@@ -109,6 +109,10 @@ cal_shell_content_update_model_and_current_view_times (ECalShellContent *cal_she
const GDate *view_end)
{
ECalendarView *current_view;
+ EDayView *day_view = NULL;
+ gint day_view_selection_start_day = -1, day_view_selection_end_day = -1;
+ gint day_view_selection_start_row = -1, day_view_selection_end_row = -1;
+ gdouble day_view_scrollbar_position = 0.0;
gint syy, smm, sdd, eyy, emm, edd;
time_t visible_range_start, visible_range_end;
gboolean filters_updated = FALSE;
@@ -125,6 +129,19 @@ cal_shell_content_update_model_and_current_view_times (ECalShellContent *cal_she
zone = e_cal_model_get_timezone (model);
cal_filter = e_cal_data_model_dup_filter (e_cal_model_get_data_model (model));
+ if (E_IS_DAY_VIEW (current_view)) {
+ GtkAdjustment *adjustment;
+
+ day_view = E_DAY_VIEW (current_view);
+ day_view_selection_start_day = day_view->selection_start_day;
+ day_view_selection_end_day = day_view->selection_end_day;
+ day_view_selection_start_row = day_view->selection_start_row;
+ day_view_selection_end_row = day_view->selection_end_row;
+
+ adjustment = gtk_scrollable_get_vadjustment (GTK_SCROLLABLE (day_view->main_canvas));
+ day_view_scrollbar_position = gtk_adjustment_get_value (adjustment);
+ }
+
g_signal_handler_block (calitem, cal_shell_content->priv->datepicker_range_moved_id);
g_signal_handler_block (calitem, cal_shell_content->priv->datepicker_selection_changed_id);
@@ -167,6 +184,22 @@ cal_shell_content_update_model_and_current_view_times (ECalShellContent *cal_she
e_calendar_view_set_selected_time_range (current_view, view_start_tt, view_start_tt);
}
+ if (day_view && day_view_selection_start_day != -1 && day_view_selection_end_day != -1 &&
+ day_view_selection_start_row != -1 && day_view_selection_end_row != -1) {
+ GtkAdjustment *adjustment;
+
+ day_view->selection_start_day = day_view_selection_start_day;
+ day_view->selection_end_day = day_view_selection_end_day;
+ day_view->selection_start_row = day_view_selection_start_row;
+ day_view->selection_end_row = day_view_selection_end_row;
+
+ /* This is better than e_day_view_ensure_rows_visible(), because it keeps both
+ selection and the exact scrollbar position in the main canvas, which may not
+ always correspond to each other. */
+ adjustment = gtk_scrollable_get_vadjustment (GTK_SCROLLABLE (day_view->main_canvas));
+ gtk_adjustment_set_value (adjustment, day_view_scrollbar_position);
+ }
+
gtk_widget_queue_draw (GTK_WIDGET (current_view));
g_free (cal_filter);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]