PDA

Просмотр полной версии : Как сделать s:TitleWindow (не)активным без PopUpManager'а?


trashcoder
12.08.2012, 23:19
Как сделать s:TitleWindow (не)активным без PopUpManager'а? (То есть, речь идет не о фокусе и не об enabled, а о состояниях, которые inactiveGroup) Менять currentState вручную или наследоваться от него видится мне слегка костыльным, когда все, что нужно там уже есть. Но, к сожалению, свойство active у TitleWindow приватное, и изменить извне его можно только через слушатель:
//TitleWindow.as

private function activateHandler(event:Event):void
{
active = true;
invalidateSkinState();
}

private function deactivateHandler(event:Event):void
{
active = false;
invalidateSkinState();
}

private function addActivateHandlers():void
{
focusManager.addEventListener(FlexEvent.FLEX_WINDOW_ACTIVATE,
activateHandler, false, 0, true);
focusManager.addEventListener(FlexEvent.FLEX_WINDOW_DEACTIVATE,
deactivateHandler, false, 0, true);
}
Но тут начинается магия. Как диспатчить эти события совершенно непонятно, ведь focusManager - один на контейнер, а в FlexEvent'е никакой информации о том, к чему именно оно относится, нет. Само собой, это не работает:
titleWindow.focusManager.dispatchEvent(new FlexEvent(FlexEvent.FLEX_WINDOW_DEACTIVATE));
Но как-то же оно работает в PopUpManager'e, хотя в исходнике PopUpManagerImpl ничего к этому относящегося не нашел. Какие тут есть варианты?