[evolution/wip/webkit2] Bug 756664 - Preserve selection on date change in Day/Work Week views



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]