Prev

Up

Home

GTK+ Reference Manual

Next

Top  |  Description  |  Object Hierarchy  |  Known Derived Interfaces  |  Properties  |  Signals

GtkObject

GtkObject Базовый класс иерархии типов GTK+

Краткое описание

#include <gtk/gtk.h> GtkObject; #define GTK_OBJECT_TYPE (object) #define GTK_OBJECT_TYPE_NAME (object) enum GtkObjectFlags; #define GTK_OBJECT_FLAGS (obj) #define GTK_OBJECT_FLOATING (obj) enum GtkArgFlags; GtkObject* gtk_object_new (GtkType type, const gchar *first_property_name, ...); void gtk_object_sink (GtkObject *object); GtkObject* gtk_object_ref (GtkObject *object); void gtk_object_unref (GtkObject *object); void gtk_object_weakref (GtkObject *object, GtkDestroyNotify notify, gpointer data); void gtk_object_weakunref (GtkObject *object, GtkDestroyNotify notify, gpointer data); void gtk_object_destroy (GtkObject *object); void gtk_object_get (GtkObject *object, const gchar *first_property_name, ...); void gtk_object_set (GtkObject *object, const gchar *first_property_name, ...); void gtk_object_set_data (GtkObject *object, const gchar *key, gpointer data); void gtk_object_set_data_full (GtkObject *object, const gchar *key, gpointer data, GtkDestroyNotify destroy); void gtk_object_remove_data (GtkObject *object, const gchar *key); gpointer gtk_object_get_data (GtkObject *object, const gchar *key); void gtk_object_remove_no_notify (GtkObject *object, const gchar *key); void gtk_object_set_user_data (GtkObject *object, gpointer data); gpointer gtk_object_get_user_data (GtkObject *object); void gtk_object_add_arg_type (const gchar *arg_name, GtkType arg_type, guint arg_flags, guint arg_id); void gtk_object_set_data_by_id (GtkObject *object, GQuark data_id, gpointer data); void gtk_object_set_data_by_id_full (GtkObject *object, GQuark data_id, gpointer data, GtkDestroyNotify destroy); gpointer gtk_object_get_data_by_id (GtkObject *object, GQuark data_id); void gtk_object_remove_data_by_id (GtkObject *object, GQuark data_id); void gtk_object_remove_no_notify_by_id (GtkObject *object, GQuark key_id); #define gtk_object_data_try_key #define gtk_object_data_force_id

Иерархия объектов

GObject +----GInitiallyUnowned +----GtkObject +----GtkWidget +----GtkAdjustment +----GtkCellRenderer +----GtkFileFilter +----GtkItemFactory +----GtkTooltips +----GtkTreeViewColumn +----GtkRecentFilter

Известные производные интерфейсы

GtkObject требует GtkRecentChooser.

Свойства

"user-data" gpointer : Read / Write

Сигналы

"destroy" void user_function (GtkObject *object, gpointer user_data) : Cleanup / No recursion / No hooks

Описание

GtkObject это базовый класс для всех виджетов, а также объектов таких как GtkAdjustment. GtkObject предшественник GObject; не виджеты происходящие из GtkObject вместо GObject необходимы для обратной совместимости.

GtkObjects создаётся с "плавающим" подсчетом ссылок. Это означает, что начальная ссылка не принадлежит никому. Вызов g_object_unref() для вновь созданного GtkObject некорректен, сначала должна удаляться плавающая ссылка. Это может сделать кто угодно в любое время, вызвав g_object_ref_sink() для преобразования плавающей ссылки в обычную. g_object_ref_sink() возвращает новую ссылку если объект уже не имеет плавающей ссылки.

Когда вы добавляете виджет в его родительский контейнер, родительский контейнер выполняет следующее:

  g_object_ref_sink (G_OBJECT (child_widget));

Это значит что контейнер теперь владеет ссылкой на дочерний виджет и дочерний виджет имеет плавающую ссылку.

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

button = gtk_button_new (); /* кнопка имеет одну плавающую ссылку для своего существования */ gtk_container_add (GTK_CONTAINER (container), button); /* кнопка имеет одну не плавающую ссылку которой владеет контейнер */

