You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by ca...@apache.org on 2020/04/27 17:50:42 UTC
[royale-asjs] branch develop updated: searchfilter: fix listener
removal when closing popup, also refactor and clean code
This is an automated email from the ASF dual-hosted git repository.
carlosrovira pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/royale-asjs.git
The following commit(s) were added to refs/heads/develop by this push:
new 5a9291c searchfilter: fix listener removal when closing popup, also refactor and clean code
5a9291c is described below
commit 5a9291c74c530a8c4c6525fd296439a5fd178213
Author: Carlos Rovira <ca...@apache.org>
AuthorDate: Mon Apr 27 19:50:37 2020 +0200
searchfilter: fix listener removal when closing popup, also refactor and clean code
---
.../jewel/beads/controllers/ComboBoxController.as | 10 ++-----
.../jewel/beads/controls/combobox/SearchFilter.as | 35 ++++++++++------------
.../controls/textinput/SearchFilterForList.as | 6 +++-
3 files changed, 24 insertions(+), 27 deletions(-)
diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controllers/ComboBoxController.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controllers/ComboBoxController.as
index f16b77a..375de76 100644
--- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controllers/ComboBoxController.as
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controllers/ComboBoxController.as
@@ -214,15 +214,10 @@ package org.apache.royale.jewel.beads.controllers
//the popup as the possible reason for loss of focus
//(event.relatedObject seems null, so cannot check here)
//this should be less than 300
- setTimeout(hidePopup, 280);
+ setTimeout(dismissPopUp, 280);
}
}
-
- protected function hidePopup():void{
- if(!keyPressed)
- viewBead.popUpVisible = false;
- keyPressed = false;
- }
+
/**
* @royaleignorecoercion org.apache.royale.core.UIBase
* @royaleignorecoercion org.apache.royale.events.IEventDispatcher
@@ -265,6 +260,7 @@ package org.apache.royale.jewel.beads.controllers
{
if(!keyPressed)
{
+ IEventDispatcher(_strand).dispatchEvent(new Event('dismissPopUp'));
popup.removeEventListener(MouseEvent.MOUSE_DOWN, removePopUpWhenClickOutside);
list.removeEventListener(MouseEvent.MOUSE_DOWN, handleControlMouseDown);
list.removeEventListener(Event.CHANGE, changeHandler);
diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/combobox/SearchFilter.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/combobox/SearchFilter.as
index e41c798..ba1a2c0 100644
--- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/combobox/SearchFilter.as
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/combobox/SearchFilter.as
@@ -19,6 +19,7 @@
package org.apache.royale.jewel.beads.controls.combobox
{
import org.apache.royale.events.Event;
+ import org.apache.royale.events.IEventDispatcher;
import org.apache.royale.jewel.beads.controls.combobox.IComboBoxView;
import org.apache.royale.jewel.beads.controls.textinput.SearchFilterForList;
import org.apache.royale.jewel.beads.views.ComboBoxView;
@@ -47,6 +48,8 @@ package org.apache.royale.jewel.beads.controls.combobox
{
}
+ private var comboView:IComboBoxView;
+
override protected function textInputKeyUpLogic(input:Object):void
{
// first remove a previous selection
@@ -57,22 +60,24 @@ package org.apache.royale.jewel.beads.controls.combobox
input.text = tmp;
}
- var popUpVisible:Boolean = input.parent.view.popUpVisible;
- if (!popUpVisible) {
- input.parent.view.popUpVisible = true;
- }
+ if (!comboView.popUpVisible)
+ comboView.popUpVisible = true;
// fill "list" with the internal list in the combobox popup
- list = input.parent.view.popup.view.list;
+ list = comboView.popup.view.list;
- applyFilter(input.parent.view.textinput.text.toUpperCase());
+ applyFilter(comboView.textinput.text.toUpperCase());
ComboBoxView(_strand['view']).autoResizeHandler(); //as we filter the popup list will be smaller, and we want to reposition
}
override protected function onBeadsAdded(event:Event):void{
- if ('view' in _strand && _strand['view'] is IComboBoxView) {
- var _textInput:TextInputBase = IComboBoxView(_strand['view']).textinput as TextInputBase;
+ IEventDispatcher(_strand).addEventListener('dismissPopUp', removeKeyDownEventListener);
+
+ comboView = event.target.view as IComboBoxView;
+ if (comboView)
+ {
+ var _textInput:TextInputBase = comboView.textinput as TextInputBase;
if (_textInput) {
COMPILE::JS {
_textInput.element.addEventListener('focus', onInputFocus);
@@ -82,19 +87,11 @@ package org.apache.royale.jewel.beads.controls.combobox
}
override protected function onInputFocus(event:Event):void{
- var popUpVisible:Boolean = IComboBoxView(_strand['view']).popUpVisible;
- if (!popUpVisible) {
- //force popup ?:
- IComboBoxView(_strand['view']).popUpVisible = true;
-
- //or avoid ?:
- //return;
- }
+ if (!comboView.popUpVisible)
+ comboView.popUpVisible = true;
// fill "list" with the internal list in the combobox popup
- list = event.target.royale_wrapper.parent.view.popup.view.list;
-
- //applyFilter(IComboBoxView(_strand['view']).textinput.text.toUpperCase());
+ list = comboView.popup.view.list;
}
}
}
diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/textinput/SearchFilterForList.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/textinput/SearchFilterForList.as
index d110e4e..bbea325 100644
--- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/textinput/SearchFilterForList.as
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/textinput/SearchFilterForList.as
@@ -72,11 +72,15 @@ package org.apache.royale.jewel.beads.controls.textinput
return _list;
}
+ protected function removeKeyDownEventListener():void {
+ list.removeEventListener(KeyboardEvent.KEY_DOWN, keyDownEventHandler, true);
+ }
+
public function set list(value:List):void
{
if(_list)
{
- list.removeEventListener(KeyboardEvent.KEY_DOWN, keyDownEventHandler, true);
+ removeKeyDownEventListener();
}
_list = value;