static void psppire_sheet_size_allocate (GtkWidget *widget,
GtkAllocation *allocation);
+static gboolean psppire_sheet_focus_in (GtkWidget *widget,
+ GdkEventFocus *event);
+
/* Sheet queries */
static gboolean psppire_sheet_range_isvisible (const PsppireSheet *sheet,
container_class->add = NULL;
container_class->remove = NULL;
container_class->forall = psppire_sheet_forall;
+ container_class->set_focus_child = NULL;
object_class->dispose = psppire_sheet_dispose;
object_class->finalize = psppire_sheet_finalize;
widget_class->expose_event = psppire_sheet_expose;
widget_class->size_request = psppire_sheet_size_request;
widget_class->size_allocate = psppire_sheet_size_allocate;
- widget_class->focus_in_event = NULL;
+ widget_class->focus_in_event = psppire_sheet_focus_in;
widget_class->focus_out_event = NULL;
klass->set_scroll_adjustments = psppire_sheet_set_scroll_adjustments;
return TRUE;
}
+
+static gboolean
+psppire_sheet_focus_in (GtkWidget *w,
+ GdkEventFocus *event)
+{
+ PsppireSheet *sheet = PSPPIRE_SHEET (w);
+
+ gtk_widget_grab_focus (sheet->entry_widget);
+
+ return TRUE;
+}
+
+
static void
psppire_sheet_extend_selection (PsppireSheet *sheet, gint row, gint column)
{
case GTK_SCROLL_STEP_LEFT:
new_cell.col--;
break;
+ case GTK_SCROLL_STEP_FORWARD:
+ new_cell.col++;
+ if (new_cell.col >=
+ psppire_sheet_model_get_column_count (sheet->model))
+ {
+ new_cell.col = 0;
+ new_cell.row++;
+ }
+ break;
+ case GTK_SCROLL_STEP_BACKWARD:
+ new_cell.col--;
+ if (new_cell.col < 0)
+ {
+ new_cell.col =
+ psppire_sheet_model_get_column_count (sheet->model) - 1;
+ new_cell.row--;
+ }
+ break;
default:
g_assert_not_reached ();
break;
}
-
g_signal_emit (sheet, sheet_signals[TRAVERSE], 0,
&sheet->active_cell,
&new_cell,
switch (key->keyval)
{
case GDK_Tab:
+ step_sheet (sheet, GTK_SCROLL_STEP_FORWARD);
+ break;
case GDK_Right:
step_sheet (sheet, GTK_SCROLL_STEP_RIGHT);
break;
case GDK_ISO_Left_Tab:
+ step_sheet (sheet, GTK_SCROLL_STEP_BACKWARD);
+ break;
case GDK_Left:
step_sheet (sheet, GTK_SCROLL_STEP_LEFT);
break;
gtk_widget_modify_style (sheet->entry_widget, style);
}
-
-
static void
create_sheet_entry (PsppireSheet *sheet)
{