[flexcoders] IFocusManagerComponent and removePopUp

2007-01-18 Thread Roman Protsiuk
Hi, everyone.

As I understand in order to properly handle focusOut event for my
component it should implement IFocusManagerComponent. The component I
develop is a pop-up window. Then strange and very unpleasant bug
appear. After I set focus to one of my components child and after I
click a button on it to close it browser crashes (firefox, ie).
I don't know what to say more. Here's example. Simply clicking close
me crashes browser. Totally confused.

PopUpWindow.mxml:

?xml version=1.0 encoding=utf-8?
mx:TitleWindow xmlns:mx=http://www.adobe.com/2006/mxml;
layout=absolute
width=400
height=300
implements=mx.managers.IFocusManagerComponent
defaultButton={mainButton}

mx:Button id=mainButton
horizontalCenter=0
verticalCenter=0
label=close me
click=onMainButtonClick() /

mx:Button label=fake /

mx:Script
![CDATA[
import mx.core.UIComponent;
import mx.managers.PopUpManager;

public function showPopUp(parent : UIComponent) : void {
PopUpManager.addPopUp(this, parent);
PopUpManager.centerPopUp(this);
setFocus();
}

public function hidePopUp() : void {
PopUpManager.removePopUp(this);
}

public override function setFocus() : void {
super.setFocus();
mainButton.setFocus();
}

protected override function focusOutHandler(event : 
FocusEvent) : void {
if (event.relatedObject == null || 
!contains(event.relatedObject)) {
hidePopUp();
}
super.focusOutHandler(event);
}

private function onMainButtonClick() : void {
hidePopUp();
dispatchEvent(new Event(Event.CLOSE));
}
]]
/mx:Script

/mx:TitleWindow


popUpSample.mxml:

?xml version=1.0 encoding=utf-8?
mx:Application xmlns:mx=http://www.adobe.com/2006/mxml;
layout=absolute
creationComplete=onCreationComplete()

mx:Button id=clickButton
horizontalCenter=0
verticalCenter=0
label=click me
click=onButtonClick() /

mx:Button label=fake /

mx:Script
![CDATA[
public override function setFocus() : void {
super.setFocus();
clickButton.setFocus();
}

private function onCreationComplete() : void {
_popUp = new PopUpWindow();
_popUp.addEventListener(Event.CLOSE, 
onPopUpClose);
}

private function onButtonClick() : void {
_popUp.showPopUp(this);
}

private function onPopUpClose(event : Event) : void {
//clickButton.setFocus();
}

private var _popUp : PopUpWindow;
]]
/mx:Script

/mx:Application

The only thought i have: it's because focus is lost (it stays in
pop-up) when pop-up is removed and the lost focus is unacceptable for
flash player. So I added clickButton.setFocus() on close. But if i do
it before removePopUp then PopUpWindws focusOutHandler removes it. Why
do i need to call it manually anyway? :/ And if i do it after calling
removePopUp then situation remains the same, browser crashes, not
surprisingly.

Any help highly appreciated.
R.


Re: [flexcoders] IFocusManagerComponent and removePopUp

2007-01-18 Thread Roman Protsiuk
Yeah, and this bug appeared just recently. Is it related with Flash
Player 9.0.28 changes or with FlexBuilder 2.0.1 hard to tell.
Everything worked as it is without crashes before.

R.

On 1/18/07, Roman Protsiuk [EMAIL PROTECTED] wrote:
 Hi, everyone.

 As I understand in order to properly handle focusOut event for my
 component it should implement IFocusManagerComponent. The component I
 develop is a pop-up window. Then strange and very unpleasant bug
 appear. After I set focus to one of my components child and after I
 click a button on it to close it browser crashes (firefox, ie).
 I don't know what to say more. Here's example. Simply clicking close
 me crashes browser. Totally confused.

 PopUpWindow.mxml:

 ?xml version=1.0 encoding=utf-8?
 mx:TitleWindow xmlns:mx=http://www.adobe.com/2006/mxml;
 layout=absolute
 width=400
 height=300
 implements=mx.managers.IFocusManagerComponent
 defaultButton={mainButton}

 mx:Button id=mainButton
 horizontalCenter=0
 verticalCenter=0
 label=close me
 click=onMainButtonClick() /

 mx:Button label=fake /

 mx:Script
 ![CDATA[
 import mx.core.UIComponent;
 import mx.managers.PopUpManager;

 public function showPopUp(parent : UIComponent) : 
 void {
 PopUpManager.addPopUp(this, parent);
 PopUpManager.centerPopUp(this);
 setFocus();
 }

 public function hidePopUp() : void {
 PopUpManager.removePopUp(this);
 }

 public override function setFocus() : void {
 super.setFocus();
 mainButton.setFocus();
 }

 protected override function focusOutHandler(event : 
 FocusEvent) : void {
 if (event.relatedObject == null || 
 !contains(event.relatedObject)) {
 hidePopUp();
 }
 super.focusOutHandler(event);
 }

 private function onMainButtonClick() : void {
 hidePopUp();
 dispatchEvent(new Event(Event.CLOSE));
 }
 ]]
 /mx:Script

 /mx:TitleWindow


 popUpSample.mxml:

 ?xml version=1.0 encoding=utf-8?
 mx:Application xmlns:mx=http://www.adobe.com/2006/mxml;
 layout=absolute
 creationComplete=onCreationComplete()

 mx:Button id=clickButton
 horizontalCenter=0
 verticalCenter=0
 label=click me
 click=onButtonClick() /

 mx:Button label=fake /

 mx:Script
 ![CDATA[
 public override function setFocus() : void {
 super.setFocus();
 clickButton.setFocus();
 }

 private function onCreationComplete() : void {
 _popUp = new PopUpWindow();
 _popUp.addEventListener(Event.CLOSE, 
 onPopUpClose);
 }

 private function onButtonClick() : void {
 _popUp.showPopUp(this);
 }

 private function onPopUpClose(event : Event) : void {
 //clickButton.setFocus();
 }

 private var _popUp : PopUpWindow;
 ]]
 /mx:Script

 /mx:Application

 The only thought i have: it's because focus is lost (it stays in
 pop-up) when pop-up is removed and the lost focus is unacceptable for
 flash player. So I added clickButton.setFocus() on close. But if i do
 it before removePopUp then PopUpWindws focusOutHandler removes it. Why
 do i need to call it manually anyway? :/ And if i do it after calling
 removePopUp then situation remains the same, browser crashes, not
 surprisingly.

 Any help highly appreciated.
 R.