dmalcolm 61d27c
--- evolution-2.5.5.1/calendar/gui/e-day-view.c.commit-enter-on-calendar	2006-01-16 09:42:17.000000000 -0500
dmalcolm 61d27c
+++ evolution-2.5.5.1/calendar/gui/e-day-view.c	2006-01-25 23:48:24.000000000 -0500
dmalcolm 61d27c
@@ -334,6 +334,10 @@
dmalcolm 61d27c
 					    gint event_num,
dmalcolm 61d27c
 					    gchar *initial_text);
dmalcolm 61d27c
 static void e_day_view_stop_editing_event (EDayView *day_view);
dmalcolm 61d27c
+static gboolean e_day_view_text_keypress (GnomeCanvasItem *item,
dmalcolm 61d27c
+					  guint             keyval,
dmalcolm 61d27c
+					  guint             state,
dmalcolm 61d27c
+					  EDayView         *day_view);
dmalcolm 61d27c
 static gboolean e_day_view_on_text_item_event (GnomeCanvasItem *item,
dmalcolm 61d27c
 					       GdkEvent *event,
dmalcolm 61d27c
 					       EDayView *day_view);
dmalcolm 61d27c
@@ -4484,6 +4488,8 @@
dmalcolm 61d27c
 				  G_CALLBACK (e_day_view_on_text_item_event), day_view);
dmalcolm 61d27c
 		g_signal_emit_by_name (G_OBJECT(day_view),
dmalcolm 61d27c
 				       "event_added", event);
dmalcolm 61d27c
+		g_signal_connect (event->canvas_item, "keypress",
dmalcolm 61d27c
+				  G_CALLBACK (e_day_view_text_keypress), day_view);
dmalcolm 61d27c
 
dmalcolm 61d27c
 		e_day_view_update_long_event_label (day_view, event_num);
dmalcolm 61d27c
 	}
dmalcolm 61d27c
@@ -4667,6 +4673,8 @@
dmalcolm 61d27c
 					  G_CALLBACK (e_day_view_on_text_item_event), day_view);
dmalcolm 61d27c
 			g_signal_emit_by_name (G_OBJECT(day_view),
dmalcolm 61d27c
 					       "event_added", event);
dmalcolm 61d27c
+			g_signal_connect (event->canvas_item, "keypress",
dmalcolm 61d27c
+					  G_CALLBACK (e_day_view_text_keypress), day_view);
dmalcolm 61d27c
 
dmalcolm 61d27c
 			e_day_view_update_event_label (day_view, day, event_num);
dmalcolm 61d27c
 		}
dmalcolm 61d27c
@@ -5824,46 +5832,74 @@
dmalcolm 61d27c
 }
dmalcolm 61d27c
 
dmalcolm 61d27c
 static gboolean