GtkWindow особый случай, потому что GTK+ самостоятельно будет ссылаться и/или снимать ссылку на него при создании. Таким образом, после вызова gtk_window_new(), GtkWindow будет иметь одну ссылку которой владеет GTK+, а не плавающую ссылку.

Ещё один фактор входит в соблюдение правил: сигнал "destroy", издаваемый с помощью gtk_object_destroy(). Сигнал "destroy" запрашивает весь код имея ссылку объекта для освобождения ссылки. Таким образом, например, если вы вызовите gtk_object_destroy() на GtkWindow, GTK+ освободит ссылки которыми он владеет; если вы вызовите gtk_object_destroy() на GtkButton, то кнопка будет удалена из родительского контейнера а родительский контейнер будет освобожден от ссылки на кнопку. Поскольку ссылка освобождена, вызов gtk_object_destroy() должен освободить всю память связанную с объектом, за исключением ошибочного кода который не в состоянии освободить собственные ссылки в ответ на сигнал "destroy". Освобождение памяти (упоминается как finalization) происходит только если количество ссылок равно нулю.

Некоторые простые правила для обработки GtkObject:

Детали

GtkObject

typedef struct _GtkObject GtkObject;

Непосредственно сам объект. Для доступа к нему используйте макрос.


GTK_OBJECT_TYPE()

#define GTK_OBJECT_TYPE(object)           (G_TYPE_FROM_INSTANCE (object))

Определяет тип объекта.

object :

GtkObject.


GTK_OBJECT_TYPE_NAME()

#define GTK_OBJECT_TYPE_NAME(object)      (g_type_name (GTK_OBJECT_TYPE (object)))

Определяет типовое имя объекта.

object :

GtkObject.


enum GtkObjectFlags

