qulogic/talkatu

8e2a435536e2
Parents 4f922f0ef658
Children 773d2c25f968
Add message as a property to TalkatuMessageActions
--- a/talkatu/meson.build Thu Aug 23 22:48:34 2018 -0500
+++ b/talkatu/meson.build Mon Aug 27 21:56:12 2018 -0500
@@ -188,6 +188,7 @@
namespace : 'Talkatu',
symbol_prefix : 'talkatu',
nsversion : '@0@.0'.format(TALKATU_MAJOR_VERSION),
+ extra_args : ['--warn-error', '--warn-all'],
install : true)
endif
--- a/talkatu/talkatumessageactions.c Thu Aug 23 22:48:34 2018 -0500
+++ b/talkatu/talkatumessageactions.c Mon Aug 27 21:56:12 2018 -0500
@@ -19,6 +19,18 @@
#include "talkatu/talkatumessageactions.h"
+typedef struct {
+ TalkatuMessage *message;
+} TalkatuMessageActionsPrivate;
+
+enum {
+ PROP_0,
+ PROP_MESSAGE,
+ N_PROPERTIES,
+};
+
+static GParamSpec *properties[N_PROPERTIES] = {NULL,};
+
/**
* SECTION:talkatumessageview
* @Title: Message View
@@ -28,18 +40,99 @@
* to format any #TalkatuBuffer via the formatting actions.
*/
-G_DEFINE_TYPE(TalkatuMessageActions, talkatu_message_actions, GTK_TYPE_BOX)
+G_DEFINE_TYPE_WITH_PRIVATE(TalkatuMessageActions, talkatu_message_actions, GTK_TYPE_BOX)
+
+/******************************************************************************
+ * Helpers
+ *****************************************************************************/
+static void
+talkatu_message_actions_set_message(TalkatuMessageActions *message_actions,
+ TalkatuMessage *message)
+{
+ TalkatuMessageActionsPrivate *priv = talkatu_message_actions_get_instance_private(message_actions);
+
+ if(priv->message) {
+ g_object_unref(G_OBJECT(priv->message));
+ }
+
+ if(message != NULL) {
+ g_return_if_fail(TALKATU_IS_MESSAGE(message));
+
+ priv->message = TALKATU_MESSAGE(g_object_ref(message));
+ } else {
+ priv->message = NULL;
+ }
+}
/******************************************************************************
* GObject Stuff
*****************************************************************************/
static void
+talkatu_message_actions_get_property(GObject *obj,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ TalkatuMessageActions *message_actions = TALKATU_MESSAGE_ACTIONS(obj);
+
+ switch(prop_id) {
+ case PROP_MESSAGE:
+ g_value_set_object(value, talkatu_message_actions_get_message(message_actions));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+talkatu_message_actions_set_property(GObject *obj,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ TalkatuMessageActions *message_actions = TALKATU_MESSAGE_ACTIONS(obj);
+
+ switch(prop_id) {
+ case PROP_MESSAGE:
+ talkatu_message_actions_set_message(message_actions, g_value_get_object(value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+talkatu_message_actions_finalize(GObject *obj) {
+ TalkatuMessageActionsPrivate *priv = talkatu_message_actions_get_instance_private(TALKATU_MESSAGE_ACTIONS(obj));
+
+ g_object_unref(G_OBJECT(priv->message));
+
+ G_OBJECT_CLASS(talkatu_message_actions_parent_class)->finalize(obj);
+}
+
+static void
talkatu_message_actions_init(TalkatuMessageActions *message_actions) {
gtk_widget_init_template(GTK_WIDGET(message_actions));
}
static void
talkatu_message_actions_class_init(TalkatuMessageActionsClass *klass) {
+ GObjectClass *obj_class = G_OBJECT_CLASS(klass);
+
+ obj_class->get_property = talkatu_message_actions_get_property;
+ obj_class->set_property = talkatu_message_actions_set_property;
+ obj_class->finalize = talkatu_message_actions_finalize;
+
+ properties[PROP_MESSAGE] = g_param_spec_object(
+ "message", "message", "The message that this widget is for",
+ G_TYPE_OBJECT,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+ );
+
+ g_object_class_install_properties(obj_class, N_PROPERTIES, properties);
+
gtk_widget_class_set_template_from_resource(
GTK_WIDGET_CLASS(klass),
"/org/bitbucket/rw_grim/talkatu/ui/messageactions.ui"
@@ -66,3 +159,22 @@
NULL
));
}
+
+/**
+ * talkatu_message_actions_get_message:
+ * @message_action: The #TalkatuMessageActions instance.
+ *
+ * Gets the #TalkatuMessage associated with @message_action.
+ *
+ * Returns: (transfer none): The #TalkatuMessage associated with @message_action.
+ */
+TalkatuMessage *
+talkatu_message_actions_get_message(TalkatuMessageActions *message_action) {
+ TalkatuMessageActionsPrivate *priv = NULL;
+
+ g_return_val_if_fail(TALKATU_IS_MESSAGE_ACTIONS(message_action), NULL);
+
+ priv = talkatu_message_actions_get_instance_private(message_action);
+
+ return priv->message;
+}
--- a/talkatu/talkatumessageactions.h Thu Aug 23 22:48:34 2018 -0500
+++ b/talkatu/talkatumessageactions.h Mon Aug 27 21:56:12 2018 -0500
@@ -68,6 +68,8 @@
GtkWidget *talkatu_message_actions_new(TalkatuMessage *message);
+TalkatuMessage *talkatu_message_actions_get_message(TalkatuMessageActions *message_action);
+
G_END_DECLS
#endif /* TALKATU_MESSAGE_ACTIONS_H */