dmalcolm 61d27c
+e_day_view_text_keypress (GnomeCanvasItem *item,
dmalcolm 61d27c
+			  guint            keyval,
dmalcolm 61d27c
+			  guint            state,
dmalcolm 61d27c
+			  EDayView        *day_view)
dmalcolm 61d27c
+{
dmalcolm 61d27c
+	gboolean retval = FALSE;
dmalcolm 61d27c
+
dmalcolm 61d27c
+	tooltip_destroy (day_view, item);
dmalcolm 61d27c
+
dmalcolm 61d27c
+	if (keyval == GDK_Return) {
dmalcolm 61d27c
+		EText *text = E_TEXT (item);
dmalcolm 61d27c
+		gint new_pos = 0;
dmalcolm 61d27c
+
dmalcolm 61d27c
+		/*
dmalcolm 61d27c
+		 * HACK: last character which should be \n needs to be deleted
dmalcolm 61d27c
+		 * here so that GDK_Return was already processed on EText
dmalcolm 61d27c
+		 * before E_TEXT_KEYPRESS event is emitted.
dmalcolm 61d27c
+		 */
dmalcolm 61d27c
+		if (text->selection_end >= 1)
dmalcolm 61d27c
+			new_pos = text->selection_end - 1;
dmalcolm 61d27c
+
dmalcolm 61d27c
+		text->selection_end = e_text_model_validate_position (text->model, new_pos);
dmalcolm 61d27c
+		e_text_delete_selection (text);
dmalcolm 61d27c
+
dmalcolm 61d27c
+		day_view->resize_event_num = -1;
dmalcolm 61d27c
+
dmalcolm 61d27c
+		/* We set the keyboard focus to the EDayView, so the
dmalcolm 61d27c
+		   EText item loses it and stops the edit. */
dmalcolm 61d27c
+		gtk_widget_grab_focus (GTK_WIDGET (day_view));
dmalcolm 61d27c
+
dmalcolm 61d27c
+		/* Stop the signal last or we will also stop any
dmalcolm 61d27c
+		   other events getting to the EText item. */
dmalcolm 61d27c
+		gtk_signal_emit_stop_by_name (GTK_OBJECT (item),
dmalcolm 61d27c
+					      "event");
dmalcolm 61d27c
+
dmalcolm 61d27c
+		retval = TRUE;
dmalcolm 61d27c
+	} else if (keyval == GDK_Escape) {
dmalcolm 61d27c
+		cancel_editing (day_view);
dmalcolm 61d27c
+		gtk_signal_emit_stop_by_name (GTK_OBJECT (item), "event");
dmalcolm 61d27c
+		/* focus should go to day view when stop editing */
dmalcolm 61d27c
+		gtk_widget_grab_focus (GTK_WIDGET (day_view));
dmalcolm 61d27c
+
dmalcolm 61d27c
+		retval = TRUE;
dmalcolm 61d27c
+	} else if ((keyval == GDK_Up)
dmalcolm 61d27c
+		   && (state & GDK_SHIFT_MASK)
dmalcolm 61d27c
+		   && (state & GDK_CONTROL_MASK)
dmalcolm 61d27c
+		   && !(state & GDK_MOD1_MASK)) {
dmalcolm 61d27c
+		e_day_view_change_event_end_time_up (day_view);
dmalcolm 61d27c
+
dmalcolm 61d27c
+		retval = TRUE;
dmalcolm 61d27c
+	} else if ((keyval == GDK_Down)
dmalcolm 61d27c
+		   && (state & GDK_SHIFT_MASK)
dmalcolm 61d27c
+		   && (state & GDK_CONTROL_MASK)
dmalcolm 61d27c
+		   && !(state & GDK_MOD1_MASK)) {
dmalcolm 61d27c
+		e_day_view_change_event_end_time_down (day_view);
dmalcolm 61d27c
+
dmalcolm 61d27c
+		retval = TRUE;
dmalcolm 61d27c
+	}
dmalcolm 61d27c
+
dmalcolm 61d27c
+	return retval;
dmalcolm 61d27c
+}
dmalcolm 61d27c
+
dmalcolm 61d27c
+static gboolean
dmalcolm 61d27c
 e_day_view_on_text_item_event (GnomeCanvasItem *item,
dmalcolm 61d27c
 			       GdkEvent *event,
dmalcolm 61d27c
 			       EDayView *day_view)