typedef enum { GTK_IN_DESTRUCTION = 1 << 0, /* Used internally during dispose */ #if !defined (GTK_DISABLE_DEPRECATED) || defined (GTK_COMPILATION) GTK_FLOATING = 1 << 1, #endif GTK_RESERVED_1 = 1 << 2, GTK_RESERVED_2 = 1 << 3 } GtkObjectFlags;

Сообщает о состоянии объекта.

GTK_IN_DESTRUCTION

Объект в текущий момент находится в состоянии разрушения. Это используется внутренне GTK+ для предотвращения повторных вызовов разрушения.

GTK_RESERVED_2

Зарезервировано для использования в будущем.


GTK_OBJECT_FLAGS()

#define GTK_OBJECT_FLAGS(obj)             (GTK_OBJECT (obj)->flags)

Определяет GtkObjectFlags для объекта, не обращаясь к его членам.

obj :

Объект из которого возвращаются флажки.


GTK_OBJECT_FLOATING()

#define GTK_OBJECT_FLOATING(obj)          (g_object_is_floating (obj))

Внимание

GTK_OBJECT_FLOATING устарела и не должна использоваться во вновь создаваемом коде.

Возвращает TRUE если объект всё ещё имеет плавающие ссылки. Смотрите краткий обзор GtkObject.

obj :

Объект для проверки.


enum GtkArgFlags

typedef enum { GTK_ARG_READABLE = G_PARAM_READABLE, GTK_ARG_WRITABLE = G_PARAM_WRITABLE, GTK_ARG_CONSTRUCT = G_PARAM_CONSTRUCT, GTK_ARG_CONSTRUCT_ONLY = G_PARAM_CONSTRUCT_ONLY, GTK_ARG_CHILD_ARG = 1 << 4 } GtkArgFlags;

Внимание

GtkArgFlags устарела и не должна использоваться во вновь создаваемом коде. В будущем используйте вместо неё GParamSpec

Возможные флажки указывающие какие аргументы должны быть обработаны.

GTK_ARG_READABLE

Читабельный. (то есть может выполняться запрос)

GTK_ARG_WRITABLE

Записываемый. (то есть может устанавливаться)

GTK_ARG_CONSTRUCT

Нуждается в конструкции.

GTK_ARG_CONSTRUCT_ONLY

Нуждается в конструкции (и создаётся один раз во время создания объекта) и по другому не может быть установлен. Следовательно этот флажок не допускает GTK_ARG_WRITABLE, и избыточен для GTK_ARG_CONSTRUCT.

GTK_ARG_CHILD_ARG

Тип параметра применяемый к каждому дочернему элементу. Используется для GtkContainer.


gtk_object_new ()

GtkObject* gtk_object_new (GtkType type, const gchar *first_property_name, ...);

Внимание

gtk_object_new устарела и не должна использоваться во вновь создаваемом коде. Используйте вместо неё g_object_new().

Создаёт объект определяя его аргументы, перечисленные в вызове функции.

type :

Тип идентифицирующий этот объект. Возвращённый gtk_type_unique() (хотя для объектного свойства записи это должно быть доступно через макрос GTK_TYPE_FOO.)

first_property_name :

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

... :

Значение первого аргумента, далее любое количество пар имя/значение-аргумента, заканчивается NULL.

Возвращает :

новый GtkObject.


gtk_object_sink ()

void        gtk_object_sink                 (GtkObject *object);

Внимание

gtk_object_sink устарела начиная с версии 2.10 и не должна использоваться во вновь создаваемом коде. Вместо неё используйте g_object_ref_sink().

Удаляет плавающую ссылку из GtkObject, если есть; иначе ничего не делает. Смотрите краткое описание GtkObject.

object :

Объект для снятия плавающей ссылки.


gtk_object_ref ()

GtkObject*  gtk_object_ref                  (GtkObject *object);

Внимание

gtk_object_ref устарела и не должна использоваться во вновь создаваемом коде. Используйте вместо неё g_object_ref().

Увеличивает количество плавающих ссылок объекта.

object :

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

Возвращает :

object.


gtk_object_unref ()

void        gtk_object_unref                (GtkObject *object);

Внимание

gtk_object_unref устарела и не должна использоваться во вновь создаваемом коде. Вместо неё используйте g_object_unref().

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

object :

Объект для уменьшения ссылок.


gtk_object_weakref ()

void gtk_object_weakref (GtkObject *object, GtkDestroyNotify notify, gpointer data);

Внимание

gtk_object_weakref устарела и не должна использоваться во вновь создаваемом коде. Вместо неё используйте g_object_weak_ref().

Добавляет слабую ссылку для объекта. Слабая ссылка используется как уведомление о завершении цикла существования объекта. Их называют "weak references", потому что они позволяют удерживать указатель на объект без вызова g_object_ref() (g_object_ref() добавляет жесткую ссылку, то есть, заставляет объект существовать).

object :

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

notify :

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

data :

Дополнительные данные для помещения в уведомление (notify).


gtk_object_weakunref ()

void gtk_object_weakunref (GtkObject *object, GtkDestroyNotify notify, gpointer data);

Внимание

gtk_object_weakunref устарела и не должна использоваться во вновь создаваемом коде. Используйте вместо неё g_object_weak_unref().

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

object :

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

notify :

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

data :

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


gtk_object_destroy ()

void        gtk_object_destroy              (GtkObject *object);

Издаёт сигнал "destroy" уведомляющий что все ссылки на объект GtkObject освобождаются. Смотрите краткое описание.

Память для самого объекта не будет освобождена до тех пор, пока количество ссылок не достигнет 0; gtk_object_destroy() просто освобождает ссылки, она не создаёт пустого объекта.

object :

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


gtk_object_get ()

void gtk_object_get (GtkObject *object, const gchar *first_property_name, ...);

Внимание

gtk_object_get устарела и не должна использоваться во вновь создаваемом коде. Вместо неё используйте g_object_get().

Определяет свойства объекта.

object :

GtkObject.

first_property_name :

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

... :

NULL-завершённый список возвращаемых имен пар.


gtk_object_set ()

void gtk_object_set (GtkObject *object, const gchar *first_property_name, ...);

Внимание

gtk_object_set устарела и не должна использоваться во вновь создаваемом коде. Используйте вместо неё g_object_set().

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

void set_box_properties (GtkBox* box) { gtk_object_set (GTK_OBJECT (box), "homogeneous", TRUE, "spacing", 8, NULL); }

object :

GtkObject.

first_property_name :

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

... :

Значение первого аргумента, далее опционально следует большое количество пар имя/значение, завершается NULL.


gtk_object_set_data ()

void gtk_object_set_data (GtkObject *object, const gchar *key, gpointer data);

Внимание

gtk_object_set_data устарела и не должна использоваться во вновь создаваемом коде. Вместо ней используйте g_object_set_data().

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

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

object :

Объект содержащий ассоциации.

key :

Имя ключа.

data :

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


gtk_object_set_data_full ()

void gtk_object_set_data_full (GtkObject *object, const gchar *key, gpointer data, GtkDestroyNotify destroy);

Внимание

gtk_object_set_data_full устарела и не должна использоваться во вновь создаваемом коде. Вместо неё используйте g_object_set_data_full().

Тоже самое что gtk_object_set_data(), но добавляет уведомление при разрушении ассоциации, с помощью gtk_object_remove_data() или когда разрушается объект.

object :

Объект содержащий ассоциации.

key :

Имя ключа.

data :

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

destroy :

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


gtk_object_remove_data ()

void gtk_object_remove_data (GtkObject *object, const gchar *key);

Внимание

gtk_object_remove_data устарела и не должна использоваться во вновь создаваемом коде. Используйте g_object_set_data() для установки данных объекта в NULL.

Удаляет определённые данные из ассоциированных данных объекта (object_data). Последующие вызовы gtk_object_get_data() вернут NULL.

Если вы определили уничтожающий обработчик с помощью gtk_object_set_data_full(), он будет вызван.

object :

Объект поддерживающий ассоциацию.

key :

Имя ключа для ассоциации.


gtk_object_get_data ()

gpointer gtk_object_get_data (GtkObject *object, const gchar *key);

Внимание

gtk_object_get_data устарела и не должна использоваться во вновь создаваемом коде. Вместо неё используйте g_object_get_data().

Определяет именованное поле из объектной таблицы ассоциаций (object_data).

object :

объект поддерживающий ассоциации.

key :

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

Возвращает :

Данные если найдены, или NULL если нет таких данных.


gtk_object_remove_no_notify ()

void gtk_object_remove_no_notify (GtkObject *object, const gchar *key);

Внимание

gtk_object_remove_no_notify устарела и не должна использоваться во вновь создаваемом коде. Вместо неё используйте g_object_steal_data().

Удаляет данные из ассоциаций объекта (object_data), не вызывает уничтожающий обработчик.

Тоже что и gtk_object_remove_data(), за исключением игнорирования уничтожающего обработчика. Поэтому данная функция затрагивает только данные установленные с помощью gtk_object_set_data_full().

object :

объект поддерживающий ассоциации.

key :

Имя ключа для ассоциации.


gtk_object_set_user_data ()

void gtk_object_set_user_data (GtkObject *object, gpointer data);

Внимание

gtk_object_set_user_data устарела и не должна использоваться во вновь создаваемом коде. Вместо неё используйте g_object_set_data().

Ля удобства, каждый объект предлагает основной указатель пользовательских данных. Эта функция устанавливает их.

object :

Объект для установки пользовательских данных.

data :

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


gtk_object_get_user_data ()

gpointer    gtk_object_get_user_data        (GtkObject *object);

Внимание

gtk_object_get_user_data устарела и не должна использоваться во вновь создаваемом коде. Вместо неё используйте g_object_get_data().

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

Этот указатель предназначен для удобства при написании вашего приложения.

object :

объект.

Возвращает :

Область пользовательских данных для объекта.


gtk_object_add_arg_type ()

void gtk_object_add_arg_type (const gchar *arg_name, GtkType arg_type, guint arg_flags, guint arg_id);

Внимание

gtk_object_add_arg_type устарела и не должна использоваться во вновь создаваемом коде.

Устарела, вместо неё используется система свойств GObject включая GParamSpec. Добавляет новый тип аргумента для объектного класса. Обычно вызывается при регистрации нового типа объекта.

arg_name :

Полностью квалифицированное имя объекта, например GtkObject::user_data.

arg_type :

Тип аргумента.

arg_flags :

поразрядное-ИЛИ перечисления GtkArgFlags. (Является ли аргумент settable или gettable, устанавливается ли при конструировании объекта.)

arg_id :

Внутренний номер, передаётся в или из "set_arg" и "get_arg" обработчиков объекта.


gtk_object_set_data_by_id ()

void gtk_object_set_data_by_id (GtkObject *object, GQuark data_id, gpointer data);

Внимание

gtk_object_set_data_by_id устарела и не должна использоваться во вновь создаваемом коде. Вместо неё используйте g_object_set_qdata().

То же, что и gtk_object_set_data(), но вместо строки принимает GQuark, поэтому немного быстрее.

Используйте gtk_object_data_try_key() и gtk_object_data_force_id() для определения id из строки.

object :

Объект содержащий ассоциации.

data_id :

Кварк (quark) ключа.

data :

Данные ассоциированные с ключом.


gtk_object_set_data_by_id_full ()

void gtk_object_set_data_by_id_full (GtkObject *object, GQuark data_id, gpointer data, GtkDestroyNotify destroy);

Внимание

gtk_object_set_data_by_id_full устарела и не должна использоваться во вновь создаваемом коде. Вместо неё используйте g_object_set_qdata_full().

То же, что и gtk_object_set_data_full(), за исключение м использования GQuark вместо строки, что немного быстрее.

Используйте gtk_object_data_try_key() и gtk_object_data_force_id() для получения id из строки.

object :

Объект содержащий ассоциации.

data_id :

Кварк (quark) ключа.

data :

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

destroy :

Функция вызываемая при разрушении ассоциации.


gtk_object_get_data_by_id ()

gpointer gtk_object_get_data_by_id (GtkObject *object, GQuark data_id);

Внимание

gtk_object_get_data_by_id устарела и не должна использоваться во вновь создаваемом коде. Вместо неё используйте g_object_get_qdata().

То же, что и gtk_object_get_data(), за исключением использования GQuark вместо строки, что немного быстрее.

Используйте gtk_object_data_try_key() и gtk_object_data_force_id() для получения id из строки.

object :

Объект содержащий ассоциации.

data_id :

Кварк (quark) ключа.

Возвращает :

Данные если найдены, или NULL если нет таких данных.


gtk_object_remove_data_by_id ()

void gtk_object_remove_data_by_id (GtkObject *object, GQuark data_id);

Внимание

gtk_object_remove_data_by_id устарела и не должна использоваться во вновь создаваемом коде. Вместо неё используйте g_object_set_qdata() с NULL вместо данных.

Тоже самое, что и gtk_object_remove_data(), за исключением использования GQuark вместо строки, что немного быстрее.

Удаляет определённые данные из ассоциированных данных объекта. Последующие вызовы gtk_object_get_data() возвратят NULL.

Используйте gtk_object_data_try_key() и gtk_object_data_force_id() для получения id из строки.

object :

Объект содержащий ассоциации.

data_id :

Кварк (quark) ключа.


gtk_object_remove_no_notify_by_id ()

void gtk_object_remove_no_notify_by_id (GtkObject *object, GQuark key_id);

Внимание

gtk_object_remove_no_notify_by_id устарела и не должна использоваться во вновь создаваемом коде. Вместо неё используйте g_object_steal_qdata().

Тоже что и gtk_object_remove_no_notify(), за исключением использования GQuark вместо строки, что немного быстрее.

Используйте gtk_object_data_try_key() и gtk_object_data_force_id() для получения id из строки.

object :

Объект содержащий ассоциации.

key_id :

Кварк (quark) ключа.


gtk_object_data_try_key

#define gtk_object_data_try_key     g_quark_try_string

Внимание

gtk_object_data_try_key устарела и не должна использоваться во вновь создаваемом коде.

Устаревший макрос. Игнорируйте его.


gtk_object_data_force_id

#define gtk_object_data_force_id    g_quark_from_string

Внимание

gtk_object_data_force_id устарела и не должна использоваться во вновь создаваемом коде.

Устаревший макрос. Игнорируйте его.

Детали свойств

Свойство "user-data"

  "user-data"            gpointer              : Read / Write

Анонимный указатель используемых данных (Anonymous User Data Pointer).

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

Сигнал "destroy"

void user_function (GtkObject *object, gpointer user_data) : Cleanup / No recursion / No hooks

Сигнализирует об освобождении всех ссылок на GtkObject. Может привести к уничтожению объекта если освободит все ссылки.

object :

Объект получающий сигнал.

user_data :

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

Смотрите также

GObject