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;