I trie adding these methods:
```
int Sudoku::handle(int event) {
if (event == FL_KEYBOARD) {
int j, k;
if (Fl::event_key(FL_Home)) {
find_focus_cell(&j, &k);
printf("home %d %d\n", j, k);
return 1;
}
else if (Fl::event_key(FL_End)) {
find_focus_cell(&j, &k);
printf("end %d %d\n", j, k);
return 1;
}
else if (Fl::event_key(FL_Page_Down)) {
find_focus_cell(&j, &k);
printf("pg down %d %d\n", j, k);
return 1;
}
else if (Fl::event_key(FL_Page_Up)) {
find_focus_cell(&j, &k);
printf("pg up %d %d\n", j, k);
return 1;
}
}
return Fl_Widget::handle(event);
}
void Sudoku::find_focus_cell(int *x, int *y) {
*x = *y = -1;
auto focus_widget = Fl::focus();
if (focus_widget != nullptr) {
int j, k;
for (j = 0; j < 9; ++j) {
for (k = 0; k < 9; ++k) {
if (grid_cells_[j][k] == focus_widget) {
*x = j;
*y = k;
return;
}
}
}
}
}
```
The result is that the _only_ keyboard events that are recognized are Home, End, PageUp, PageDown: none of the normal arrow key and numbers etc., nor the menus work anymore!
Also my `find_focus_cell()` function never works; it always leaves the values at `-1`. This turns out not to be a surprise because FL_SHORTCUT only happens if Fl::focus() returns nullptr. However, to avoid this I use FL_KEYBOARD. But it still doesn't work.
So clearly I have a long way to go understanding how FLTK event-handling works!