gboolean
e_calendar_view_get_tooltips (ECalendarViewEventData *data)
{
GtkWidget *label, *box, *hbox, *ebox, *frame;
const char *str;
char *tmp, *tmp1, *tmp2;
ECalComponentOrganizer organiser;
ECalComponentDateTime dtstart, dtend;
icalcomponent *clone_comp;
time_t t_start, t_end;
ECalendarViewEvent *pevent;
GtkStyle *style = gtk_widget_get_default_style ();
pevent = data->get_view_event (data->cal_view, data->day, data->event_num);
g_free (data);
ECalComponent *newcomp = e_cal_component_new ();
icaltimezone *zone, *default_zone;
clone_comp = icalcomponent_new_clone (pevent->comp_data->icalcomp);
if (!e_cal_component_set_icalcomponent (newcomp, clone_comp))
g_warning ("couldn't update calendar component with modified data from backend\n");
box = gtk_vbox_new (FALSE, 0);
str = icalcomponent_get_summary (pevent->comp_data->icalcomp);
if (!(str && *str)) {
g_object_unref (newcomp);
gtk_widget_destroy (box);
return FALSE;
}
tmp = g_strdup_printf ("%s", str);
label = gtk_label_new (NULL);
gtk_label_set_line_wrap ((GtkLabel *)label, TRUE);
gtk_label_set_markup ((GtkLabel *)label, tmp);
hbox = gtk_hbox_new (FALSE, 0);
gtk_box_pack_start ((GtkBox *)hbox, label, FALSE, FALSE, 0);
ebox = gtk_event_box_new ();
gtk_container_add ((GtkContainer *)ebox, hbox);
gtk_widget_modify_bg (ebox, GTK_STATE_NORMAL, &(style->bg[GTK_STATE_SELECTED]));
gtk_widget_modify_fg (label, GTK_STATE_NORMAL, &(style->text[GTK_STATE_SELECTED]));
gtk_box_pack_start ((GtkBox *)box, ebox, FALSE, FALSE, 0);
g_free (tmp);
e_cal_component_get_organizer (newcomp, &organiser);
if (organiser.cn) {
char *ptr ;
GtkWidget *hbox = gtk_hbox_new (FALSE, 0);
ptr = strchr(organiser.value, ':');
ptr++;
/* To Translators: It will display "Organiser: NameOfTheUser " */
tmp = g_strdup_printf (_("Organizer: %s <%s>"), organiser.cn, ptr);
label = gtk_label_new (tmp);
gtk_box_pack_start ((GtkBox *)hbox, label, FALSE, FALSE, 0);
ebox = gtk_event_box_new ();
gtk_container_add ((GtkContainer *)ebox, hbox);
gtk_box_pack_start ((GtkBox *)box, ebox, FALSE, FALSE, 0);
g_free (tmp);
}
e_cal_component_get_location (newcomp, &str);
if (str) {
/* To Translators: It will display "Location: PlaceOfTheMeeting" */
tmp = g_strdup_printf (_("Location: %s"), str);
label = gtk_label_new (NULL);
gtk_label_set_markup ((GtkLabel *)label, tmp);
hbox = gtk_hbox_new (FALSE, 0);
gtk_box_pack_start ((GtkBox *)hbox, label, FALSE, FALSE, 0);
ebox = gtk_event_box_new ();
gtk_container_add ((GtkContainer *)ebox, hbox);
gtk_box_pack_start ((GtkBox *)box, ebox, FALSE, FALSE, 0);
g_free (tmp);
}
e_cal_component_get_dtstart (newcomp, &dtstart);
e_cal_component_get_dtend (newcomp, &dtend);
if (dtstart.tzid) {
zone = icalcomponent_get_timezone (e_cal_component_get_icalcomponent (newcomp), dtstart.tzid);
} else {
zone = NULL;
}
t_start = icaltime_as_timet_with_zone (*dtstart.value, zone);
if (dtend.tzid) {
zone = icalcomponent_get_timezone (e_cal_component_get_icalcomponent (newcomp), dtend.tzid);
} else {
zone = NULL;
}
t_end = icaltime_as_timet_with_zone (*dtend.value, zone);
tmp1 = get_label(dtstart.value);
tmp = calculate_time (t_start, t_end);
/* To Translators: It will display "Time: ActualStartDateAndTime (DurationOfTheMeeting)"*/
tmp2 = g_strdup_printf(_("Time: %s %s"), tmp1, tmp);
hbox = gtk_hbox_new (FALSE, 0);
gtk_box_pack_start ((GtkBox *)hbox, gtk_label_new_with_mnemonic (tmp2), FALSE, FALSE, 0);
ebox = gtk_event_box_new ();
gtk_container_add ((GtkContainer *)ebox, hbox);
gtk_box_pack_start ((GtkBox *)box, ebox, FALSE, FALSE, 0);
g_free (tmp);
g_free (tmp2);
g_free (tmp1);
/* zone = icalcomponent_get_timezone (e_cal_component_get_icalcomponent (newcomp), dtstart.tzid);*/
default_zone = calendar_config_get_icaltimezone ();
tmp1 = icaltimezone_get_display_name(default_zone);
//tmp = icaltimezone_get_display_name (zone);
if(zone == NULL)
{
tmp = icaltimezone_get_location(zone);
tmp2 = g_strdup_printf(_("Timezone: %s %s"), tmp , tmp1);
hbox = gtk_hbox_new (FALSE, 0);
gtk_box_pack_start ((GtkBox *)hbox, gtk_label_new_with_mnemonic (tmp2), FALSE, FALSE, 0);
ebox = gtk_event_box_new ();
gtk_container_add ((GtkContainer *)ebox, hbox);
gtk_box_pack_start ((GtkBox *)box, ebox, FALSE, FALSE, 0);
g_free (tmp);
g_free (tmp2);
}
g_free(tmp1);
pevent->tooltip = gtk_window_new (GTK_WINDOW_POPUP);
frame = gtk_frame_new (NULL);
gtk_frame_set_shadow_type ((GtkFrame *)frame, GTK_SHADOW_IN);
gtk_window_move ((GtkWindow *)pevent->tooltip, pevent->x +16, pevent->y+16);
gtk_container_add ((GtkContainer *)frame, box);
gtk_container_add ((GtkContainer *)pevent->tooltip, frame);
gtk_widget_show_all (pevent->tooltip);
gdk_keyboard_grab (pevent->tooltip->window, FALSE, GDK_CURRENT_TIME);
g_signal_connect (pevent->tooltip, "key-press-event", G_CALLBACK (tooltip_grab), pevent);
pevent->timeout = -1;
g_object_unref (newcomp);
return FALSE;
}