Почему я не могу использовать Cmd-Tab в окне моего приложения в Mac OS X 10.9 после обновления до XULRunner 33?

У меня есть автономное приложение XULRunner, которое ранее запускало XULRunner 1.9.2 (старое, я знаю). Я только что обновился до XULRunner 33.

Раньше, когда я разрабатывал локально (MacBook Pro с Mac OS X 10.9.5), я часто использовал Cmd + Tab между моей IDE и моим приложением.

После обновления больше не могу этого делать. Я все еще вижу окно на моем рабочем столе (как определено в main.xul), но оно больше не отображается в моем списке Cmd + Tab. Я должен «найти» его на рабочем столе.

Закрытие окна приводит к выходу из приложения и т. Д., И тот факт, что я вообще получаю окно приложения, означает, что мой main.xul правильный ... но я не знаю, почему это так.

<?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 и меню в XULRunner руководство:

Тот же код в XULRunner 1.9.2 работает нормально, и я могу «активировать» окно. В новом XULRunner заголовок окна отображается серым цветом в Mac OS X и не может быть выбран.

Есть идеи, что попробовать?

Я не знаю, полезно ли это, но я также использовал панель меню в OS X, когда окно было выбрано. Даже сейчас, если я нажимаю на строку заголовка окна, строка меню, отображаемая OS X, не отображает меню моего приложения.


person makdad    schedule 20.04.2015    source источник
comment
Как вы запускаете свое XUL-приложение?   -  person Alexander O'Mara    schedule 25.04.2015
comment
Алекс, из командной строки: /Library/Frameworks/XUL.framework/Versions/Current/xulrunner /path/to/application.ini -no-remote -profile (profile path)   -  person makdad    schedule 26.04.2015


Ответы (1)


Я не знаю, что было изменено или когда они изменили это, но это поведение частично задокументировано в MDN.

Выдержка из Начало работы с XULRunner:

На Mac, прежде чем вы сможете запустить приложение XULRunner со всем неповрежденным, вы должны установить его с помощью флага командной строки --install-app xulrunner. При установке приложения создается пакет приложений OS X:

На странице описаны некоторые шаги, как это сделать, но мне так и не удалось заставить их работать с современными версиями XULRunner.

Единственный способ заставить современные версии XULRunner полноценно работать - это создать пакет приложений вручную.

В этом примере я собираюсь использовать упомянутый пример hello world в документах MDN.

Шаг 1:

Создайте следующую структуру каталогов.

hello.app/
    Contents/
        MacOS/
        Resources/

Шаг 2:

Загрузите нужную вам версию среды выполнения XULRunner (я использую 33) и извлеките XUL.framework.

Шаг 3:

Скопируйте все файлы из XUL.framework/Versions/Current/ в hello.app/Contents/MacOS/.

Также скопируйте dependentlibs.list в hello.app/Contents/Resources/

Шаг 4:

Загрузите примеры файлов и скопируйте следующие файлы и каталоги в hello.app/Contents/Resources/ .

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

Шаг 5:

Из-за другой проблемы, xulrunner двоичный файл не найдет 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 файл. Вот тот, который я создал на основе Развертывания 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
person Alexander O'Mara    schedule 26.04.2015
comment
На самом деле я еще не получил его, но ясно, что проблема заключается в том, что мое приложение не упаковано для OS X должным образом. Когда я займусь этим, я обязательно обновлю здесь, что это сработало :) - person makdad; 02.05.2015