GLib
  • Initial page
  • I. Концепция
    • Background
    • Типы данных и программирование
  • Динамическая система типов Glib
    • Введение
    • Функции копирования
    • Соглашения
    • Неинстанциируемые не классифицированные базовые типы
    • Инстанциируемые классифицируемые типы: объекты
    • Неинстанциированные классифицированные типы: Интерфейсы.
  • Основной класс GObject
    • Введение
    • Инстанциация объекта
    • Объектное управление памятью
    • Свойства объекта
  • Система сообщений GObject
    • Замыкания
    • Сигналы
  • II. Описание API
    • GType
    • GTypePlugin
    • GTypeModule
    • GObject часть 1
    • GObject часть 2
    • Enums and Flags
    • GBoxed
    • Generic Values
    • Parameters and Values часть 1
    • Parameters and Values часть 2
    • Parameters and Values часть 3, ага
    • Value arrays
  • III. Описание инструментов
    • glib-mkenums
    • glib-genmarshal
    • gobject-query
  • IV. Руководство
    • Как определить и реализовать новый GObject?
    • Объектные методы
    • Как определять и реализовывать Интерфейсы?
    • Как создавать и использовать сигналы
    • Как пользователи могут злоупотреблять сигналами (и почему некоторые думают что это хорошо)
  • V. Об инструментах
    • Об инструментах
  • GTK 4
    • GtkApplication и GtkApplicationWindow
    • Widgets
Powered by GitBook
On this page

Was this helpful?

  1. II. Описание API

GObject часть 2

PreviousGObject часть 1NextEnums and Flags

Last updated 6 years ago

Was this helpful?

g_object_new ()

gpointer            g_object_new                        (GType object_type,
                                                         const gchar *first_property_name,
                                                         ...);

Создаёт новый экземпляр подтипа (subtype) и устанавливает его свойства.

Конструкционные параметры (смотрите , ) которые определены не явно, устанавливаются в их значения по умолчанию.

object_type :

first_property_name :

имя первого свойства

... :

Возвращает :

новый экземпляр object_type

g_object_newv ()

gpointer            g_object_newv                       (GType object_type,
                                                         guint n_parameters,
                                                         GParameter *parameters);

Создаёт новый экземпляр подтипа и устанавливает его свойства.

Конструкционные параметры (смотрите , ) которые не были установлены явно, устанавливаются в их значения по умолчанию.

object_type :

n_parameters :

длина массива parameters

parameters :

Возвращает :

новый экземпляр object_type

GParameter

typedef struct {
  const gchar *name;
  GValue       value;
} GParameter;

имя параметра

значение параметра

g_object_ref ()

gpointer            g_object_ref                        (gpointer object);

Увеличивает количество ссылок object.

object :

Возвращает :

тот же object

g_object_unref ()

void                g_object_unref                      (gpointer object);

Уменьшает количество ссылок object. Когда количество ссылок достигает 0, объект финализируется (то есть память связанная с этим объектом освобождается).

object :

g_object_ref_sink ()

gpointer            g_object_ref_sink                   (gpointer object);

Другими словами, если объект плавающий, то этот вызов "принимает владение" плавающей ссылкой, преобразует её в обычную ссылку очищая плавающий флаг оставляя неизменным количество ссылок. Если объект не плавающий, то этот вызов добавляет обычную ссылку увеличивая количество ссылок на одну.

object :

Возвращает :

object

Начиная с версии 2.10

GInitiallyUnowned

typedef struct _GObject                  GInitiallyUnowned;

GInitiallyUnownedClass

typedef struct _GObjectClass             GInitiallyUnownedClass;

Классовая структура для типа GInitiallyUnowned.

G_TYPE_INITIALLY_UNOWNED

#define G_TYPE_INITIALLY_UNOWNED	      (g_initially_unowned_get_type())

g_object_is_floating ()

gboolean            g_object_is_floating                (gpointer object);

object :

Возвращает :

Начиная с версии 2.10

g_object_force_floating ()

void                g_object_force_floating             (GObject *object);

object :

Начиная с версии 2.10

GWeakNotify ()

