RawDigger для Mac - вторая альфа

Apr 01, 2012 21:36


Кросспост из блога автора. Комментировать лучше там, но можно и тут

Прошу любить, жаловать и скачивать отсюда.
По традиции, расширенно комментирую Changelog:
  • 64/32 бита. Протестирована на 10.5 (32 bit),10.6 (64bit) и 10.7 (64bit), может быть работает и на интеловской 10.4
    Надо сказать, что для удержания дистрибутива в приемлемом размере пришлось пересобрать Qt в урезанном варианте (без Webkit, QDeclarative и много чего еще). Иначе размер .app моментально раздувало до 75M, а это уже перебор.
    macdeployqt можно попросить не копировать лишнего (-no-plugins), но тогда оно не копирует плагины (сюрприз!), а не только QWebKit и прочих. А без плагинов - кой-чего отваливается и программа крэшится, ага.
  • Поправлены размеры шрифтов и контролов в ряде мест (и где были слишком крупные, и где были слишком мелкие).
    Отдельное спасибо за совет с Qt::WA_MacMiniSize. Выглядит не очень, ну так QGroupBox на маке в любом случае выглядит так себе.
  • Добавлено место на правом краю гистограммы, где 5 цифр не влезало
  • Поправлены верхние информационные окошки, все цифры должны (бы) быть видны
  • Работает Drag-n-Drop на иконку приложения (за исключением дропа прямо на образ дистрибутивного диска, где работать и не должен).
    Про это напишу особо ниже.
  • Если About-диалог открыт сразу после запуска программы, то он не закрывается самопроизвольно через несколько секунд.
Так вот, теперь про маковский Drag-n-Drop.
Drop на открытое окно программы обрабатывается как-то стандартно, относительно виндовой версии ничего добавлять не пришлось.
А вот с дропом на не-запущенную программу дело обстоит весело:
  • Гугление ничего разумного не дало, то есть совсем.
  • Изучая Info.plist разных программ - понял что туда написать, чтобы операционка решила, что дроп поддерживается (CFBundleDocumentTypes). Программа стала запускаться, только дропнутый файл ей в командной строке не передается, тут вам не винды!
  • В маковской доке написано, дескать - (void)application:(NSApplication *)sender openFiles:(NSArray *)filenames. И полученный приватно совет гласил то же самое.
    Но у меня, я извиняюсь, C++, а не Objective-C. Куда Objective-C намазывать я просто не представляю.
    Пошел читать Qt-шные примеры, благо там много про Drag-n-Drop. Экспериментально выяснил, что примеры - дроп на иконку не поддерживают. Но поддерживает Qt Designer. Но он, сука, здоровый, читать его умаешься. Вставляя в него отладочную печать (хорошо что там исходники разумные и имена функций называются человечески, grep Open нашел что мне надо) - выяснил искомое место.
  • Оказывается, надо засабклассить QApplication и в ейном event() обработать QEvent::FileOpen.
    После этого знания уже удается нагуглить правильных слов, хотя почему ни в Mac-specific-документации, ни в документации на Drag-n-Drop это место не упомянуто - до сих пор загадка.
  • И таки да. Это место в Qt обрабатывается куском, написанным на Objective-C.
  • И даже более-менее понятно, для чего оно так извращенно сделано, чтобы можно было дропать на иконку в доке (возможно, запущенной программы) и запускалась бы не новая копия, а старая могла бы воспринять. Хотя вот мне продолжает казаться, что это через анус.

Фото, mac, drag and drop, rawdigger, qt

Previous post Next post
Up