升级到XULRunner 33后,为什么我不能将Cmd-Tab连接到Mac OS X 10.9上的应用程序窗口?

时间:2015-04-20 07:08:12

标签: macos xulrunner

我有一个独立的XULRunner应用程序,以前运行的是XULRunner 1.9.2(旧的,我知道)。我刚升级到XULRunner 33。

以前,当我在本地开发(MacBook Pro with Mac OS X 10.9.5)时,我经常在我的IDE和我的应用程序之间 Cmd + Tab 。 / p>

升级后,我无法再这样做了。我的桌面上仍然有一个窗口(如main.xul中所定义),但它不再出现在我的 Cmd + Tab 列表中。我必须在桌面上“找到”它。

关闭窗口会退出应用程序等,而且我正在获取应用程序窗口的事实意味着我的main.xul是正确的...但我不知道为什么会这样。< / p>

<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<?xml-stylesheet href="chrome://my-app-name/skin/css/main.css" type="text/css"?>
<!DOCTYPE window SYSTEM "chrome://my-app-name/locale/main.dtd">
<window id="main" title="&window-title;" width="750" height="530" persist="width,height,screenX,screenY,sizemode" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">

  <script><!-- MY APPLICATION CODE HERE --></script>

  <keyset>
    <key modifiers="accel" key="W" oncommand="window.close()"/>
    <key modifiers="accel" key="Q" id="quit"/>
  </keyset>

  <toolbox>
    <menubar>
      <menu id="menu_file" label="File" hidden="true">
        <menupopup>
          <menuitem id="menu_FileQuitItem" key="quit" label="Quit" oncommand="goQuitApplication();"/>
        </menupopup>
      </menu>
    </menubar>
  </toolbox>
</window>

我已阅读Windows and menus in XULRunner教程:

XULRunner 1.9.2上的相同代码运行正常,我可以“激活”窗口。使用新的XULRunner,窗口标题在Mac OS X中显示为灰色,无法选择。

有关尝试什么的任何想法?

我不知道它是否有用,但是当我选择窗口时,我也习惯在OS X中获得一个菜单栏。即使现在,如果我点击窗口的标题栏,OS X显示的菜单栏也不会显示我的应用程序菜单。

1 个答案:

答案 0 :(得分:2)

我不知道改变了什么,或者什么时候改变了,但这种行为在MDN上有所记录。

摘自Getting started with XULRunner

  

在Mac上,在运行完整的XULRunner应用程序之前,必须使用--install-app xulrunner命令行标志安装它。安装应用程序会创建OS X应用程序包:

该页面继续介绍了如何执行此操作的一些步骤,但我无法让它们使用现代XULRunner版本。

我能够让现代XULRunner版本完全正常工作的唯一方法是手动创建应用程序包。

在此示例中,我将使用MDN文档中引用的the "hello world" example

第1步:

创建以下目录结构。

hello.app/
    Contents/
        MacOS/
        Resources/

第2步:

Download the version of XULRunner runtime you want(我使用33),并提取XUL.framework

第3步:

XUL.framework/Versions/Current/内的所有文件复制到hello.app/Contents/MacOS/

同时将dependentlibs.list复制到hello.app/Contents/Resources/

第4步:

下载the example files,并将以下文件和目录复制到hello.app/Contents/Resources/

  • chrome/
  • defaults/
  • application.ini
  • chrome.manifest

第5步:

由于another issuexulrunner二进制文件不会自动找到它应该的application.ini。要解决这个问题,我们需要一个存根加载器,就像我之前写的那样。

#!/bin/sh

runpath="`dirname "$0"`"
contentsdir="`cd "$runpath"/.. > /dev/null && pwd`"
exec "$runpath/xulrunner" --app "$contentsdir/Resources/application.ini"

hello创建一个名为hello.app/Contents/MacOS/hello的新文件,将上面的代码放在里面,并赋予它可执行权限(chmod +x hello)。

第6步:

现在我们需要一个Info.plist文件。这是我根据Deploying XULRunner示例创建的。请注意,CFBundleExecutable必须与上面的存根加载程序文件名匹配。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>CFBundleDevelopmentRegion</key>
    <string>English</string>
    <key>CFBundleExecutable</key>
    <string>hello</string>
    <key>CFBundleGetInfoString</key>
    <string>1.0</string>
    <key>CFBundleIconFile</key>
    <string>app_icon.icns</string>
    <key>CFBundleIdentifier</key>
    <string>net.yourcompany.yourapplication</string>
    <key>CFBundleInfoDictionaryVersion</key>
    <string>6.0</string>
    <key>CFBundleName</key>
    <string>applicationName</string>
    <key>CFBundlePackageType</key>
    <string>APPL</string>
    <key>CFBundleShortVersionString</key>
    <string>1.0</string>
    <key>CFBundleSignature</key>
    <string>????</string>
    <key>CFBundleVersion</key>
    <string>1.0</string>
</dict>
</plist>

将此文件保存在hello.app/Info.plist

第7步:

PkgInfo创建一个名为hello.app/PkgInfo的新文件,并将此文本放入其中。

APPL????

第8步:

您现在应该能够使用菜单和文档图标以及 Cmd + Tab 功能运行您的应用程序。您可以通过Finder或命令行打开它。

$ ./hello.app/Contents/MacOS/hello