From a722e3281e5404a902eefe0f20005f59b5b2d813 Mon Sep 17 00:00:00 2001 From: Srinivasa Ragavan Date: Wed, 23 Nov 2005 08:19:00 +0000 Subject: Added a function to get tooltip tooltip widget 2005-11-23 Srinivasa Ragavan * gui/e-calendar-view.c (tooltip_grab), (get_label), (e_calendar_view_get_tooltips): Added a function to get tooltip tooltip widget * gui/e-calendar-view.h: * gui/e-day-view.c (e_day_view_add_event), (e_day_view_reshape_long_event), (e_day_view_reshape_day_event), (e_day_view_on_text_item_event): Added tooltip for day/work week view. * gui/e-week-view.c (e_week_view_add_event), (tooltip_event_cb), (e_week_view_reshape_event_span), (e_week_view_on_text_item_event): Added tooltip for week/month view. * gui/e-week-view.h: * gui/misc.c (get_position_in_array), (calculate_time): Added a function for converting time to string. * gui/misc.h: svn path=/trunk/; revision=30648 --- calendar/gui/e-week-view.c | 90 +++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 86 insertions(+), 4 deletions(-) (limited to 'calendar/gui/e-week-view.c') diff --git a/calendar/gui/e-week-view.c b/calendar/gui/e-week-view.c index a3cd52bba3..d6a0aba123 100644 --- a/calendar/gui/e-week-view.c +++ b/calendar/gui/e-week-view.c @@ -2391,6 +2391,9 @@ e_week_view_add_event (ECalComponent *comp, } event.start = start; event.end = end; + event.tooltip = NULL; + event.timeout = -1; + event.color = NULL; event.spans_index = 0; event.num_spans = 0; event.comp_data->instance_start = start; @@ -2547,6 +2550,50 @@ e_week_view_reshape_events (EWeekView *week_view) } +static gboolean +tooltip_event_cb (GnomeCanvasItem *item, + GdkEvent *event, + EWeekView *view) +{ + EWeekViewEvent *pevent = g_object_get_data ((GObject *)item, "event"); + + switch (event->type) { + case GDK_ENTER_NOTIFY: + + pevent->x = ((GdkEventCrossing *)event)->x_root; + pevent->y = ((GdkEventCrossing *)event)->y_root; + pevent->tooltip = NULL; + pevent->timeout = g_timeout_add (500, (GSourceFunc)e_calendar_view_get_tooltips, pevent); + + return TRUE; + + case GDK_LEAVE_NOTIFY: + if (pevent && pevent->tooltip) { + gtk_widget_destroy (pevent->tooltip); + pevent->tooltip = NULL; + } + + if (pevent && pevent->timeout != -1) { + g_source_remove (pevent->timeout); + pevent->timeout = -1; + } + return TRUE; + case GDK_MOTION_NOTIFY: + pevent->x = ((GdkEventMotion *)event)->x_root; + pevent->y = ((GdkEventMotion *)event)->y_root; + + if (pevent->tooltip) { + gtk_window_move ((GtkWindow *)pevent->tooltip, ((int)((GdkEventMotion *)event)->x_root)+16, ((int)((GdkEventMotion *)event)->y_root) +16); + } + + return TRUE; + default: + return FALSE; + } + + return FALSE; +} + static void e_week_view_reshape_event_span (EWeekView *week_view, gint event_num, @@ -2640,7 +2687,12 @@ e_week_view_reshape_event_span (EWeekView *week_view, e_week_view_event_item_get_type (), NULL); } - + + g_object_set_data ((GObject *)span->background_item, "event", event); + g_signal_connect (span->background_item, "event", + G_CALLBACK (tooltip_event_cb), + week_view); + gnome_canvas_item_set (span->background_item, "event_num", event_num, "span_num", span_num, @@ -2671,7 +2723,7 @@ e_week_view_reshape_event_span (EWeekView *week_view, && e_cal_util_component_has_attendee (event->comp_data->icalcomp)) { set_text_as_bold (event, span); } */ - + g_object_set_data ((GObject *)span->text_item, "event", event); g_signal_connect (span->text_item, "event", G_CALLBACK (e_week_view_on_text_item_event), week_view); @@ -2940,11 +2992,12 @@ e_week_view_on_text_item_event (GnomeCanvasItem *item, { EWeekViewEvent *event; gint event_num, span_num; - + EWeekViewEvent *pevent = g_object_get_data ((GObject *)item, "event"); + #if 0 g_print ("In e_week_view_on_text_item_event\n"); #endif - + switch (gdkevent->type) { case GDK_KEY_PRESS: if (gdkevent && gdkevent->key.keyval == GDK_Return) { @@ -3055,6 +3108,35 @@ e_week_view_on_text_item_event (GnomeCanvasItem *item, } week_view->pressed_event_num = -1; break; + case GDK_ENTER_NOTIFY: + + pevent->x = ((GdkEventCrossing *)gdkevent)->x_root; + pevent->y = ((GdkEventCrossing *)gdkevent)->y_root; + pevent->tooltip = NULL; + pevent->timeout = g_timeout_add (500, (GSourceFunc)e_calendar_view_get_tooltips, pevent); + + return TRUE; + + case GDK_LEAVE_NOTIFY: + if (pevent && pevent->tooltip) { + gtk_widget_destroy (pevent->tooltip); + pevent->tooltip = NULL; + } + + if (pevent && pevent->timeout != -1) { + g_source_remove (pevent->timeout); + pevent->timeout = -1; + } + return TRUE; + case GDK_MOTION_NOTIFY: + pevent->x = ((GdkEventMotion *)gdkevent)->x_root; + pevent->y = ((GdkEventMotion *)gdkevent)->y_root; + + if (pevent->tooltip) { + gtk_window_move ((GtkWindow *)pevent->tooltip, ((int)((GdkEventMotion *)gdkevent)->x_root)+16, ((int)((GdkEventMotion *)gdkevent)->y_root) +16); + } + + return TRUE; case GDK_FOCUS_CHANGE: if (gdkevent->focus_change.in) { e_week_view_on_editing_started (week_view, item); -- cgit v1.2.3