dmalcolm 61d27c
 {
dmalcolm 61d27c
 	switch (event->type) {
dmalcolm 61d27c
-	case GDK_KEY_PRESS:
dmalcolm 61d27c
-		tooltip_destroy (day_view, item);
dmalcolm 61d27c
-		if (event && event->key.keyval == GDK_Return) {
dmalcolm 61d27c
-			day_view->resize_event_num = -1;
dmalcolm 61d27c
-			day_view->resize_event_num = -1;
dmalcolm 61d27c
-
dmalcolm 61d27c
-			/* We set the keyboard focus to the EDayView, so the
dmalcolm 61d27c
-			   EText item loses it and stops the edit. */
dmalcolm 61d27c
-			gtk_widget_grab_focus (GTK_WIDGET (day_view));
dmalcolm 61d27c
-
dmalcolm 61d27c
-			/* Stop the signal last or we will also stop any
dmalcolm 61d27c
-			   other events getting to the EText item. */
dmalcolm 61d27c
-			gtk_signal_emit_stop_by_name (GTK_OBJECT (item),
dmalcolm 61d27c
-						      "event");
dmalcolm 61d27c
-			return TRUE;
dmalcolm 61d27c
-		} else if (event->key.keyval == GDK_Escape) {
dmalcolm 61d27c
-			cancel_editing (day_view);
dmalcolm 61d27c
-			gtk_signal_emit_stop_by_name (GTK_OBJECT (item), "event");
dmalcolm 61d27c
-			/* focus should go to day view when stop editing */
dmalcolm 61d27c
-			gtk_widget_grab_focus (GTK_WIDGET (day_view));
dmalcolm 61d27c
-			return TRUE;
dmalcolm 61d27c
-               } else if ((event->key.keyval == GDK_Up)
dmalcolm 61d27c
-                          && (event->key.state & GDK_SHIFT_MASK)
dmalcolm 61d27c
-                          && (event->key.state & GDK_CONTROL_MASK)
dmalcolm 61d27c
-                          && !(event->key.state & GDK_MOD1_MASK)) {
dmalcolm 61d27c
-                       e_day_view_change_event_end_time_up (day_view);
dmalcolm 61d27c
-                       return TRUE;
dmalcolm 61d27c
-               } else if ((event->key.keyval == GDK_Down)
dmalcolm 61d27c
-                          && (event->key.state & GDK_SHIFT_MASK)
dmalcolm 61d27c
-                          && (event->key.state & GDK_CONTROL_MASK)
dmalcolm 61d27c
-                          && !(event->key.state & GDK_MOD1_MASK)) {
dmalcolm 61d27c
-                       e_day_view_change_event_end_time_down (day_view);
dmalcolm 61d27c
-                       return TRUE;
dmalcolm 61d27c
-		}
dmalcolm 61d27c
-		break;
dmalcolm 61d27c
 	case GDK_2BUTTON_PRESS:
dmalcolm 61d27c
 #if 0
dmalcolm 61d27c
 		g_print ("Item got double-click\n");
dmalcolm 61d27c
--- evolution-2.5.5.1/calendar/gui/e-week-view.c.commit-enter-on-calendar	2006-01-16 09:42:17.000000000 -0500
dmalcolm 61d27c
+++ evolution-2.5.5.1/calendar/gui/e-week-view.c	2006-01-25 23:46:43.000000000 -0500
dmalcolm 61d27c
@@ -175,6 +175,10 @@
dmalcolm 61d27c
 						const gchar *uid,
dmalcolm 61d27c
 						EWeekViewForeachEventCallback callback,
dmalcolm 61d27c
 						gpointer data);
dmalcolm 61d27c
+static gboolean e_week_view_text_keypress (GnomeCanvasItem *item,
dmalcolm 61d27c
+					   guint            keyval,
dmalcolm 61d27c
+					   guint            state,
dmalcolm 61d27c
+					   EWeekView       *week_view);
dmalcolm 61d27c
 static gboolean e_week_view_on_text_item_event (GnomeCanvasItem *item,
dmalcolm 61d27c
 						GdkEvent *event,
dmalcolm 61d27c
 						EWeekView *week_view);
dmalcolm 61d27c
@@ -2771,6 +2775,8 @@
dmalcolm 61d27c
 				  week_view);
dmalcolm 61d27c
 		g_signal_emit_by_name (G_OBJECT(week_view),
dmalcolm 61d27c
 				       "event_added", event);
dmalcolm 61d27c
+		g_signal_connect (span->text_item, "keypress",
dmalcolm 61d27c
+				  G_CALLBACK (e_week_view_text_keypress), week_view);
dmalcolm 61d27c
 
dmalcolm 61d27c
 	}
dmalcolm 61d27c
 
dmalcolm 61d27c
@@ -3028,6 +3034,51 @@
dmalcolm 61d27c
 }
dmalcolm 61d27c
 
dmalcolm 61d27c
 static gboolean
