aboutsummaryrefslogtreecommitdiffstats
path: root/calendar/gui/e-day-view.c
diff options
context:
space:
mode:
authorChenthill Palanisamy <pchen@src.gnome.org>2006-01-16 20:59:44 +0800
committerChenthill Palanisamy <pchen@src.gnome.org>2006-01-16 20:59:44 +0800
commit6c80f5f32138e8405e3490f0de42871794773bcb (patch)
tree94b6e441b8357bdf4c58880d7897c5bf06a63cac /calendar/gui/e-day-view.c
parent14c9dc50969c61a7783bab1af5042d0570c2ffb0 (diff)
downloadgsoc2013-evolution-6c80f5f32138e8405e3490f0de42871794773bcb.tar.gz
gsoc2013-evolution-6c80f5f32138e8405e3490f0de42871794773bcb.tar.zst
gsoc2013-evolution-6c80f5f32138e8405e3490f0de42871794773bcb.zip
fixes #324739
svn path=/trunk/; revision=31213
Diffstat (limited to 'calendar/gui/e-day-view.c')
-rw-r--r--calendar/gui/e-day-view.c78
1 files changed, 57 insertions, 21 deletions
diff --git a/calendar/gui/e-day-view.c b/calendar/gui/e-day-view.c
index 47c466602d..d7caff97ce 100644
--- a/calendar/gui/e-day-view.c
+++ b/calendar/gui/e-day-view.c
@@ -2835,6 +2835,12 @@ e_day_view_convert_event_coords (EDayView *day_view,
event_y = event->motion.y;
event_window = event->motion.window;
break;
+ case GDK_ENTER_NOTIFY:
+ case GDK_LEAVE_NOTIFY:
+ event_x = event->crossing.x;
+ event_y = event->crossing.y;
+ event_window = event->crossing.window;
+ break;
default:
/* Shouldn't get here. */
g_assert_not_reached ();
@@ -2959,6 +2965,12 @@ e_day_view_on_time_canvas_scroll (GtkWidget *widget,
GdkEventScroll *scroll,
EDayView *day_view)
{
+ GtkWidget *tool_window = g_object_get_data ((GObject *)day_view, "tooltip-window");
+
+ if (tool_window) {
+ gtk_widget_destroy (tool_window);
+ g_object_set_data (day_view, "tooltip-window", NULL);
+ }
switch (scroll->direction) {
case GDK_SCROLL_UP:
@@ -5777,7 +5789,6 @@ tooltip_get_view_event (EDayView *day_view, int day, int event_num)
{
EDayViewEvent *pevent;
-
if (day == E_DAY_VIEW_LONG_EVENT) {
pevent = &g_array_index (day_view->long_events, EDayViewEvent,
event_num);
@@ -5792,13 +5803,13 @@ tooltip_get_view_event (EDayView *day_view, int day, int event_num)
static void
tooltip_destroy (EDayView *day_view, GnomeCanvasItem *item)
{
- int day = GPOINTER_TO_INT (g_object_get_data (item, "event-day"));
- int event_num = GPOINTER_TO_INT (g_object_get_data (item, "event-num"));
EDayViewEvent *pevent;
+ int event_num = GPOINTER_TO_INT(g_object_get_data ((GObject *)item, "event-num"));
+ int day = GPOINTER_TO_INT(g_object_get_data ((GObject *)item, "event-day"));
pevent = tooltip_get_view_event (day_view, day, event_num);
if (pevent) {
- if (pevent->tooltip) {
+ if (pevent->tooltip && g_object_get_data (day_view, "tooltip-window")) {
gtk_widget_destroy (pevent->tooltip);
pevent->tooltip = NULL;
}
@@ -5807,6 +5818,8 @@ tooltip_destroy (EDayView *day_view, GnomeCanvasItem *item)
g_source_remove (pevent->timeout);
pevent->timeout = -1;
}
+
+ g_object_set_data (day_view, "tooltip-window", NULL);
}
}
@@ -5874,12 +5887,45 @@ e_day_view_on_text_item_event (GnomeCanvasItem *item,
return FALSE;
case GDK_ENTER_NOTIFY:
{
- int day = GPOINTER_TO_INT (g_object_get_data (item, "event-day"));
- int event_num = GPOINTER_TO_INT (g_object_get_data (item, "event-num"));
EDayViewEvent *pevent;
ECalendarViewEventData *data;
-
+ gint event_x, event_y, row, day, event_num;
+ ECalendarViewPosition pos;
+ gboolean main_canvas = TRUE;
+
+ /* Convert the coords to the main canvas window, or return if the
+ window is not found. */
+ if (!e_day_view_convert_event_coords (day_view, (GdkEvent*) event,
+ GTK_LAYOUT (day_view->main_canvas)->bin_window,
+ &event_x, &event_y)) {
+ main_canvas = FALSE;
+ if (!e_day_view_convert_event_coords (day_view, (GdkEvent*) event,
+ GTK_LAYOUT (day_view->top_canvas)->bin_window,
+ &event_x, &event_y)) {
+ return FALSE;
+ }
+ }
+ /* Find out where the mouse is. */
+ if (main_canvas) {
+ pos = e_day_view_convert_position_in_main_canvas (day_view,
+ event_x, event_y,
+ &day, &row,
+ &event_num);
+ } else {
+ int tmp;
+
+ pos = e_day_view_convert_position_in_top_canvas (day_view,
+ event_x, event_y,
+ &tmp, &event_num);
+ day = E_DAY_VIEW_LONG_EVENT;
+ }
+
+ if (pos == E_CALENDAR_VIEW_POS_OUTSIDE)
+ return FALSE;
+
pevent = tooltip_get_view_event (day_view, day, event_num);
+ g_object_set_data (item, "event-num", GINT_TO_POINTER (event_num));
+ g_object_set_data (item, "event-day", GINT_TO_POINTER (day));
data = g_malloc (sizeof (ECalendarViewEventData));
pevent->x = ((GdkEventCrossing *)event)->x_root;
@@ -5899,15 +5945,16 @@ e_day_view_on_text_item_event (GnomeCanvasItem *item,
return TRUE;
case GDK_MOTION_NOTIFY:
{
- int day = GPOINTER_TO_INT (g_object_get_data (item, "event-day"));
- int event_num = GPOINTER_TO_INT (g_object_get_data (item, "event-num"));
EDayViewEvent *pevent;
+ int event_num = GPOINTER_TO_INT(g_object_get_data ((GObject *)item, "event-num"));
+ int day = GPOINTER_TO_INT(g_object_get_data ((GObject *)item, "event-day"));
pevent = tooltip_get_view_event (day_view, day, event_num);
pevent->x = ((GdkEventMotion *)event)->x_root;
pevent->y = ((GdkEventMotion *)event)->y_root;
-
+ pevent->tooltip = (GtkWidget *)g_object_get_data (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);
}
@@ -6331,17 +6378,6 @@ e_day_view_on_editing_stopped (EDayView *day_view,
out:
- if (event) {
- if (event->tooltip) {
- gtk_widget_destroy (event->tooltip);
- event->tooltip = NULL;
- }
-
- if (event->timeout != -1) {
- g_source_remove (event->timeout);
- event->timeout = -1;
- }
- }
g_object_unref (comp);
g_free (text);