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; }