/** * ea_calendar_helpers_get_cal_view_event_from * @canvas_item: the cavas_item (e_text) for the event * * Get the ECalendarViewEvent for the canvas_item. * * Returns: the ECalendarViewEvent **/ ECalendarViewEvent * ea_calendar_helpers_get_cal_view_event_from (GnomeCanvasItem *canvas_item) { ECalendarView *cal_view; gboolean event_found; ECalendarViewEvent *cal_view_event; g_return_val_if_fail (E_IS_TEXT (canvas_item), NULL); cal_view = ea_calendar_helpers_get_cal_view_from (canvas_item); if (!cal_view) return NULL; if (E_IS_DAY_VIEW (cal_view)) { gint event_day, event_num; EDayViewEvent *day_view_event; EDayView *day_view = E_DAY_VIEW (cal_view); event_found = e_day_view_find_event_from_item ( day_view, canvas_item, &event_day, &event_num); if (!event_found) return NULL; if (event_day == E_DAY_VIEW_LONG_EVENT) { /* a long event */ day_view_event = &g_array_index (day_view->long_events, EDayViewEvent, event_num); } else { /* a main canvas event */ day_view_event = &g_array_index (day_view->events[event_day], EDayViewEvent, event_num); } cal_view_event = (ECalendarViewEvent *) day_view_event; } else if (E_IS_WEEK_VIEW (cal_view)) { gint event_num, span_num; EWeekViewEvent *week_view_event; EWeekView *week_view = E_WEEK_VIEW (cal_view); event_found = e_week_view_find_event_from_item ( week_view, canvas_item, &event_num, &span_num); if (!event_found) return NULL; week_view_event = &g_array_index ( week_view->events, EWeekViewEvent, event_num); cal_view_event = (ECalendarViewEvent *) week_view_event; } else { g_return_val_if_reached (NULL); } return cal_view_event; }
static void ea_day_view_main_item_time_change_cb (EDayView *day_view, gpointer data) { EaDayViewMainItem *ea_main_item; AtkObject *item_cell = NULL; g_return_if_fail (E_IS_DAY_VIEW (day_view)); g_return_if_fail (data); g_return_if_fail (EA_IS_DAY_VIEW_MAIN_ITEM (data)); ea_main_item = EA_DAY_VIEW_MAIN_ITEM (data); #ifdef ACC_DEBUG printf ("EvoAcc: ea_day_view_main_item time changed cb\n"); #endif /* only deal with the first selected child, for now */ item_cell = atk_selection_ref_selection ( ATK_SELECTION (ea_main_item), 0); if (item_cell) { AtkStateSet *state_set; state_set = atk_object_ref_state_set (item_cell); atk_state_set_add_state (state_set, ATK_STATE_FOCUSED); g_object_unref (state_set); g_signal_emit_by_name ( ea_main_item, "active-descendant-changed", item_cell); g_signal_emit_by_name (data, "selection_changed"); atk_focus_tracker_notify (item_cell); g_object_unref (item_cell); } }
static gboolean ea_calendar_focus_watcher (GSignalInvocationHint *ihint, guint n_param_values, const GValue *param_values, gpointer data) { GObject *object; GdkEvent *event; AtkObject *ea_event = NULL; object = g_value_get_object (param_values + 0); event = g_value_get_boxed (param_values + 1); if ((E_IS_TEXT (object)) || (GNOME_IS_CANVAS_PIXBUF (object))) { /* "event" signal on canvas item */ GnomeCanvasItem *canvas_item; canvas_item = GNOME_CANVAS_ITEM (object); if (event->type == GDK_FOCUS_CHANGE) { if (event->focus_change.in) { ea_event = ea_calendar_helpers_get_accessible_for (canvas_item); if (!ea_event) /* not canvas item we want */ return TRUE; } atk_focus_tracker_notify (ea_event); } } else if (E_IS_DAY_VIEW (object)) { EDayView *day_view = E_DAY_VIEW (object); if (event->type == GDK_FOCUS_CHANGE) { if (event->focus_change.in) { /* give main item chance to emit focus */ gnome_canvas_item_grab_focus (day_view->main_canvas_item); } } } else if (E_IS_DAY_VIEW_MAIN_ITEM (object)) { if (event->type == GDK_FOCUS_CHANGE) { if (event->focus_change.in) { /* we should emit focus on main item */ ea_event = atk_gobject_accessible_for_object (object); } else /* focus out */ ea_event = NULL; #ifdef ACC_DEBUG printf ("EvoAcc: focus notify on day main item %p\n", (void *)object); #endif atk_focus_tracker_notify (ea_event); } } else if (E_IS_WEEK_VIEW (object)) { EWeekView *week_view = E_WEEK_VIEW (object); if (event->type == GDK_FOCUS_CHANGE) { if (event->focus_change.in) { /* give main item chance to emit focus */ gnome_canvas_item_grab_focus (week_view->main_canvas_item); } } } else if (E_IS_WEEK_VIEW_MAIN_ITEM (object)) { if (event->type == GDK_FOCUS_CHANGE) { if (event->focus_change.in) { /* we should emit focus on main item */ ea_event = atk_gobject_accessible_for_object (object); } else /* focus out */ ea_event = NULL; #ifdef ACC_DEBUG printf ("EvoAcc: focus notify on week main item %p\n", (void *)object); #endif atk_focus_tracker_notify (ea_event); } } return TRUE; }