В первый же день после официального выхода релиза Mac OS X Lion у многих, кто вкусил удобство полноэкранных приложений, возникло желание сделать свои любимые программы с такой поддержкой. И что интересно, в этот же день в сети появилась инструкция, которая как вирус распространилась по всему Интернет. Для этого предлагалось установить SIMBL – набор библиотек, который “на лету” может интегрировать при помощи сторонних плагинов дополнительный функционал в приложения без правки исходного кода, и дополнительный плагин к нему Maximizer. Способ предельно простой, но, как по мне, не рациональный. Лично мне не нужна поддержка полноэкранного режима для абсолютно всех приложений. К тому же встречал много отзывов о том, что некоторые приложения неадекватно ведут себя с ним. Несколько дней назад попал на интересную статью Эрики Садун, которая поведала о не совсем простом, но отличном способе добавления полноэкранного режима для любимой программы используя API самой операционной системы Mac OS X Lion. Я покажу как всё это делается на примере текстового редактора Fraise.
Чтоб не “убить” программу делаем её резервную копию, например на Рабочий стол. Заходим в ресурсы приложения (правый клик по приложению > Показать содержимое пакета > Contents > Resources) и смотрим что и как расположено, имеется ли многоязычная локализация. Для осуществления желаемого нам необходимо найти все ресурсы, в которых упомянается параметр 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>
Всё должно выглядеть вот так:
Сохраняем изменения и конвертируем обратно в бинарный формат:
plutil -convert binary1 FRAProject.nib
Скрестив пальцы запускаем программу и смотрим что получилось. Если был найден необходимый ресурс и все изменения произвелись правильно, то в заголовке окна программы должна отображаться заветная кнопка, нажатие которой переведёт работу приложения в полноэкранный режим.
Правленные файлы для поддержки полноэкранного режима
Adobe Lightroom 3
Fraise 3.7.3
Список будет пополняться…
nib в XML не конвертируется. Терминал ошибки не выдает, но XML-файл не появляется.
Xcode не установлен?
Нет. Предупреждения о том, что нужен Xcode в статье не было 🙂 Установка исправит ситуацию?
Я не был уверен, что консольная утилита plutil идёт только с Xcode, по этому и не написал об этом. Установка Xcode исправит 😉 Правда, можешь её отдельно найти в Интернет.
Кстати, можно с вами как-то связаться менее публично?)
Отправил запрос в GoogleTalk.
GTalk’а у меня нет, а через интерфейс Gmail’а нчиего не вижу. У вас есть Skype?
Нельзя было бы попросить вас конвертировать в XML файл, а то для одной конвертации качать 3 ГБ не очень удобно? Заранее большое спасибо.
Спасибо. Таким способом в нормальном полноэкранном режиме заработал Adobe Lightroom 3.
В лайтруме вроде и так был полноэкранный режим. Что дает такой способ?
Да был.
Разница в способах:
1) Чтобы раскрыть встроенный полноэкранный режим нужно несколько раз жать шорткат, потом жать снова, чтобы выйти
2) При использовании встроенного полноэкранного режима лайтрум раскрывается на стандартном рабочем столе, закрывая все и не давая возможности работать. Прии использовании этого метода (системный полноэкранный режим Lion’а), лайтрум раскрывается в отдельном рабочем пространстве (как Safari или iPhoto), между рабочими пространствами можно переключаться при помощи смахивания 4-мя пальцами.
Спасибо за совет
Не могли бы выложить правленный файлик?
Заменить файл в Applications/Adobe Lightroom 3/Contents/Resourses; Перезагрузить Mac. Естественно только для Lion. Файл прикреплён внизу статьи.
Смотри внизу статьи.
Здорово, спасибо!
А можно сделать чтобы лайтрум теперь автоматически запускался в фул-скрин?
А если выходить с него через Cmd+Q он автоматом не запускается в Full-Screen?
Нет
Скорее всего для запоминания состояния нужна поддержка функции Resume в самом приложении. Через месяц-другой разработчики добавят все функции в программы. “Лев” и сам по себе ещё “сырой”, что уже о приложениях говорить.
отличный пост. провернул эти махинации с bittorrentom и, как ни странно, у меня получилось – появилась кнопка фулскрина))) работает прекрасно. а вот с гуглхромом уже не прокатило… кнопка появилась, но в фулскрине верхняя панель хрома отображается некорректно – вкладки наслояются на строку поиска… хренова… так хотелось в хром фулскрин добавить… придется ждать новой оф версии.
Да, с Google Chrome и ещё рядом других приложений подобное не пройдёт, так эта фича работает только с “нативными” приложениями на Cocoa (если не ошибаюсь).