dmalcolm 61d27c
+e_week_view_text_keypress (GnomeCanvasItem *item,
dmalcolm 61d27c
+			   guint            keyval,
dmalcolm 61d27c
+			   guint            state,
dmalcolm 61d27c
+			   EWeekView       *week_view)
dmalcolm 61d27c
+{
dmalcolm 61d27c
+	gboolean retval = FALSE;
dmalcolm 61d27c
+
dmalcolm 61d27c
+	tooltip_destroy (week_view, item);
dmalcolm 61d27c
+
dmalcolm 61d27c
+	if (keyval == GDK_Return) {
dmalcolm 61d27c
+		EText *text = E_TEXT (item);
dmalcolm 61d27c
+		gint new_pos = 0;
dmalcolm 61d27c
+
dmalcolm 61d27c
+		/*
dmalcolm 61d27c
+		 * HACK: last charater which should be \n needs to be deleted
dmalcolm 61d27c
+		 * here so that GDK_Return was already processed on EText
dmalcolm 61d27c
+		 * before E_TEXT_KEYPRESS event is emitted.
dmalcolm 61d27c
+		 */
dmalcolm 61d27c
+		if (text->selection_end >= 1)
dmalcolm 61d27c
+			new_pos = text->selection_end - 1;
dmalcolm 61d27c
+
dmalcolm 61d27c
+		text->selection_end = e_text_model_validate_position (text->model, new_pos);
dmalcolm 61d27c
+		e_text_delete_selection (text);
dmalcolm 61d27c
+
dmalcolm 61d27c
+		/* We set the keyboard focus to the EDayView, so the
dmalcolm 61d27c
+		   EText item loses it and stops the edit. */
dmalcolm 61d27c
+		gtk_widget_grab_focus (GTK_WIDGET (week_view));
dmalcolm 61d27c
+
dmalcolm 61d27c
+		/* Stop the signal last or we will also stop any
dmalcolm 61d27c
+		   other events getting to the EText item. */
dmalcolm 61d27c
+		gtk_signal_emit_stop_by_name (GTK_OBJECT (item),
dmalcolm 61d27c
+					      "event");
dmalcolm 61d27c
+		retval = TRUE;
dmalcolm 61d27c
+	} else if (keyval == GDK_Escape) {
dmalcolm 61d27c
+		cancel_editing (week_view);
dmalcolm 61d27c
+		gtk_signal_emit_stop_by_name (GTK_OBJECT (item), "event");
dmalcolm 61d27c
+		/* focus should go to week view when stop editing */
dmalcolm 61d27c
+		gtk_widget_grab_focus (GTK_WIDGET (week_view));
dmalcolm 61d27c
+		retval = TRUE;
dmalcolm 61d27c
+	}
dmalcolm 61d27c
+
dmalcolm 61d27c
+	return retval;
dmalcolm 61d27c
+}
dmalcolm 61d27c
+
dmalcolm 61d27c
+static gboolean
dmalcolm 61d27c
 e_week_view_on_text_item_event (GnomeCanvasItem *item,
dmalcolm 61d27c
 				GdkEvent *gdkevent,
dmalcolm 61d27c
 				EWeekView *week_view)
dmalcolm 61d27c
@@ -3044,26 +3095,6 @@
dmalcolm 61d27c
 #endif
dmalcolm 61d27c
 	
dmalcolm 61d27c
 	switch (gdkevent->type) {
dmalcolm 61d27c
-	case GDK_KEY_PRESS:
dmalcolm 61d27c
-		tooltip_destroy (week_view, item);
dmalcolm 61d27c
-		if (gdkevent && gdkevent->key.keyval == GDK_Return) {
dmalcolm 61d27c
-			/* We set the keyboard focus to the EDayView, so the
dmalcolm 61d27c
-			   EText item loses it and stops the edit. */
dmalcolm 61d27c
-			gtk_widget_grab_focus (GTK_WIDGET (week_view));
dmalcolm 61d27c
-
dmalcolm 61d27c
-			/* Stop the signal last or we will also stop any
dmalcolm 61d27c
-			   other events getting to the EText item. */
dmalcolm 61d27c
-			gtk_signal_emit_stop_by_name (GTK_OBJECT (item),
dmalcolm 61d27c
-						      "event");
dmalcolm 61d27c
-			return TRUE;
dmalcolm 61d27c
-		} else if (gdkevent->key.keyval == GDK_Escape) {
dmalcolm 61d27c
-			cancel_editing (week_view);
dmalcolm 61d27c
-			gtk_signal_emit_stop_by_name (GTK_OBJECT (item), "event");
dmalcolm 61d27c
-			/* focus should go to week view when stop editing */
dmalcolm 61d27c
-			gtk_widget_grab_focus (GTK_WIDGET (week_view));
dmalcolm 61d27c
-			return TRUE;
dmalcolm 61d27c
-		}
dmalcolm 61d27c
-		break;
dmalcolm 61d27c
 	case GDK_2BUTTON_PRESS:
dmalcolm 61d27c
 		if (!e_week_view_find_event_from_item (week_view, item,
dmalcolm 61d27c
 						       &event_num, &span_num))