Ext.air.SystemTray = function(){ var app = air.NativeApplication.nativeApplication; var icon, isWindows = false, bitmaps; // windows if(air.NativeApplication.supportsSystemTrayIcon) { icon = app.icon; isWindows = true; } // mac if(air.NativeApplication.supportsDockIcon) { icon = app.icon; } return { setIcon : function(icon, tooltip, initWithIcon){ if(!icon){ // not supported OS return; } var loader = new air.Loader(); loader.contentLoaderInfo.addEventListener(air.Event.COMPLETE, function(e){ bitmaps = new runtime.Array(e.target.content.bitmapData); if (initWithIcon) { icon.bitmaps = bitmaps; } }); loader.load(new air.URLRequest(icon)); if(tooltip && air.NativeApplication.supportsSystemTrayIcon) { app.icon.tooltip = tooltip; } }, bounce : function(priority){ icon.bounce(priority); }, on : function(eventName, fn, scope){ icon.addEventListener(eventName, function(){ fn.apply(scope || this, arguments); }); }, hideIcon : function(){ if(!icon){ // not supported OS return; } icon.bitmaps = []; }, showIcon : function(){ if(!icon){ // not supported OS return; } icon.bitmaps = bitmaps; }, setMenu: function(actions, _parentMenu){ if(!icon){ // not supported OS return; } var menu = new air.NativeMenu(); for (var i = 0, len = actions.length; i < len; i++) { var a = actions[i]; if(a == '-'){ menu.addItem(new air.NativeMenuItem("", true)); }else{ var item = menu.addItem(Ext.air.MenuItem(a)); if(a.menu || (a.initialConfig && a.initialConfig.menu)){ item.submenu = Ext.air.SystemTray.setMenu(a.menu || a.initialConfig.menu, menu); } } if(!_parentMenu){ icon.menu = menu; } } return menu; } }; }();