GtkActivatable
GtkActivatable — Интерфейс для активируемых виджетов
Функции
Свойства
| GtkAction * | related-action | Чтение / Запись |
| gboolean | use-action-appearance | Чтение / Запись |
Типы и значения
Иерархия объектов
GInterface ╰── GtkActivatable
Предварительные условия
GtkActivatable требует GObject.
Известные реализации
GtkActivatable реализуется в GtkButton, GtkCheckButton, GtkCheckMenuItem, GtkColorButton, GtkFontButton, GtkImageMenuItem, GtkLinkButton, GtkLockButton, GtkMenuButton, GtkMenuItem, GtkMenuToolButton, GtkModelButton, GtkRadioButton, GtkRadioMenuItem, GtkRadioToolButton, GtkRecentChooserMenu, GtkScaleButton, GtkSeparatorMenuItem, GtkSeparatorToolItem, GtkSwitch, GtkTearoffMenuItem, GtkToggleButton, GtkToggleToolButton, GtkToolButton, GtkToolItem и GtkVolumeButton.
Включаемые файлы
#include <gtk/gtk.h>
Описание
Активируемые виджеты могут быть подключены к GtkAction и отображают состояние своего действия. GtkActivatable также может предоставлять обратную связь через своё действие, так как они отвечают за активацию связанных действий.
Реализация GtkActivatable
При расширении класса, который уже является GtkActivatable, необходимо только реализовать методы GtkActivatable->sync_action_properties() и GtkActivatable->update() и передать их родительской реализации. Однако при введении нового класса GtkActivatable, свойства “related-action” и “use-action-appearance” должны обрабатываться реализатором. Обработка этих свойств в основном сводится к установке указателя на действие и флага булевого значения в экземпляре и вызову gtk_activatable_do_set_related_action() и gtk_activatable_sync_action_properties() в соответствующие моменты.
Фрагмент класса, реализующего GtkActivatable
enum { ... PROP_ACTIVATABLE_RELATED_ACTION, PROP_ACTIVATABLE_USE_ACTION_APPEARANCE } struct _FooBarPrivate { ... GtkAction *action; gboolean use_action_appearance; }; ... static void foo_bar_activatable_interface_init (GtkActivatableIface *iface); static void foo_bar_activatable_update (GtkActivatable *activatable, GtkAction *action, const gchar *property_name); static void foo_bar_activatable_sync_action_properties (GtkActivatable *activatable, GtkAction *action); ... static void foo_bar_class_init (FooBarClass *klass) { ... g_object_class_override_property (gobject_class, PROP_ACTIVATABLE_RELATED_ACTION, "related-action"); g_object_class_override_property (gobject_class, PROP_ACTIVATABLE_USE_ACTION_APPEARANCE, "use-action-appearance"); ... } static void foo_bar_activatable_interface_init (GtkActivatableIface *iface) { iface->update = foo_bar_activatable_update; iface->sync_action_properties = foo_bar_activatable_sync_action_properties; } ... Break the reference using gtk_activatable_do_set_related_action()... static void foo_bar_dispose (GObject *object) { FooBar *bar = FOO_BAR (object); FooBarPrivate *priv = FOO_BAR_GET_PRIVATE (bar); ... if (priv->action) { gtk_activatable_do_set_related_action (GTK_ACTIVATABLE (bar), NULL); priv->action = NULL; } G_OBJECT_CLASS (foo_bar_parent_class)->dispose (object); } ... Handle the “related-action” and “use-action-appearance” properties ... static void foo_bar_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { FooBar *bar = FOO_BAR (object); FooBarPrivate *priv = FOO_BAR_GET_PRIVATE (bar); switch (prop_id) { ... case PROP_ACTIVATABLE_RELATED_ACTION: foo_bar_set_related_action (bar, g_value_get_object (value)); break; case PROP_ACTIVATABLE_USE_ACTION_APPEARANCE: foo_bar_set_use_action_appearance (bar, g_value_get_boolean (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } } static void foo_bar_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { FooBar *bar = FOO_BAR (object); FooBarPrivate *priv = FOO_BAR_GET_PRIVATE (bar); switch (prop_id) { ... case PROP_ACTIVATABLE_RELATED_ACTION: g_value_set_object (value, priv->action); break; case PROP_ACTIVATABLE_USE_ACTION_APPEARANCE: g_value_set_boolean (value, priv->use_action_appearance); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } } static void foo_bar_set_use_action_appearance (FooBar *bar, gboolean use_appearance) { FooBarPrivate *priv = FOO_BAR_GET_PRIVATE (bar); if (priv->use_action_appearance != use_appearance) { priv->use_action_appearance = use_appearance; gtk_activatable_sync_action_properties (GTK_ACTIVATABLE (bar), priv->action); } } ... call gtk_activatable_do_set_related_action() and then assign the action pointer, no need to reference the action here since gtk_activatable_do_set_related_action() already holds a reference here for you... static void foo_bar_set_related_action (FooBar *bar, GtkAction *action) { FooBarPrivate *priv = FOO_BAR_GET_PRIVATE (bar); if (priv->action == action) return; gtk_activatable_do_set_related_action (GTK_ACTIVATABLE (bar), action); priv->action = action; } ... Selectively reset and update activatable depending on the use-action-appearance property ... static void gtk_button_activatable_sync_action_properties (GtkActivatable *activatable, GtkAction *action) { GtkButtonPrivate *priv = GTK_BUTTON_GET_PRIVATE (activatable); if (!action) return; if (gtk_action_is_visible (action)) gtk_widget_show (GTK_WIDGET (activatable)); else gtk_widget_hide (GTK_WIDGET (activatable)); gtk_widget_set_sensitive (GTK_WIDGET (activatable), gtk_action_is_sensitive (action)); ... if (priv->use_action_appearance) { if (gtk_action_get_stock_id (action)) foo_bar_set_stock (button, gtk_action_get_stock_id (action)); else if (gtk_action_get_label (action)) foo_bar_set_label (button, gtk_action_get_label (action)); ... } } static void foo_bar_activatable_update (GtkActivatable *activatable, GtkAction *action, const gchar *property_name) { FooBarPrivate *priv = FOO_BAR_GET_PRIVATE (activatable); if (strcmp (property_name, "visible") == 0) { if (gtk_action_is_visible (action)) gtk_widget_show (GTK_WIDGET (activatable)); else gtk_widget_hide (GTK_WIDGET (activatable)); } else if (strcmp (property_name, "sensitive") == 0) gtk_widget_set_sensitive (GTK_WIDGET (activatable), gtk_action_is_sensitive (action)); ... if (!priv->use_action_appearance) return; if (strcmp (property_name, "stock-id") == 0) foo_bar_set_stock (button, gtk_action_get_stock_id (action)); else if (strcmp (property_name, "label") == 0) foo_bar_set_label (button, gtk_action_get_label (action)); ... }
Функции
gtk_activatable_do_set_related_action ()
void gtk_activatable_do_set_related_action (GtkActivatable *activatable,GtkAction *action);
gtk_activatable_do_set_related_action устарело с версии 3.10 и не должно использоваться в новом коде.
Это вспомогательная функция для реализаторов GtkActivatable.
При реализации GtkActivatable вы должны вызвать эту функцию при обработке изменений свойства «related-action», а также использовать её для разрыва ссылок в GObject->dispose().
Эта функция добавляет ссылку на текущее установленное связанное действие, а также гарантирует, что метод GtkActivatable->update() вызывается при изменении свойств связанного GtkAction, и регистрируется в списке прокси-сервисов действия.
Обратите внимание, что следует вызвать эту функцию до установки локальной копии свойства GtkAction, так как эта функция использует
gtk_activatable_get_related_action()для получения предыдущего действия.
Параметры
activatable | объект GtkActivatable | |
action | объект GtkAction для установки |
С версии: 2.16
gtk_activatable_get_related_action ()
GtkAction *
gtk_activatable_get_related_action (GtkActivatable *activatable); gtk_activatable_get_related_action устарело с версии 3.10 и не должно использоваться в новом коде.
Возвращает связанное GtkAction для activatable .
Параметры
activatable | объект GtkActivatable |
С версии: 2.16
gtk_activatable_get_use_action_appearance ()
gboolean
gtk_activatable_get_use_action_appearance
(GtkActivatable *activatable); gtk_activatable_get_use_action_appearance устарело с версии 3.10 и не должно использоваться в новом коде.
Определяет, должен ли этот активируемый элемент сбросить макет и вид при установке связанного действия или при изменении вида действия.
Параметры
activatable | объект GtkActivatable |
Возвращаемое значение
использует ли activatable внешний вид своих действий.
С версии: 2.16
gtk_activatable_sync_action_properties ()
void gtk_activatable_sync_action_properties (GtkActivatable *activatable,GtkAction *action);
gtk_activatable_sync_action_properties устарело с версии 3.10 и не должно использоваться в новом коде.
Вызывается для полной обновления активируемого элемента. Это вызывается внутренне при установке или снятии свойства «related-action» и классом-реализатором, когда изменяется «use-action-appearance».
Параметры
activatable | объект GtkActivatable | |
action | [allow-none] |
С версии: 2.16
gtk_activatable_set_related_action ()
void gtk_activatable_set_related_action (GtkActivatable *activatable,GtkAction *action);
gtk_activatable_set_related_action устарело с версии 3.10 и не должно использоваться в новом коде.
Устанавливает связанное действие для объекта activatable.
Реализаторам GtkActivatable нужно обработать свойство «related-action» и вызвать
gtk_activatable_do_set_related_action()при его изменении.
Параметры
activatable | объект GtkActivatable | |
action | объект GtkAction для установки |
С версии: 2.16
gtk_activatable_set_use_action_appearance ()
void gtk_activatable_set_use_action_appearance (GtkActivatable *activatable,gboolean use_appearance);
gtk_activatable_set_use_action_appearance устарело с версии 3.10 и не должно использоваться в новом коде.
Устанавливает, должен ли этот активируемый элемент сбросить макет и вид при установке связанного действия или при изменении вида действия.
Реализаторам GtkActivatable нужно обработать свойство «use-action-appearance» и вызвать
gtk_activatable_sync_action_properties()для обновленияactivatable, если это необходимо.
Параметры
activatable | объект GtkActivatable | |
use_appearance | использовать ли вид действия |
С версии: 2.16
Типы и значения
GtkActivatable
typedef struct _GtkActivatable GtkActivatable;
struct GtkActivatableIface
struct GtkActivatableIface {
/* virtual table */
void (* update) (GtkActivatable *activatable,
GtkAction *action,
const gchar *property_name);
void (* sync_action_properties) (GtkActivatable *activatable,
GtkAction *action);
};
GtkActivatableIface устарело начиная с версии 3.10 и не должно использоваться в новых кодах.
Этот метод может быть вызван с действием
NULLв определённые моменты.
Члены
| Вызывается для обновления activatable, когда меняются свойства связанного действия. Вы должны проверять свойство “use-action-appearance”, чтобы применять только те свойства действия, которые предназначены для изменения внешнего вида. | |
| Вызывается для полного обновления activatable. Это вызывается внутренне, когда свойство “related-action” устанавливается или снимается, и разработчиком, когда меняется свойство “use-action-appearance”. |
С: 2.16
Подробные сведения о свойствах
Свойство “related-action”
“related-action” GtkAction *
Действие, которое активирует этот activatable и получает обновления для различных состояний и, возможно, внешнего вида.
Реализаторам GtkActivatable необходимо обработать это свойство и вызвать
gtk_activatable_do_set_related_action(), когда оно изменяется.
GtkActivatable:related-action устарело начиная с версии 3.10 и не должно использоваться в новых кодах.
Флаги: Чтение / Запись
С: 2.16
Свойство “use-action-appearance”
“use-action-appearance” gboolean
Указывает, должен ли этот activatable перестроить свой макет и внешний вид при установке связанного действия или при изменении внешнего вида действия.
Обратитесь к документации GtkAction для того, чтобы узнать, какие свойства следует игнорировать GtkActivatable, когда это свойство имеет значение FALSE.
Реализаторам GtkActivatable необходимо обработать это свойство и вызвать
gtk_activatable_sync_action_properties()для виджета activatable при его изменении.
GtkActivatable:use-action-appearance устарело начиная с версии 3.10 и не должно использоваться в новых кодах.
Флаги: Чтение / Запись
Значение по умолчанию: TRUE
С: 2.16
© 2005–2020 The GNOME Project
Licensed under the GNU Lesser General Public License version 2.1 or later.
https://developer.gnome.org/gtk3/3.22/GtkActivatable.html