[evolution-patches] patch for review (bug# 45770)



Hi Rodrigo,

Please review the new patch for evolution calendar keyboard navigation.  Thanks.
bug# 45770
Short Summary:
In DayView, Shift+Home/End, Change the duration to the time that begins/ends the current work day

-Andrew Wu

Index: e-day-view.c
===================================================================
RCS file: /cvs/gnome/evolution/calendar/gui/e-day-view.c,v
retrieving revision 1.212
diff -u -b -B -r1.212 e-day-view.c
--- e-day-view.c	24 Jul 2003 16:02:54 -0000	1.212
+++ e-day-view.c	26 Jul 2003 06:09:38 -0000
@@ -158,6 +158,8 @@
 static void e_day_view_update_query (EDayView *day_view);
 static void e_day_view_goto_start_of_work_day (EDayView *day_view);
 static void e_day_view_goto_end_of_work_day (EDayView *day_view);
+static void e_day_view_change_duration_to_start_of_work_day (EDayView *day_view);
+static void e_day_view_change_duration_to_end_of_work_day (EDayView *day_view);
 static void e_day_view_cursor_key_up_shifted (EDayView *day_view,
 					      GdkEventKey *event);
 static void e_day_view_cursor_key_down_shifted (EDayView *day_view,
@@ -4808,6 +4810,23 @@
 		return TRUE;
 	}
 	
+	/* In DayView, Shift+Home/End, Change the duration to the time that begins/ends the current work day */	
+	if ((keyval == GDK_Home)
+	    &&((event->state & GDK_SHIFT_MASK) == GDK_SHIFT_MASK)
+	    &&((event->state & GDK_CONTROL_MASK) != GDK_CONTROL_MASK)
+	    &&((event->state & GDK_MOD1_MASK) != GDK_MOD1_MASK)) {
+		e_day_view_change_duration_to_start_of_work_day (day_view);
+		return TRUE;
+	}
+	if ((keyval == GDK_End)
+	    &&((event->state & GDK_SHIFT_MASK) == GDK_SHIFT_MASK)
+	    &&((event->state & GDK_CONTROL_MASK) != GDK_CONTROL_MASK)
+	    &&((event->state & GDK_MOD1_MASK) != GDK_MOD1_MASK)) {
+		e_day_view_change_duration_to_end_of_work_day (day_view);
+		return TRUE;
+	}
+
+	
 	/* Handle the cursor keys for moving & extending the selection. */
 	stop_emission = TRUE;
 	if (event->state & GDK_SHIFT_MASK) {
@@ -4991,6 +5010,80 @@
 	gtk_widget_queue_draw (day_view->top_canvas);
 	gtk_widget_queue_draw (day_view->main_canvas);
 }
+
+/* Change the duration to the time that begins the current work day */
+static void
+e_day_view_change_duration_to_start_of_work_day (EDayView *day_view)
+{
+	g_return_if_fail(day_view != NULL);
+	
+	if (day_view->selection_in_top_canvas)
+		return;
+	else {
+		gint work_start_row,work_end_row,selection_start_row,selection_end_row;
+		
+		work_start_row =
+			e_day_view_convert_time_to_row (day_view, 
+							day_view->work_day_start_hour, 
+							day_view->work_day_start_minute);
+		work_end_row =
+			e_day_view_convert_time_to_row (day_view, 
+							day_view->work_day_end_hour - 1, 
+							day_view->work_day_end_minute + 30);
+		selection_start_row = day_view->selection_start_row;
+		selection_end_row = day_view->selection_end_row;
+		if (selection_start_row < work_start_row)
+			day_view->selection_end_row = work_start_row - 1;
+		else day_view->selection_start_row = work_start_row;
+	}
+	
+	e_day_view_ensure_rows_visible (day_view,
+					day_view->selection_start_row,
+					day_view->selection_end_row);
+
+	e_day_view_update_calendar_selection_time (day_view);
+
+	gtk_widget_queue_draw (day_view->top_canvas);
+	gtk_widget_queue_draw (day_view->main_canvas);
+}
+
+/* Change the duration to the time that ends the current work day */
+static void
+e_day_view_change_duration_to_end_of_work_day (EDayView *day_view)
+{
+	g_return_if_fail(day_view != NULL);
+    
+	if (day_view->selection_in_top_canvas)
+		return;
+	else { 
+		gint work_start_row,work_end_row,selection_start_row,selection_end_row;     
+		work_start_row =
+			e_day_view_convert_time_to_row (day_view, 
+							day_view->work_day_start_hour, 
+							day_view->work_day_start_minute);
+		work_end_row = e_day_view_convert_time_to_row (day_view, 
+							      day_view->work_day_end_hour-1, 
+							      day_view->work_day_end_minute+30);
+		selection_start_row = day_view->selection_start_row;
+		selection_end_row = day_view->selection_end_row;
+		if (selection_start_row <= work_end_row)
+			day_view->selection_end_row = work_end_row;
+		else {
+			day_view->selection_start_row = work_end_row + 1;
+			day_view->selection_end_row = selection_start_row;
+		}
+	}
+
+	e_day_view_ensure_rows_visible (day_view,
+					day_view->selection_start_row,
+					day_view->selection_end_row);
+	
+	e_day_view_update_calendar_selection_time (day_view);
+	
+	gtk_widget_queue_draw (day_view->top_canvas);
+	gtk_widget_queue_draw (day_view->main_canvas);
+}
+
 
 static void
 e_day_view_cursor_key_up_shifted (EDayView *day_view, GdkEventKey *event)


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]