Сводка недавних изменений в cl-gtk2
Jan. 26th, 2010 12:28 pmНедавно нашлось время поработать над cl-gtk2, выложил пару изменений. Ниже — краткая их сводка.
Проверка на минимальную версию библиотек
При загрузке cl-gtk2 теперь проверяет, какая версия Gtk+ установлена и генерирует ошибку комиляции, если версия слишком старая. Видимо, вопросов о том, почему не cl-gtk2 компилируется, должно быть меньше.
Поддержка нескольких версий Gtk+
Добавлена рудиментарная поддержка нескольких версий Gtk+. При загрузке cl-gtk2 добавляет в *features* символы, соответствующие версиям glib и Gtk+, и остальной код может использовать их для условной компиляции классов/функций/методов. Поэтому, если загрузить cl-gtk2 при установленной Gtk+-2.18, то будут доступны классы из Gtk+-2.18. Но при обновлении Gtk+ надо будет перекомпилировать cl-gtk2.
Улучшена демонстрационная программа
Немного переделал интерфейс демо-программы gtk-demo:demo, теперь выглядит как текстовая страница со ссылками на демонстрации:
Работа с главным циклом приложения
Теперь функции ensure-gtk-main, leave-gtk-main, join-gtk-main и макрос within-main-loop работают схожим образом как в многопоточных лиспах, так и в однопоточных.
Использовать их следует следующим образом. В главную функцию 'main' помещается код вида:
(defun run ()
(within-main-loop
(your-application-code) ;; в какой-то момент приложение вызове leave-gtk-main
))
(defun main ()
(run)
(join-gtk-main)
(quit))
Тогда функция main вернет управление, когда приложение вызовет leave-gtk-main, и приложение завершится. Функцию main можно использовать в качестве toplevel-функции при сохранении образа или при запуске скрипта, а функцию run можно использовать для запуска приложения во время разработки — приложение будет запущено в фоне и можно будет спокойно его дописывать.
Потокобезопасная финализация экземпляров GBoxed-типов
Как-то совсем забыл изначально сделать финализацию GBoxed'ов потокобезопасной, а теперь вот вспомнил — встретил ряд багов, связанных с этим.