void                (*GWeakNotify)                      (gpointer data,
                                                         GObject *where_the_object_was);

data :

данные обеспечиваемые при установке слабых ссылок

where_the_object_was :

объект для финализации

g_object_weak_ref ()

void                g_object_weak_ref                   (GObject *object,
                                                         GWeakNotify notify,
                                                         gpointer data);

object :

notify :

callback-функция вызываемая перед освобождением объекта

data :

дополнительные данные помещаемые в уведомление

g_object_weak_unref ()

void                g_object_weak_unref                 (GObject *object,
                                                         GWeakNotify notify,
                                                         gpointer data);

Удаляет слабую ссылку callback-функции для объекта.

object :

notify :

callback-функция для поиска

data :

данные для поиска

g_object_add_weak_pointer ()

void                g_object_add_weak_pointer           (GObject *object,
                                                         gpointer *weak_pointer_location);

object :

Объект для слабой ссылки.

weak_pointer_location :

адрес указателя в памяти.

g_object_remove_weak_pointer ()

void                g_object_remove_weak_pointer        (GObject *object,
                                                         gpointer *weak_pointer_location);

object :

Объект для слабой ссылки.

weak_pointer_location :

адрес указателя в памяти.

GToggleNotify ()

void                (*GToggleNotify)                    (gpointer data,
                                                         GObject *object,
                                                         gboolean is_last_ref);

data :

object :

is_last_ref :

g_object_add_toggle_ref ()

void                g_object_add_toggle_ref             (GObject *object,
                                                         GToggleNotify notify,
                                                         gpointer data);

Увеличивает счётчик ссылок объекта на одну и устанавливает callback-функцию вызываемую когда все ссылки на объект будут сброшены, или когда это уже последняя ссылка на объект и другая ссылка установлена.

Установка заключается в том что когда нет других ссылок на object, только слабая ссылка размещается в обратном направлении из object в объект посредник, но когда есть другие ссылки размещённые в object, строгая ссылка удерживается. Callback-функция notify вызывается когда ссылка из object в объекте посреднике должна быть переключена из строгой в слабую (is_last_ref true) или из слабой в строгую (is_last_ref false).

Так как (обычная) ссылка должна содержаться в объекте перед вызовом g_object_toggle_ref(), начальное состояние обратной ссылки всегда строгое (strong).

Множество переключаемых ссылок могут быть добавлены в тот же gobject, однако если множество переключаемых ссылок на объект, то не будет уведомления пока все не будут удалены. Поэтому, вы должны использовать переключающую ссылку если есть важное состояние в объекте посреднике.

object :

notify :

функция вызываемая когда ссылка является последней ссылкой на объект, или больше не последняя ссылка на объект.

data :

данные помещаемые в notify

Начиная с версии 2.8

g_object_remove_toggle_ref ()

void                g_object_remove_toggle_ref          (GObject *object,
                                                         GToggleNotify notify,
                                                         gpointer data);

object :

notify :

функция вызываемая когда ссылка является последней ссылкой на объект, или когда она больше не является последней ссылкой на объект.

data :

данные помещаемые в notify

Начиная с версии 2.8

g_object_connect ()

gpointer            g_object_connect                    (gpointer object,
                                                         const gchar *signal_spec,
                                                         ...);

Удобная функция для подключения множество сигналов сразу.

Спецификации сигналов ожидаемых этой функцией имеет форму "modifier::signal_name", где modifier может быть одним из следующего:

signal

эквивалент g_signal_connect_data (...)

object_signal, object-signal

эквивалент g_signal_connect_object (...)

swapped_signal, swapped-signal

эквивалент g_signal_connect_data (..., G_CONNECT_SWAPPED)

swapped_object_signal, swapped-object-signal

эквивалент g_signal_connect_object (..., G_CONNECT_SWAPPED)

signal_after, signal-after

эквивалент g_signal_connect_data (..., G_CONNECT_AFTER)

object_signal_after, object-signal-after

эквивалент g_signal_connect_object (..., G_CONNECT_AFTER)

swapped_signal_after, swapped-signal-after

