diff options
Diffstat (limited to 'a11y/calendar/ea-day-view-cell.c')
-rw-r--r-- | a11y/calendar/ea-day-view-cell.c | 41 |
1 files changed, 40 insertions, 1 deletions
diff --git a/a11y/calendar/ea-day-view-cell.c b/a11y/calendar/ea-day-view-cell.c index 6fe6cf7077..5b1f81ae1a 100644 --- a/a11y/calendar/ea-day-view-cell.c +++ b/a11y/calendar/ea-day-view-cell.c @@ -103,6 +103,8 @@ static void component_interface_get_extents (AtkComponent *component, gint *x, gint *y, gint *width, gint *height, AtkCoordType coord_type); +static gboolean component_interface_grab_focus (AtkComponent *component); + static gpointer parent_class = NULL; #ifdef ACC_DEBUG @@ -175,7 +177,7 @@ ea_day_view_cell_new (GObject *obj) object = g_object_new (EA_TYPE_DAY_VIEW_CELL, NULL); atk_object = ATK_OBJECT (object); atk_object_initialize (atk_object, obj); - atk_object->role = ATK_ROLE_TABLE_CELL; + atk_object->role = ATK_ROLE_UNKNOWN; #ifdef ACC_DEBUG ++n_ea_day_view_cell_created; @@ -314,6 +316,7 @@ atk_component_interface_init (AtkComponentIface *iface) g_return_if_fail (iface != NULL); iface->get_extents = component_interface_get_extents; + iface->grab_focus = component_interface_grab_focus; } static void @@ -355,3 +358,39 @@ component_interface_get_extents (AtkComponent *component, *width = day_view->day_widths[cell->column]; *height = day_view->row_height; } + +static gboolean +component_interface_grab_focus (AtkComponent *comp) +{ + GObject *g_obj; + EDayViewCell *cell; + EDayView *day_view; + GtkWidget *toplevel; + + g_return_val_if_fail (EA_IS_DAY_VIEW_CELL (comp), FALSE); + + g_obj = atk_gobject_accessible_get_object (ATK_GOBJECT_ACCESSIBLE (comp)); + if (!g_obj) + return FALSE; + + cell = E_DAY_VIEW_CELL (g_obj); + day_view = cell->day_view; + + day_view->selection_start_day = cell->column; + day_view->selection_end_day = cell->column; + day_view->selection_start_row = cell->row; + day_view->selection_end_row = cell->row; + + e_day_view_ensure_rows_visible (day_view, + day_view->selection_start_row, + day_view->selection_end_row); + e_day_view_update_calendar_selection_time (day_view); + gtk_widget_queue_draw (day_view->main_canvas); + + toplevel = gtk_widget_get_toplevel (GTK_WIDGET (day_view)); + if (GTK_WIDGET_TOPLEVEL (toplevel)) + gtk_window_present (GTK_WINDOW (toplevel)); + + return TRUE; +} + |