Index: calendar/gui/e-calendar-view.c
===================================================================
RCS file: /cvs/gnome/evolution/calendar/gui/e-calendar-view.c,v
retrieving revision 1.117
diff -u -p -r1.117 e-calendar-view.c
--- calendar/gui/e-calendar-view.c	14 Feb 2006 08:03:10 -0000	1.117
+++ calendar/gui/e-calendar-view.c	4 Apr 2006 16:46:31 -0000
@@ -1957,6 +1957,44 @@ get_label (struct icaltimetype *tt)
         return g_strdup (buffer);
 }
 
+void 
+e_calendar_view_move_tip (GtkWidget *widget, int x, int y)
+{
+  GtkRequisition requisition;
+  gint w, h;
+  GdkScreen *screen;
+  GdkScreen *pointer_screen;
+  gint monitor_num, px, py;
+  GdkRectangle monitor;	
+
+  screen = gtk_widget_get_screen (widget);
+
+  gtk_widget_size_request (widget, &requisition);
+  w = requisition.width;
+  h = requisition.height;
+
+  gdk_display_get_pointer (gdk_screen_get_display (screen),
+                           &pointer_screen, &px, &py, NULL);
+  if (pointer_screen != screen) 
+    {
+      px = x;
+      py = y;
+    }
+  monitor_num = gdk_screen_get_monitor_at_point (screen, px, py);
+  gdk_screen_get_monitor_geometry (screen, monitor_num, &monitor);
+
+  if ((x + w) > monitor.x + monitor.width)
+    x -= (x + w) - (monitor.x + monitor.width);
+  else if (x < monitor.x)
+    x = monitor.x;
+
+  if ((y + h + widget->allocation.height + 4) > monitor.y + monitor.height)
+    y = y - h - 36;
+
+  gtk_window_move (GTK_WINDOW (widget), x, y);
+  gtk_widget_show (widget); 
+}
+
 /* 
  * It is expected to show the tooltips in this below format
  *
@@ -2098,6 +2136,9 @@ e_calendar_view_get_tooltips (ECalendarV
 	gtk_container_add ((GtkContainer *)pevent->tooltip, frame);
 			
 	gtk_widget_show_all (pevent->tooltip);	
+
+	e_calendar_view_move_tip (pevent->tooltip, pevent->x +16, pevent->y+16);
+
 	gdk_keyboard_grab (pevent->tooltip->window, FALSE, GDK_CURRENT_TIME);
 	g_signal_connect (pevent->tooltip, "key-press-event", G_CALLBACK (tooltip_grab), data->cal_view);
 	pevent->timeout = -1;
Index: calendar/gui/e-day-view.c
===================================================================
RCS file: /cvs/gnome/evolution/calendar/gui/e-day-view.c,v
retrieving revision 1.294
diff -u -p -r1.294 e-day-view.c
--- calendar/gui/e-day-view.c	8 Feb 2006 13:06:02 -0000	1.294
+++ calendar/gui/e-day-view.c	4 Apr 2006 16:46:47 -0000
@@ -5895,7 +5897,7 @@ e_day_view_on_text_item_event (GnomeCanv
 			pevent->tooltip = (GtkWidget *)g_object_get_data (G_OBJECT (day_view), "tooltip-window");
 			
 			if (pevent->tooltip) {
-				gtk_window_move ((GtkWindow *)pevent->tooltip, ((int)((GdkEventMotion *)event)->x_root)+16, ((int)((GdkEventMotion *)event)->y_root) +16);
+				e_calendar_view_move_tip (pevent->tooltip, pevent->x+16, pevent->y+16);
 			}
 
 			return TRUE;
Index: calendar/gui/e-week-view.c
===================================================================
RCS file: /cvs/gnome/evolution/calendar/gui/e-week-view.c,v
retrieving revision 1.257
diff -u -p -r1.257 e-week-view.c
--- calendar/gui/e-week-view.c	8 Feb 2006 13:06:02 -0000	1.257
+++ calendar/gui/e-week-view.c	4 Apr 2006 16:46:57 -0000
@@ -2554,7 +2554,7 @@ tooltip_event_cb (GnomeCanvasItem *item,
 			pevent->tooltip = (GtkWidget *)g_object_get_data (G_OBJECT (view), "tooltip-window");
 			
 			if (pevent->tooltip) {
-				gtk_window_move ((GtkWindow *)pevent->tooltip, ((int)((GdkEventMotion *)event)->x_root)+16, ((int)((GdkEventMotion *)event)->y_root) +16);
+				e_calendar_view_move_tip (pevent->tooltip, pevent->x+16, pevent->y+16);				
 			}
 
 			return TRUE;
@@ -3125,9 +3125,9 @@ e_week_view_on_text_item_event (GnomeCan
 		pevent->y = ((GdkEventMotion *)gdkevent)->y_root;
 		pevent->tooltip = (GtkWidget *)g_object_get_data (G_OBJECT (week_view), "tooltip-window");
 		
-		if (pevent->tooltip)
-			gtk_window_move ((GtkWindow *)pevent->tooltip, ((int)((GdkEventMotion *)gdkevent)->x_root)+16, ((int)((GdkEventMotion *)gdkevent)->y_root) +16);
-
+		if (pevent->tooltip) {
+			e_calendar_view_move_tip (pevent->tooltip, pevent->x+16, pevent->y+16);			
+		}
 		return TRUE;		
 	case GDK_FOCUS_CHANGE:
 		if (gdkevent->focus_change.in) {
