qulogic/talkatu

The history buffer was defaulting to a normal GtkTextTagTable which was breaking stuff. This wasn't noticed before as a TalkatuTagTable is usually set up via glade.
/*
* talkatu
* Copyright (C) 2017-2019 Gary Kramlich <grim@reaperworld.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see <http://www.gnu.org/licenses/>.
*/
#include "talkatudemomessage.h"
struct _TalkatuDemoMessage {
GObject parent;
guint64 id;
GDateTime *timestamp;
TalkatuContentType content_type;
gchar *author;
gchar *contents;
};
enum {
PROP_0,
N_PROPERTIES,
/* overrides */
PROP_ID = N_PROPERTIES,
PROP_CONTENT_TYPE,
PROP_AUTHOR,
PROP_CONTENTS,
PROP_TIMESTAMP,
};
static void
talkatu_demo_message_iface_init(TalkatuMessageInterface *iface) {
}
G_DEFINE_TYPE_EXTENDED(
TalkatuDemoMessage,
talkatu_demo_message,
G_TYPE_OBJECT,
0,
G_IMPLEMENT_INTERFACE(TALKATU_TYPE_MESSAGE, talkatu_demo_message_iface_init)
);
/******************************************************************************
* Accessors
*****************************************************************************/
static guint64
talkatu_demo_message_get_id(TalkatuDemoMessage *message) {
return message->id;
}
static void
talkatu_demo_message_set_id(TalkatuDemoMessage *message, guint64 id) {
message->id = id;
g_object_notify(G_OBJECT(message), "id");
}
static GDateTime *
talkatu_demo_message_get_timestamp(TalkatuDemoMessage *message) {
return (message->timestamp) ? g_date_time_ref(message->timestamp) : NULL;
}
static void
talkatu_demo_message_set_timestamp(TalkatuDemoMessage *message, GDateTime *timestamp) {
g_clear_pointer(&message->timestamp, g_date_time_unref);
if(timestamp) {
message->timestamp = g_date_time_ref(timestamp);
}
}
static TalkatuContentType
talkatu_demo_message_get_content_type(TalkatuDemoMessage *message) {
return message->content_type;
}
static void
talkatu_demo_message_set_content_type(TalkatuDemoMessage *message, TalkatuContentType content_type) {
message->content_type = content_type;
g_object_notify(G_OBJECT(message), "content-type");
}
static gchar *
talkatu_demo_message_get_author(TalkatuDemoMessage *message) {
return message->author;
}
static void
talkatu_demo_message_set_author(TalkatuDemoMessage *message, const gchar *author) {
g_free(message->author);
message->author = g_strdup(author);
g_object_notify(G_OBJECT(message), "author");
}
static gchar *
talkatu_demo_message_get_contents(TalkatuDemoMessage *message) {
return message->contents;
}
static void
talkatu_demo_message_set_contents(TalkatuDemoMessage *message, const gchar *contents) {
g_free(message->contents);
message->contents = g_strdup(contents);
g_object_notify(G_OBJECT(message), "contents");
}
/******************************************************************************
* GObject Stuff
*****************************************************************************/
static void
talkatu_demo_message_get_property(GObject *obj,
guint prop_id,
GValue *value,
GParamSpec *pspec)
{
TalkatuDemoMessage *message = TALKATU_DEMO_MESSAGE(obj);
switch(prop_id) {
case PROP_ID:
g_value_set_uint64(value, talkatu_demo_message_get_id(message));
break;
case PROP_TIMESTAMP:
g_value_set_pointer(value, talkatu_demo_message_get_timestamp(message));
break;
case PROP_CONTENT_TYPE:
g_value_set_enum(value, talkatu_demo_message_get_content_type(message));
break;
case PROP_AUTHOR:
g_value_set_string(value, talkatu_demo_message_get_author(message));
break;
case PROP_CONTENTS:
g_value_set_string(value, talkatu_demo_message_get_contents(message));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, prop_id, pspec);
break;
}
}
static void
talkatu_demo_message_set_property(GObject *obj,
guint prop_id,
const GValue *value,
GParamSpec *pspec)
{
TalkatuDemoMessage *message = TALKATU_DEMO_MESSAGE(obj);
switch(prop_id) {
case PROP_ID:
talkatu_demo_message_set_id(message, g_value_get_uint64(value));
break;
case PROP_TIMESTAMP:
talkatu_demo_message_set_timestamp(message, g_value_get_pointer(value));
break;
case PROP_CONTENT_TYPE:
talkatu_demo_message_set_content_type(message, g_value_get_enum(value));
break;
case PROP_AUTHOR:
talkatu_demo_message_set_author(message, g_value_get_string(value));
break;
case PROP_CONTENTS:
talkatu_demo_message_set_contents(message, g_value_get_string(value));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, prop_id, pspec);
break;
}
}
static void
talkatu_demo_message_finalize(GObject *obj) {
TalkatuDemoMessage *message = TALKATU_DEMO_MESSAGE(obj);
talkatu_demo_message_set_timestamp(message, NULL);
talkatu_demo_message_set_author(message, NULL);
talkatu_demo_message_set_contents(message, NULL);
G_OBJECT_CLASS(talkatu_demo_message_parent_class)->finalize(obj);
}
static void
talkatu_demo_message_init(TalkatuDemoMessage *toolbar) {
}
static void
talkatu_demo_message_class_init(TalkatuDemoMessageClass *klass) {
GObjectClass *obj_class = G_OBJECT_CLASS(klass);
obj_class->get_property = talkatu_demo_message_get_property;
obj_class->set_property = talkatu_demo_message_set_property;
obj_class->finalize = talkatu_demo_message_finalize;
g_object_class_override_property(obj_class, PROP_ID, "id");
g_object_class_override_property(obj_class, PROP_TIMESTAMP, "timestamp");
g_object_class_override_property(obj_class, PROP_CONTENT_TYPE, "content-type");
g_object_class_override_property(obj_class, PROP_AUTHOR, "author");
g_object_class_override_property(obj_class, PROP_CONTENTS, "contents");
}
/******************************************************************************
* Public API
*****************************************************************************/
TalkatuMessage *talkatu_demo_message_new(guint64 id,
TalkatuContentType content_type,
const gchar *author,
const gchar *contents)
{
GObject *obj = NULL;
GDateTime *timestamp = g_date_time_new_now_local();
obj = g_object_new(
TALKATU_TYPE_DEMO_MESSAGE,
"id", id,
"timestamp", timestamp,
"content-type", content_type,
"author", author,
"contents", contents,
NULL
);
g_date_time_unref(timestamp);
return TALKATU_MESSAGE(obj);
}