эквивалент g_signal_connect_data (..., G_CONNECT_SWAPPED | G_CONNECT_AFTER)

swapped_object_signal_after, swapped-object-signal-after

эквивалент g_signal_connect_object (..., G_CONNECT_SWAPPED | G_CONNECT_AFTER)

  menu->toplevel = g_object_connect (g_object_new (GTK_TYPE_WINDOW,
						   "type", GTK_WINDOW_POPUP,
						   "child", menu,
						   NULL),
				     "signal::event", gtk_menu_window_event, menu,
				     "signal::size_request", gtk_menu_window_size_request, menu,
				     "signal::destroy", gtk_widget_destroyed, &menu->toplevel,
				     NULL);

object :

signal_spec :

спецификация первого сигнала

... :

Возвращает :

object

g_object_disconnect ()

void                g_object_disconnect                 (gpointer object,
                                                         const gchar *signal_spec,
                                                         ...);

Удобная функция для отключения множества сигналов сразу.

Спецификация сигналов ожидаемых этой функцией имеет форму "any_signal", которая означает отключение любых сигналов с соответствующими callback-функциями и данными, или "any_signal::signal_name", которая отключает только сигнал с именем "signal_name".

object :

signal_spec :

спецификация для первого сигнала

... :

g_object_set ()

void                g_object_set                        (gpointer object,
                                                         const gchar *first_property_name,
                                                         ...);

Устанавливает свойства на объект.

object :

first_property_name :

имя первого устанавливаемого свойства

... :

g_object_get ()

void                g_object_get                        (gpointer object,
                                                         const gchar *first_property_name,
                                                         ...);

Получает свойства объекта.

Пример 5. Использование g_object_get()

 gint intval;
 gchar *strval;
 GObject *objval; 
 
 g_object_get (my_object,
               "intproperty", &intval,
               "strproperty", &strval,
               "objproperty", &objval,
               NULL);

 /* Do something with intval, strval, objval */
 
 g_free (strval);
 g_object_unref (objval);

object :

first_property_name :

имя первого свойства для получения

... :

g_object_notify ()

void                g_object_notify                     (GObject *object,
                                                         const gchar *property_name);

Издаёт сигнал "notify" для свойства property_name в object.

object :

property_name :

имя свойства установленное в класс object.

g_object_freeze_notify ()

void                g_object_freeze_notify              (GObject *object);

Это необходимо для аксессоров которые изменяют множество свойств, для предотвращения уведомления в течение модификации объекта.

object :

g_object_thaw_notify ()

void                g_object_thaw_notify                (GObject *object);

object :

g_object_get_data ()

gpointer            g_object_get_data                   (GObject *object,
                                                         const gchar *key);

object :

key :

имя ключа для этой ассоциации

Возвращает :

g_object_set_data ()

void                g_object_set_data                   (GObject *object,
                                                         const gchar *key,
                                                         gpointer data);

Каждый объект поддерживает таблицу ассоциаций от строк до указателей. Эта функция позволяет вам установить ассоциацию.

Если объект уже содержит ассоциацию с таким именем, старая ассоциация будет уничтожена.

object :

key :

имя ключа

data :

данные связанные с этим ключом

g_object_set_data_full ()

void                g_object_set_data_full              (GObject *object,
                                                         const gchar *key,
                                                         gpointer data,
                                                         GDestroyNotify destroy);

object :

key :

имя ключа

data :

данные связанные с ключом

destroy :

функция вызываемая при уничтожении ассоциации

g_object_steal_data ()

gpointer            g_object_steal_data                 (GObject *object,
                                                         const gchar *key);

Удаляет определённую величину из объектных данных ассоциаций, без вызова обработчика уничтожения ассоциаций.

object :

key :

имя ключа

Возвращает :

g_object_get_qdata ()

gpointer            g_object_get_qdata                  (GObject *object,
                                                         GQuark quark);

object :

GObject для получения сохраненных указателей пользовательских данных

quark :

Возвращает :

g_object_set_qdata ()

void                g_object_set_qdata                  (GObject *object,
                                                         GQuark quark,
                                                         gpointer data);

object :

GObject для хранения набора пользовательских указателей данных

