Alvin wrote:
> Is there a method via the API that I can use to will prevent a Fl_Input
> widget (Value_Input, etc.) from losing focus?
> 
> I have a dialog box that contains a Fl_Input. The dialog box appears when a
> button is pushed on the main window.
> 
> I would like the text in the Fl_Input to be selected which I do using
> position(0, size()) method.

        If you call textbox->take_focus() above or below that,
        it should do that.

> However, when the Fl_Input loses focus, say I click on a blank part of the
> dialog box, the selection highlight disappears. I would like to prevent
> this.

        The question is what is it loosing focus too?
        Fl_Window and Fl_Double_Window don't, AFAIK, take 'focus',
        since they're not focus-oriented themselves.

        Focus should only move to other widgets if they accept focus.
        I would think ifother widgets did not accept focus (by returning 0
        to FL_FOCUS events) there wouldn't be a change in focus.

        I'm thinking there must be some other widget in your dialog,
        visible or not, that is accepting focus besides the Fl_Input.

        Perhaps you have button widgets in addition to the Fl_Input
        which are taking focus. Buttons are responsive to keyboard
        events (eg. using TAB and Shift-TAB or arrow keys to move
        focus around)

        If you make those buttons not take focus, then I suppose
        Fl_Input would retain focus.. but it would disable people
        from being able to use keyboard nav for your dialog.
        For instance if your own button derived widget returned 0
        to FL_FOCUS and FL_UNFOCUS events. There are probably other
        ways.

        The following code, for instance, should not loose focus
        to Fl_Input because there's no other focus-oriented widget
        that would accept it:

#include <FL/Fl.H>
#include <FL/Fl_Double_Window.H>
#include <FL/Fl_Input.H>
int main(int argc, char** argv) {
    Fl_Double_Window win(400,300,"Test");
    Fl_Input in(100,10,200,25,"Text");
    in.value("One two three");
    in.position(0, in.size());
    win.show();
    return(Fl::run());
}

        This should show Fl_Double_Window is not taking focus.
_______________________________________________
fltk mailing list
[email protected]
http://lists.easysw.com/mailman/listinfo/fltk

Reply via email to