Full-Screen Apps

В первый же день после официального выхода релиза Mac OS X Lion у многих, кто вкусил удобство полноэкранных приложений, возникло желание сделать свои любимые программы с такой поддержкой. И что интересно, в этот же день в сети появилась инструкция, которая как вирус распространилась по всему Интернет. Для этого предлагалось установить SIMBL — набор библиотек, который «на лету» может интегрировать при помощи сторонних плагинов дополнительный функционал в приложения без правки исходного кода, и дополнительный плагин к нему Maximizer. Способ предельно простой, но, как по мне, не рациональный. Лично мне не нужна поддержка полноэкранного режима для абсолютно всех приложений. К тому же встречал много отзывов о том, что некоторые приложения неадекватно ведут себя с ним. Несколько дней назад попал на интересную статью Эрики Садун, которая поведала о не совсем простом, но отличном способе добавления полноэкранного режима для любимой программы используя API самой операционной системы Mac OS X Lion. Я покажу как всё это делается на примере текстового редактора Fraise.

Чтоб не «убить» программу делаем её резервную копию, например на Рабочий стол.  Заходим в ресурсы приложения (правый клик по приложению > Показать содержимое пакета > ContentsResources) и смотрим что и как расположено, имеется ли многоязычная локализация. Для осуществления желаемого нам необходимо найти все ресурсы, в которых упомянается параметр NSWindowBacking — этот параметр указывает на то, что ресурс отвечает за отображение какого то окна программы. «Ручками» это делать будет очень долго, поэтому запускаем Терминал и переходим в ресурсы нашего приложения: 

cd ~/Desktop/Fraise.app/Contents/Resources/

Естественно, вместо Fraise.app должно быть название вашего приложения. При помощи команды отсортируем все файлы ресурсов: 

grep -iRl NSWindowBacking *

В ответ получим список всех файлов, в которых имеется искомый параметр, то есть список ресурсов, которые отвечают за «прорисовку» окон.

Список ресурсов, которые отвечают за прорисовку оконЕстественно, из всех перечисленных ресурсов нам необходим только один, который отвечает за главное окно программы. К сожалению универсального метода поиска нужного файла ресурсов я подсказать не могу, так что придётся вручную перебирать все. В Fraise файл ресурсов, отвечающий за главное рабочее окно программы, называется FRAProject.nib, а вобще чаще всего ресурсы главных окон имеют название MainWindow.nib. Стоит заметить, что в многоязычных программах, придётся править файл ресурсов от каждой конкретной локализации. В последнее время во всех программах используются компилированные .NIB-ресурсы, я об этом уже публиковал заметку в прошлом. И нам необходимо сделать из бинарного файла структурированный XML. В данном случае это нужно не для того, чтоб править внешний вид, а для того, чтоб добавить дополнительный параметр, который в свою очередь добавит кнопку полноэкранного режима в заголовок окна нашего приложения. Для этого берём предполагаемый файл и натравливаем на него команду: 

plutil -convert xml1 FRAProject.nib

Снова же, вместо FRAProject.nib должно быть название ресурса из вашего приложения.

Хочу обратить внимание на то, что консольной утилиты plutil может не быть по-умолчанию в ОС, поэтому, возможно, придётся установить пакет для разработчика Xcode в комплекте которого она присутствует.

После удачного преобразования переходим в папку с ресурсами и открываем конвертированный файл ресурсов через любой текстовый редактор, находим в нём ключ NSWindowBacking и добавляем после него две строчки:

<key>NSWindowCollectionBehavior</key>
<integer>128</integer>

Всё должно выглядеть вот так:
Правка декомпилированного .nib файла
Сохраняем изменения и конвертируем обратно в бинарный формат:

plutil -convert binary1 FRAProject.nib

Скрестив пальцы запускаем программу и смотрим что получилось. Если был найден необходимый ресурс и все изменения произвелись правильно, то в заголовке окна программы должна отображаться заветная кнопка, нажатие которой переведёт работу приложения в полноэкранный режим.

Добавленный полноэкранный режим

Правленные файлы для поддержки полноэкранного режима


Adobe Lightroom 3
Fraise 3.7.3
Список будет пополняться…


Понравилось? Поделись с друзьями!
  • nib в XML не конвертируется. Терминал ошибки не выдает, но XML-файл не появляется.

  • Спасибо. Таким способом в нормальном полноэкранном режиме заработал Adobe Lightroom 3.

  • В лайтруме вроде и так был полноэкранный режим. Что дает такой способ?

    • Да был.
      Разница в способах:
      1) Чтобы раскрыть встроенный полноэкранный режим нужно несколько раз жать шорткат, потом жать снова, чтобы выйти
      2) При использовании встроенного полноэкранного режима лайтрум раскрывается на стандартном рабочем столе, закрывая все и не давая возможности работать. Прии использовании этого метода (системный полноэкранный режим Lion’а), лайтрум раскрывается в отдельном рабочем пространстве (как Safari или iPhoto), между рабочими пространствами можно переключаться при помощи смахивания 4-мя пальцами.
      Никита    4mi4

      • Спасибо за совет
        Не могли бы выложить правленный файлик?
        4mi4    Никита

        • Заменить файл в Applications/Adobe Lightroom 3/Contents/Resourses; Перезагрузить Mac. Естественно только для Lion. Файл прикреплён внизу статьи.
          Никита    4mi4

        • Смотри внизу статьи.
          Casing    4mi4

          • Здорово, спасибо!
            А можно сделать чтобы лайтрум теперь автоматически запускался в фул-скрин?
            4mi4    Casing

            • А если выходить с него через Cmd+Q он автоматом не запускается в Full-Screen?
              Casing    4mi4

                • Скорее всего для запоминания состояния нужна поддержка функции Resume в самом приложении. Через месяц-другой разработчики добавят все функции в программы. «Лев» и сам по себе ещё «сырой», что уже о приложениях говорить.
                  Casing    Никита

  • отличный пост. провернул эти махинации с bittorrentom и, как ни странно, у меня получилось — появилась кнопка фулскрина))) работает прекрасно. а вот с гуглхромом уже не прокатило… кнопка появилась, но в фулскрине верхняя панель хрома отображается некорректно — вкладки наслояются на строку поиска… хренова… так хотелось в хром фулскрин добавить… придется ждать новой оф версии.

    • Да, с Google Chrome и ещё рядом других приложений подобное не пройдёт, так эта фича работает только с «нативными» приложениями на Cocoa (если не ошибаюсь).
      Casing    федор