quark :

data :

Непрозрачный указатель пользовательских данных

g_object_set_qdata_full ()

void                g_object_set_qdata_full             (GObject *object,
                                                         GQuark quark,
                                                         gpointer data,
                                                         GDestroyNotify destroy);

object :

GObject для хранения указателя набора пользовательских данных

quark :

data :

Непрозрачный указатель пользовательских данных

destroy :

Функция вызываемая с data как аргумент, когда data нужно освободить

g_object_steal_qdata ()

gpointer            g_object_steal_qdata                (GObject *object,
                                                         GQuark quark);
void
object_add_to_user_list (GObject     *object,
                         const gchar *new_string)
{
  /* the quark, naming the object data */
  GQuark quark_string_list = g_quark_from_static_string ("my-string-list");
  /* retrive the old string list */
  GList *list = g_object_steal_qdata (object, quark_string_list);
  
  /* prepend new string */
  list = g_list_prepend (list, g_strdup (new_string));
  /* this changed 'list', so we need to set it again */
  g_object_set_qdata_full (object, quark_string_list, list, free_string_list);
}
static void
free_string_list (gpointer data)
{
  GList *node, *list = data;
  
  for (node = list; node; node = node->next)
    g_free (node->data);
  g_list_free (list);
}

object :

GObject для получения сохранённого указателя пользовательских данных

quark :

Возвращает :

g_object_set_property ()

void                g_object_set_property               (GObject *object,
                                                         const gchar *property_name,
                                                         const GValue *value);

Устанавливает свойство для объекта.

object :

property_name :

имя устанавливаемого свойства

value :

значение

g_object_get_property ()

void                g_object_get_property               (GObject *object,
                                                         const gchar *property_name,
                                                         GValue *value);

Получает свойство объекта.

object :

property_name :

имя получаемого свойства

value :

расположение возвращаемого значения свойства

g_object_new_valist ()

GObject*            g_object_new_valist                 (GType object_type,
                                                         const gchar *first_property_name,
                                                         va_list var_args);

object_type :

first_property_name :

имя первого свойства

var_args :

Возвращает :

новый экземпляр object_type

g_object_set_valist ()

void                g_object_set_valist                 (GObject *object,
                                                         const gchar *first_property_name,
                                                         va_list var_args);

Устанавливает свойства объекта.

object :

first_property_name :

имя первого свойства для установки

var_args :

g_object_get_valist ()

void                g_object_get_valist                 (GObject *object,
                                                         const gchar *first_property_name,
                                                         va_list var_args);

Получает свойства объекта.

object :

first_property_name :

имя первого свойства для получения

var_args :

g_object_watch_closure ()

void                g_object_watch_closure              (GObject *object,
                                                         GClosure *closure);

object :

GObject ограничивающий жизненное время closure

closure :

GClosure для отслеживания

g_object_run_dispose ()

void                g_object_run_dispose                (GObject *object);

Высвобождает все ссылки на другие объекты. Это может быть использовано для прерывания циклов ссылки.

Помните

Эти функции должны вызываться только из системы реализации объекта.

object :

G_OBJECT_WARN_INVALID_PROPERTY_ID()

#define             G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec)

Этот макрос должен использоваться для издания стандартного предупреждения о несуществующем свойстве в реализациях set_property() и get_property().

object :

property_id :

числовой id свойства

pspec :

Детали сигналов

The "notify" signal

void                user_function                      (GObject    *gobject,
                                                        GParamSpec *arg1,
                                                        gpointer    user_data)      : Run First / No Recursion / Has Details / Action / No Hooks

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

g_signal_connect (text_view->buffer, "notify::paste-target-list",
                  G_CALLBACK (gtk_text_view_target_list_notify),
                  text_view)

pspec :

gobject :

объект который получает сигнал.

user_data :

пользовательские данные устанавливаемые при подключении обработчика сигнала.

типовой id подтипа для экземпляра

значение первого свойства, опционально следующие пары name/value, зтем

типовой id подтипа для экземпляра

массив

Вспомогательная структура GParameter используется для размещения параметных пар name/value в .

