Первая мысль, которая возникает - неплохо было бы рассмотреть его исходник, это сразу бы многое прояснило.
И уже на первой строчке сталкиваюсь с непонятным, цитирую «Signal Library». Ну, слово Library понятно. А вот сигналы - нет. Это те же самые сигналы, которые имеются в виду в утилите командной строки kill, или это другие сигналы, относящиеся только к потрохам GLib? Что общего между теми и этими сигналами? Имеет ли всё это какое-либо отношение к DBus?
Дальше всё понятно до 20-ой строки. Где прочитать зачем, как и почему делают проверки на непрямое включение? Т.е. понятно, что этими тремя строками рекомендуют в коде писать #include <glib-object.h> вместо #include <gobject.h>. Но неясно, зачем так сделали.
После слова «G_BEGIN_DECLS» желание читать пропадает совсем, совершенно. И возникает желание начать с какой-нибудь книжки-учебника. Но беда в том, что учебники все написаны на уровне бла-бла, без конкретики.
Можно ли сказать, что сигналы это как Event-ы в C# ?
Signals ... are a per-type facility
Чем типы в GLib отличаются от классов в GLib ?
All handlers may prematurely stop a signal emission, and any number of handlers may be connected, disconnected, blocked or unblocked during a signal emission.
Что такое «blocked»/«unblocked»? Вот сложно было авторам статьи вставить гиперссылку?
If you are connecting handlers to signals and using a GObject instance as your signal handler user data
То же самое. Концепция «user data» не объяснена, а читатель должен сам себе вообразить, что же это такое и как это используется. Была бы гиперссылка на отдельную страницу с объяснениями - не было бы вопросов.
Почитаем туториал, как написать наследника GObject.
Доходим до непонятного слова G_BEGIN_DECLS, под ним есть гиперссылка. Ликуем. Переходим. Читаем
Not Found
The requested URL /gobject/glib-Miscellaneous-Macros.html was not found on this server.
Apache/2.2.15 (Red Hat) Server at developer.gnome.org Port 80
Правильно ли я понимаю, что разница между G_DECLARE_FINAL_TYPE и G_DECLARE_DERIVABLE_TYPE на самом деле не в том, static они, final или sealed, а в том, что DERIVABLE есть таблица виртуальных методов, а в FINAL такой таблицы нет?
Поищем эти слова в типовой Gtk-программе:
https://github.com/freeciv/freeciv/search?q=G_DECLARE_FINAL_TYPE
https://github.com/freeciv/freeciv/search?q=G_DECLARE_DERIVABLE_TYPE
Таких слов там нет. Как так?