Posts Tagged ‘native menu’

關於Native Menu(Mac) 2

Thursday, May 14th, 2009

上次提到的Mac Native Menu 監聽不到自訂menu item之問題有解答了。
問題關鍵在我的 ApplicationUpdaterUI :ApplicationUpdaterUI 在初始化完成後,會摧毀自訂item的事件發送,所以無法選擇,但是系統預設item依舊運作良好。換句話說,在 ApplicationUpdater 發出 UpdateEvent.INITIALIZED 之前,建立的native menu都會失效(看得到選不到)。 因此必須針對 ApplicationUpdaterUI 監聽事件,之後才加上自訂的menu item,如此才能圓滿達成自定menu item與native menu item 共存的成果。

以下例子: 簡單地在 Mac 的第一個menu item下加入一個”myItem”

var ui:ApplicationUpdaterUI = new ApplicationUpdater();
ui.addEventListener( UpdaterEvent.INITIALIZED , uiInited );
ui.initalize();

function uiInited( e:UpdaterEvent ):void
{
//取得 native menu, 唯有mac os才會有預設的native menu;
//windows下自己建立一個NativeMenu 實體即可
var m:NativeMenu  = NativeApplication.nativeApplication.menu;
//items[0] = 第1個menu
m.items[0].addItem( new NativeMenuItem("myItem") ).addEventListener( Event.SELECT , onSelect );

}

function onSelect( e:Event ):void
{
trace("hello there");
}

關於AIR Native Menu(for Mac)

Tuesday, May 5th, 2009

用Adobe Air 製作 Mac用的native menu時,發生了一個狀況: 在預設的submenu下加上自己的NativeMenuItem,監聽menu的Event.SELECT事件無法成功,很奇怪,但是只要整個menuItem是自己建立的instance就不會出現該問題。換言之,必須手動抽掉 File, Logo 類型的menu item,然後重建。挺麻煩的。
還有一個地方,監聽Event.SELECT的事件處理程式必須加上 Event#stopImmediatePropagation() ,否則會出現重複聽到事件的狀況。
要小心呢!