Uploaded image for project: 'Apache Flex'
  1. Apache Flex
  2. FLEX-34344

Many components (e.g. TextInput, DropDownList, NumericStepper) keep acting on keyDown and other events after being removed from stage

    XMLWordPrintableJSON

Details

    Description

      Steps to reproduce [DropDownList]:
      1. Import and run the project called "_DropDownListListeningTooMuch.fxp".
      2. Click on the dropdown and select an item.
      3. Right click on the dropdown, which removes it from stage.
      4. Press UP/DOWN.

      Actual behaviour: the dropdown's _proposedSelectedIndex keeps changing, showing the dropdown is still acting on keyboard events.
      Desired behaviour: once it's off stage, the dropdown should not react to keyboard - or any other - events.

      Notes:
      -the same behaviour can be made visible by placing a breakpoint in DropDownListBase.keyDownHandler after step 3.
      -the dropdown stops reacting to keyboard events when it's removed directly, as opposed to when its parent group is removed.
      -I noticed that UIComponent adds event listeners for KEY_DOWN, KEY_UP, FOCUS_IN and FOCUS_OUT, but never removes them. Is the expectation that components themselves will remove these listeners when they're off stage, or is it an omission?
      -It feels like this issue has memory management implications, though I'm not too sure.


      Steps to reproduce [NumericStepper]:
      1. Import and run the project called "_NumericStepperListListeningTooMuch.fxp".
      2. Click on the numeric stepper.
      3. Right click on the numeric stepper, which removes it from stage.
      4. Press UP/DOWN.

      Actual behaviour: the numeric stepper's value keeps changing, showing it's still acting on keyboard events.
      Desired behaviour: once it's off stage, the numeric stepper should not react to keyboard - or any other - events.


      Steps to reproduce [TextInput]:
      1. Import and run the project called "_TextInputListeningTooMuch.fxp".
      2. Type something in the text input.
      3. Right click on the text input, which removes it from stage.
      4. Continue typing.

      Actual behaviour: the the text input's contents keep changing, showing it's still acting on keyboard events.
      Desired behaviour: once it's off stage, the text input should not react to keyboard - or any other - events.

      Attachments

        1. _4_12_1_FLEX-34344.patch
          2 kB
          Constantin A.
        2. _DropDownListListeningTooMuch.fxp
          410 kB
          Mihai Chira
        3. _NumericStepperListListeningTooMuch.fxp
          410 kB
          Mihai Chira
        4. _TextInputListeningTooMuch.fxp
          410 kB
          Mihai Chira

        Activity

          People

            Unassigned Unassigned
            evolverine Mihai Chira
            Votes:
            1 Vote for this issue
            Watchers:
            4 Start watching this issue

            Dates

              Created:
              Updated: