Jorge wrote:
On Thu, Dec 27, 2012 at 08:38:24PM +0000, corvid wrote:
Jorge wrote:
On Wed, Dec 26, 2012 at 11:29:50PM +0000, corvid wrote:
Here's what resulted, but it seems relatively inelegant: [snipped long patch]
It's much simpler. In this case you can let FLTK do the focus change among widgets:
diff -r 20a26b8bb366 src/findbar.cc --- a/src/findbar.cc Wed Dec 26 23:31:48 2012 +0100 +++ b/src/findbar.cc Thu Dec 27 15:32:02 2012 -0300 @@ -158,7 +158,6 @@ Findbar::Findbar(int width, int height) check_btn = new Fl_Check_Button(x, border, 2*button_width, height, "Case-sensitive"); x += 2 * button_width + gap; - check_btn->clear_visible_focus(); add(check_btn);
}
and that's it, forward with Tab, back with Shift+Tab.
Now, if there's a need for something more special, like letting Tab alone cycle around, adding this will do:
@@ -179,6 +178,10 @@ int Findbar::handle(int event) if (event == FL_KEYBOARD && modifier == 0 && k == FL_Escape) { /* let the UI handle it */ return 0; + } else if (event == FL_KEYBOARD && modifier == 0 && k == FL_Tab) { + MSG("Findbar::handle FL_KEYBOARD Tab\n"); + (Fl::focus() == i) ? check_btn->take_focus() : i->take_focus(); + return 1; }
return Fl_Group::handle(event);
I wanted to make the findbar as functional as one would customarily expect, though.
Please elaborate.
Let's see, I wanted to be able to focus the input, the next and previous buttons, and the case-sensitive checkbox. I wanted to be able to activate the buttons and toggle the checkbox with either Space or Enter. I wanted to be able to Tab to each of them, shift-Tab to go back, and to have the tabbing wrap around. I thought a little about bringing the close button into the loop, but then I imagined it being easy to tab to by accident and inadvertently close the bar, especially given that it already has a key combination. I'm not quite sure, though.