const *name;

value;

a

Увеличивает количество ссылок object, и возможно удаляет ссылку, если object имеет плавающую ссылку.

Все поля в структуре GInitiallyUnowned являются закрытыми для реализации и к ним нет непосредственного доступа.

Тип для .

Проверяет имеет ли object ссылку.

если object имеет плавающую ссылку

Эта функция предназначается для реализации утвердить ссылку объекта. Выполнение этой операции требуется редко, все создаются с плавающими ссылками которые обычно должны просто обрабатываться вызовом .

a

Функция может быть добавлена в объект как callback-функция которая вызывается когда объект финализирован. Так как объект уже финализирован когда вызывается, вы ничего не можете делать с объектом, кроме как использовать его адрес как hash-index или нечто подобное.

Добавляет слабую ссылку callback-функции в объект. Слабые ссылки используются для уведомления при финализации объекта. Они называются "слабые ссылки" ("weak references") потому что позволяют вам безопасно удерживать указатель на объект без вызова ( добавляет строгую ссылку, которая заставляет объект существовать).

для слабой ссылки

для удаления слабой ссылки

Добавляет слабую ссылку из weak_pointer в object указывая что указатель расположенный в weak_pointer_location допустим только в течение жизненного цикла object. Когда object финализирован, weak_pointer будет установлен в .

Удаляет слабую ссылку из object которая была предварительно добавлена используя . weak_pointer_location должен соответствовать использованному с .

Callback-функция используемая для уведомления о переключении состояния ссылки. Смотрите .

Callback-данные помещаемые в

Объект для которого вызвана .

если переключаемая ссылка последняя ссылка на объект. если переключаемая ссылка была последней ссылкой а теперь есть другая ссылка.

Эти функциональные возможности предназначены для привязки object к объекту посреднику управляемому другим менеджером памяти. Это выполняется двумя парами ссылок: строгая ссылка добавляется а противоположная в объект посредник который является либо строгой ссылкой либо слабой ссылкой.

Удаляет ссылку добавленную с помощью . Количество ссылок на объект уменьшается на одну.

-функция для первого сигнала, зтем данные для первого сигнала, зтем опционально следующие spec/callback/data, завершается

-функция для первого сигнала, зтем данные для первого сигнала, зтем опционально остальные spec/callback/data, завершается

значение для первого свойства, зтем опционально следующие name/value pairs, завершается

В основном, копия делается содержимого свойства и вызывающий функцию отвечает за освобождение памяти так как это делается для типа, например вызовом или.

Пример использования для получения содержимого трёх свойств - одного типа , одного типа и одного типа ""

возвращаемое расположение для первого свойства, зтем опционально следующие пары name/return, завершается

Останавливает эмиссию сигнала "notify" в object. Сигналы ставятся в очередь пока не вызвана для object.

Обратный эффект от предыдущего вызова . Это заставит все сигналы "notify" поставленные в очередь издаться на object.

Получает именованное поле из таблицы объектов ассоциации (смотрите ).

содержащий ассоциации

данные если найдены, или если нет существующих данных.

содержащий ассоциации.

Как кроме того добавляет уведомление о том когда ассоциация уничтожена, или установлена в другое значение или когда объект уничтожен.

Помните что destroy callback-функция не вызывается если data это .

содержащий ассоциации

содержащий ассоциации

данные если найдены, или если такие данные не существуют.

Эта функция получает назад пользовательские указатели данных сохранённые через .

, именующий указатель пользовательских данных

Набор указателей пользовательских данных, или

Устанавливает непрозрачный именованный указатель в объект. Имя определяется через (находится например через ), и указатель может быть получен обратно из object с помощью пока object не финализирован. Предварительная установка набора указателей пользовательских данных, переписывает (освобождает) старый набор указателей, используя поскольку указатель по существу удаляет сохранённые данные.

, именованный указатель пользовательских данных

Эта функция работает так же как , но в дополнение, может быть определена функция void (*destroy) (gpointer) которая вызывается с data в качестве аргумента при финализации object, или данные переписываются вызовом с таким же quark.

, именованный указатель пользовательских данных

