--- a/talkatu/talkatuactiongroup.c Thu Sep 20 22:25:55 2018 -0500
+++ b/talkatu/talkatuactiongroup.c Mon Sep 24 22:10:54 2018 -0500
@@ -89,20 +89,98 @@
+static GParamSpec *properties[N_PROPERTIES] = {NULL,}; -static GParamSpec *properties[N_PROPERTIES] = {NULL,};
+static guint signals[LAST_SIGNAL] = {0, }; G_DEFINE_TYPE_WITH_PRIVATE(TalkatuActionGroup, talkatu_action_group, G_TYPE_SIMPLE_ACTION_GROUP)
/******************************************************************************
+ *****************************************************************************/ +talkatu_action_group_set_buffer(TalkatuActionGroup *ag, GtkTextBuffer *buffer) { + TalkatuActionGroupPrivate *priv = talkatu_action_group_get_instance_private(ag); + g_object_unref(priv->buffer); + priv->buffer = g_object_ref(buffer); +talkatu_action_group_emit_action_activated(TalkatuActionGroup *ag, GAction *action) { + g_object_get(G_OBJECT(action), "name", &name, NULL); + g_signal_emit(ag, signals[SIG_ACTION_ACTIVATED], 0, action, name); +talkatu_action_group_action_activated(GSimpleAction *action, + TalkatuActionGroup *ag = TALKATU_ACTION_GROUP(data); + talkatu_action_group_emit_action_activated(ag, G_ACTION(action)); +/****************************************************************************** *****************************************************************************/
+talkatu_action_group_action_added(GActionGroup *ag, + GAction *action = g_action_map_lookup_action(G_ACTION_MAP(ag), name); + guint sig_id = g_signal_connect( + G_CALLBACK(talkatu_action_group_action_activated), + "talkatu-action-group-activate-signal-id", + GUINT_TO_POINTER(sig_id) +talkatu_action_group_action_removed(GActionGroup *ag, + GAction *action = g_action_map_lookup_action(G_ACTION_MAP(ag), name); + guint sig_id = GPOINTER_TO_UINT(g_object_get_data( + "talkatu-action-group-activate-signal-id" + g_signal_handler_disconnect(G_OBJECT(action), sig_id); talkatu_action_activate(GSimpleAction *action,
g_message(_("activating action %s"), g_action_get_name(G_ACTION(action)));
@@ -202,20 +280,6 @@
/******************************************************************************
- *****************************************************************************/
-talkatu_action_group_set_buffer(TalkatuActionGroup *ag, GtkTextBuffer *buffer) {
- TalkatuActionGroupPrivate *priv = talkatu_action_group_get_instance_private(ag);
- g_object_unref(priv->buffer);
- priv->buffer = g_object_ref(buffer);
-/******************************************************************************
*****************************************************************************/
@@ -309,6 +373,20 @@
+ G_CALLBACK(talkatu_action_group_action_added), + G_CALLBACK(talkatu_action_group_action_removed), g_action_map_add_action_entries(G_ACTION_MAP(ag), entries, G_N_ELEMENTS(entries), priv->buffer);
/* disable all of the actions by default */
@@ -333,6 +411,7 @@
obj_class->set_property = talkatu_action_group_set_property;
obj_class->finalize = talkatu_action_group_finalize;
+ /* setup our properties */ properties[PROP_BUFFER] = g_param_spec_object(
"buffer", "buffer", "The buffer to work on",
@@ -340,6 +419,32 @@
g_object_class_install_properties(obj_class, N_PROPERTIES, properties);
+ /* setup our signals */ + * TalkatuActionGroup::action-activated + * @talkatuactiongroup: The #TalkatuActionGroup instance. + * @arg1: The #GAction that was activated. + * @user_data: User supplied data. + * Emitted when one of the actions in @talkatuactiongroup are activated. + * This is a convenience signal so people don't have to connect to every + signals[SIG_ACTION_ACTIVATED] = g_signal_new( + G_TYPE_FROM_CLASS(klass), + G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, + G_STRUCT_OFFSET(TalkatuActionGroupClass, action_activated), /******************************************************************************
--- a/talkatu/talkatuactiongroup.h Thu Sep 20 22:25:55 2018 -0500
+++ b/talkatu/talkatuactiongroup.h Mon Sep 24 22:10:54 2018 -0500
@@ -50,6 +50,8 @@
struct _TalkatuActionGroupClass {
GSimpleActionGroupClass parent;
+ void (*action_activated)(TalkatuActionGroup *ag, GAction *action, const gchar *name); void (*_talkatu_reserved1)(void);
void (*_talkatu_reserved2)(void);
void (*_talkatu_reserved3)(void);
--- a/talkatu/talkatubuffer.c Thu Sep 20 22:25:55 2018 -0500
+++ b/talkatu/talkatubuffer.c Mon Sep 24 22:10:54 2018 -0500
@@ -450,7 +450,7 @@
g_return_val_if_fail(klass != NULL, NULL);
g_return_val_if_fail(klass->create_action_group != NULL, NULL);
- klass->create_action_group(buffer);
+ action_group = klass->create_action_group(buffer); talkatu_buffer_set_action_group(buffer, action_group);
g_object_unref(G_OBJECT(action_group));