XForms: Strange Focus behavior

From: Clive A Stubbings (xforms@vjet.demon.co.uk)
Date: Mon May 22 2000 - 17:07:09 EDT

  • Next message: Clive A Stubbings: "XForms: TAB navigation"

    # To subscribers of the xforms list from Clive A Stubbings <xforms@vjet.demon.co.uk> :

    This one is really strange!

    I have a form, on which there is a browser and a tabbed folder.
    In the tabbed folder there are some input objects.

    When the app starts, without pressing any mouse buttons, if I point at
    some part of the main form, except the tabbed bit, and press a key, then
    point at a "de-focussed" input object on the tabbed folder and press a
    key, the key character is input in that object and a cursor appears in
    that object.

    The input object that appeared to have focus still does and it also
    has a cursor in it...

    So we now have 2 cursors visible.. You can then go on and do the same with
    other input objects..

    It does not happen if you don't press that first key outside the tabbed
    object...

    Since you probably wont believe this, an example follows....

    How do I stop it doing this?

    Cheers
    Clive

    ==========================================
    compile with

            cc bug_main.c bug.c -L/usr/X11R6/lib -lforms -lX11 -lm

    I linked with libforms.so.0.89 on linux, 2.0.36/RedHat 5.2 on a 486

    bug_main.c
    ==========

    #include "forms.h"
    #include "bug.h"

    /* callbacks and freeobj handles for form main */

    /* callbacks and freeobj handles for form tab1 */

    int main(int argc, char *argv[])
    {
       FD_main *fd_main;
       FD_tab1 *fd_tab1;

       fl_initialize(&argc, argv, 0, 0, 0);
       fd_main = create_form_main();
       fd_tab1 = create_form_tab1();

       /* fill-in form initialization code */
            fl_addto_tabfolder(fd_main->tab,"Test", fd_tab1->tab1);
            fl_set_input(fd_tab1->in1, "1");
            fl_set_input(fd_tab1->in2, "2");
            fl_set_input(fd_tab1->in3, "3");
       /* show the first form */
       fl_show_form(fd_main->main,FL_PLACE_CENTERFREE,FL_FULLBORDER,"main");
       fl_do_forms();
       return 0;
    }

    bug.c
    =====
    /* Form definition file generated with fdesign. */

    #include "forms.h"
    #include <stdlib.h>
    #include "bug.h"

    FD_main *create_form_main(void)
    {
      FL_OBJECT *obj;
      FD_main *fdui = (FD_main *) fl_calloc(1, sizeof(*fdui));

      fdui->main = fl_bgn_form(FL_NO_BOX, 360, 280);
      obj = fl_add_box(FL_UP_BOX,0,0,360,280,"");
      fdui->tab = obj = fl_add_tabfolder(FL_TOP_TABFOLDER,20,20,190,240,"Tabbed folder");
      obj = fl_add_browser(FL_NORMAL_BROWSER,230,130,100,100,"");
      obj = fl_add_text(FL_NORMAL_TEXT,220,30,130,80,"FIRST Point here and\npress a key\nDO NOT click mouse");
        fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
      fl_end_form();

      fdui->main->fdui = fdui;

      return fdui;
    }
    /*---------------------------------------*/

    FD_tab1 *create_form_tab1(void)
    {
      FL_OBJECT *obj;
      FD_tab1 *fdui = (FD_tab1 *) fl_calloc(1, sizeof(*fdui));

      fdui->tab1 = fl_bgn_form(FL_NO_BOX, 190, 190);
      obj = fl_add_box(FL_UP_BOX,0,0,190,190,"");
      fdui->in1 = obj = fl_add_input(FL_NORMAL_INPUT,40,30,120,30,"Input");
      fdui->in2 = obj = fl_add_input(FL_NORMAL_INPUT,40,70,110,30,"Input");
      fdui->in3 = obj = fl_add_input(FL_NORMAL_INPUT,40,150,110,30,"Input");
      obj = fl_add_text(FL_NORMAL_TEXT,10,110,170,30,"THEN point into either of these\nlower input objects and press a key");
        fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
      fl_end_form();

      fdui->tab1->fdui = fdui;

      return fdui;
    }
    /*---------------------------------------*/

    bug.h
    =====

    /** Header file generated with fdesign on Mon May 22 21:34:47 2000.**/

    #ifndef FD_main_h_
    #define FD_main_h_

    /** Callbacks, globals and object handlers **/

    /**** Forms and Objects ****/
    typedef struct {
            FL_FORM *main;
            void *vdata;
            char *cdata;
            long ldata;
            FL_OBJECT *tab;
    } FD_main;

    extern FD_main * create_form_main(void);
    typedef struct {
            FL_FORM *tab1;
            void *vdata;
            char *cdata;
            long ldata;
            FL_OBJECT *in1;
            FL_OBJECT *in2;
            FL_OBJECT *in3;
    } FD_tab1;

    extern FD_tab1 * create_form_tab1(void);

    #endif /* FD_main_h_ */

    bug.fd
    ======
    Magic: 13000

    Internal Form Definition File
        (do not change)

    Number of forms: 2
    Unit of measure: FL_COORD_PIXEL

    =============== FORM ===============
    Name: main
    Width: 360
    Height: 280
    Number of Objects: 4

    --------------------
    class: FL_BOX
    type: UP_BOX
    box: 0 0 360 280
    boxtype: FL_UP_BOX
    colors: FL_COL1 FL_COL1
    alignment: FL_ALIGN_CENTER
    style: FL_NORMAL_STYLE
    size: FL_DEFAULT_SIZE
    lcol: FL_BLACK
    label:
    shortcut:
    resize: FL_RESIZE_ALL
    gravity: FL_NoGravity FL_NoGravity
    name:
    callback:
    argument:

    --------------------
    class: FL_TABFOLDER
    type: TOP_TABFOLDER
    box: 20 20 190 240
    boxtype: FL_UP_BOX
    colors: FL_COL1 FL_COL1
    alignment: FL_ALIGN_TOP_LEFT
    style: FL_NORMAL_STYLE
    size: FL_DEFAULT_SIZE
    lcol: FL_BLACK
    label: Tabbed folder
    shortcut:
    resize: FL_RESIZE_NONE
    gravity: FL_NoGravity FL_NoGravity
    name: tab
    callback:
    argument:

    --------------------
    class: FL_BROWSER
    type: NORMAL_BROWSER
    box: 230 130 100 100
    boxtype: FL_DOWN_BOX
    colors: FL_COL1 FL_YELLOW
    alignment: FL_ALIGN_BOTTOM
    style: FL_NORMAL_STYLE
    size: FL_DEFAULT_SIZE
    lcol: FL_BLACK
    label:
    shortcut:
    resize: FL_RESIZE_ALL
    gravity: FL_NoGravity FL_NoGravity
    name:
    callback:
    argument:

    --------------------
    class: FL_TEXT
    type: NORMAL_TEXT
    box: 220 30 130 80
    boxtype: FL_FLAT_BOX
    colors: FL_COL1 FL_MCOL
    alignment: FL_ALIGN_LEFT|FL_ALIGN_INSIDE
    style: FL_NORMAL_STYLE
    size: FL_DEFAULT_SIZE
    lcol: FL_BLACK
    label: FIRST Point here and\npress a key\nDO NOT click mouse
    shortcut:
    resize: FL_RESIZE_ALL
    gravity: FL_NoGravity FL_NoGravity
    name:
    callback:
    argument:

    =============== FORM ===============
    Name: tab1
    Width: 190
    Height: 190
    Number of Objects: 5

    --------------------
    class: FL_BOX
    type: UP_BOX
    box: 0 0 190 190
    boxtype: FL_UP_BOX
    colors: FL_COL1 FL_COL1
    alignment: FL_ALIGN_CENTER
    style: FL_NORMAL_STYLE
    size: FL_DEFAULT_SIZE
    lcol: FL_BLACK
    label:
    shortcut:
    resize: FL_RESIZE_ALL
    gravity: FL_NoGravity FL_NoGravity
    name:
    callback:
    argument:

    --------------------
    class: FL_INPUT
    type: NORMAL_INPUT
    box: 40 30 120 30
    boxtype: FL_DOWN_BOX
    colors: FL_COL1 FL_MCOL
    alignment: FL_ALIGN_LEFT
    style: FL_NORMAL_STYLE
    size: FL_DEFAULT_SIZE
    lcol: FL_BLACK
    label: Input
    shortcut:
    resize: FL_RESIZE_ALL
    gravity: FL_NoGravity FL_NoGravity
    name: in1
    callback:
    argument:

    --------------------
    class: FL_INPUT
    type: NORMAL_INPUT
    box: 40 70 110 30
    boxtype: FL_DOWN_BOX
    colors: FL_COL1 FL_MCOL
    alignment: FL_ALIGN_LEFT
    style: FL_NORMAL_STYLE
    size: FL_DEFAULT_SIZE
    lcol: FL_BLACK
    label: Input
    shortcut:
    resize: FL_RESIZE_ALL
    gravity: FL_NoGravity FL_NoGravity
    name: in2
    callback:
    argument:

    --------------------
    class: FL_INPUT
    type: NORMAL_INPUT
    box: 40 150 110 30
    boxtype: FL_DOWN_BOX
    colors: FL_COL1 FL_MCOL
    alignment: FL_ALIGN_LEFT
    style: FL_NORMAL_STYLE
    size: FL_DEFAULT_SIZE
    lcol: FL_BLACK
    label: Input
    shortcut:
    resize: FL_RESIZE_ALL
    gravity: FL_NoGravity FL_NoGravity
    name: in3
    callback:
    argument:

    --------------------
    class: FL_TEXT
    type: NORMAL_TEXT
    box: 10 110 170 30
    boxtype: FL_FLAT_BOX
    colors: FL_COL1 FL_MCOL
    alignment: FL_ALIGN_LEFT|FL_ALIGN_INSIDE
    style: FL_NORMAL_STYLE
    size: FL_DEFAULT_SIZE
    lcol: FL_BLACK
    label: THEN point into either of these\nlower input objects and press a key
    shortcut:
    resize: FL_RESIZE_ALL
    gravity: FL_NoGravity FL_NoGravity
    name:
    callback:
    argument:

    ==============================
    create_the_forms
    _________________________________________________
    To unsubscribe, send the message "unsubscribe" to
    xforms-request@bob.usuhs.mil or see
    http://bob.usuhs.mil/mailserv/xforms.html
    XForms Home Page: http://world.std.com/~xforms
    List Archive: http://bob.usuhs.mil/mailserv/list-archives/



    This archive was generated by hypermail 2b29 : Mon May 22 2000 - 17:49:28 EDT