Эта функция получает назад указатели пользовательских данных сохранённые через и удаляет data из объекта без вызова функции destroy() (если они были установлены). Обычно, вызов этой функции запросит только обновление указателей пользовательских данных с уведомлением разрушения, например:

Использование в примере выше, вместо отменило бы установку функции уничтожения, и поэтому часть списка строк освобождается через .

, именованный указатель пользовательских данных

Установленный указатель пользовательских данных, или

В основном, делается копия содержимого свойства и вызывающий должен отвечать за освобождение памяти с помощью вызова .

Помните что фактически предназначен для языковых привязок, намного удобнее для C программирования.

Создаёт новый экземпляр подтипа и устанавливает его свойства.

Параметры конструкции (смотрите , ) которые явно не определены устанавливаются в значение по умолчанию.

типовой id подтипа для инстанциирования

значение первого свойства, зтем опционально следующие пары name/value, завершает

значение первого свойства, fзтем опционально следующие пары name/value, завершает

В основном, создаётся копия содержимого свойства и вызывающий отвечает за освобождение памяти так как это делается для типа, например вызовом или.

Смотрите .

расположение возвращаемого первого свойства, зтем опционально следующие пары name/return, завершает

Эта функция по существу лимитирует время жизни closure до времени жизни объекта. Таким образом, когда объект финализирован, closure ликвидируется вызовом, чтобы предотвратить вызов замыкания с несуществующим объектом. Кроме того, и добавляются как защищённые маршаллеры closure, гарантируя что дополнительный счётчик ссылок содержит object в течение вызова closure. Обычно, эта функция вызывается в замыканиях которые используют этот object в качестве данных для замыкания.

в котором были вызваны set_property() или get_property()

свойства

Этот сигнал обычно используется для получения уведомления об изменении единственного свойства, определяя имя свойства как детальный параметр в вызове , например:

Важно отметить что вы должны использовать параметр называемый как детальная строка для сигнала уведомления.

свойства которое изменяется

GObject
G_PARAM_CONSTRUCT
G_PARAM_CONSTRUCT_ONLY
GObject
G_PARAM_CONSTRUCT
G_PARAM_CONSTRUCT_ONLY
g_object_newv()
плавающую
GInitiallyUnowned
GInitiallyUnowned
плавающую
GObject
плавающую
GInitiallyUnowned
g_object_ref_sink()
GWeakNotify
GWeakNotify
g_object_ref()
g_object_ref()
NULL
g_object_add_weak_pointer()
g_object_add_weak_pointer()
g_object_add_toggle_ref()
g_object_add_toggle_ref()
g_object_add_toggle_ref()
g_free()
g_object_unref()
g_object_get()
G_TYPE_INT
G_TYPE_STRING
g_object_thaw_notify()
g_object_freeze_notify()
g_object_set_data()
g_object_set_data()
NULL
g_object_set_qdata()
GQuark
g_quark_from_static_string()
g_object_get_qdata()
NULL
g_object_set_qdata()
g_object_set_qdata()
g_object_set_qdata()
g_object_get_qdata()
g_object_steal_qdata()
g_object_set_qdata_full()
g_value_unset()
g_object_get_property()
g_object_get()
GObject
G_PARAM_CONSTRUCT
G_PARAM_CONSTRUCT_ONLY
g_free()
g_object_unref()
g_object_get()
g_closure_invalidate()
g_object_ref()
g_object_unref()
g_signal_connect()
canonical
GObject
NULL
GObject
GParameter
gchar
GValue
GObject
GObject
GObject
GObject
TRUE
GObject
GObject
GObject
g_object_add_toggle_ref()
g_object_add_toggle_ref()
TRUE
FALSE
GObject
GObject
GObject
GCallback
NULL
GObject
GCallback
NULL
GObject
NULL
GObject
NULL
GObject
GObject
GObject
GObject
NULL
GObject
GObject
GObject
NULL
GQuark
NULL
GQuark
GQuark
GQuark
NULL
GObject
GObject
GObject
NULL
GObject
NULL
GObject
NULL
GObject
GObject
GParamSpec
GParamSpec