talkatu/talkatu

Parents cad105df9c74
Children e57fd097f3aa
Pass the action group to the action callbacks instead of just the buffer.
--- a/talkatu/talkatuactiongroup.c Thu May 07 21:32:25 2020 -0500
+++ b/talkatu/talkatuactiongroup.c Thu May 07 21:58:00 2020 -0500
@@ -136,11 +136,9 @@
talkatu_action_group_set_buffer(TalkatuActionGroup *ag, GtkTextBuffer *buffer) {
TalkatuActionGroupPrivate *priv = talkatu_action_group_get_instance_private(ag);
- if(priv->buffer) {
- g_object_unref(priv->buffer);
- }
+ g_return_if_fail(TALKATU_IS_BUFFER(buffer));
- priv->buffer = g_object_ref(buffer);
+ g_set_object(&priv->buffer, buffer);
}
static void
@@ -231,20 +229,23 @@
}
static void
-talkatu_action_format_toggle(GSimpleAction *action,
- GVariant *state,
- gpointer data)
+talkatu_action_format_toggle(GSimpleAction *action, GVariant *state,
+ gpointer data)
{
- GtkTextBuffer *buffer = GTK_TEXT_BUFFER(data);
+ TalkatuActionGroup *ag = TALKATU_ACTION_GROUP(data);
+ TalkatuActionGroupPrivate *priv = NULL;
GtkTextIter start, end;
- TalkatuBufferStyle style = talkatu_buffer_get_style(TALKATU_BUFFER(buffer));
+ TalkatuBufferStyle style;
gboolean apply = FALSE;
+ priv = talkatu_action_group_get_instance_private(ag);;
+ style = talkatu_buffer_get_style(TALKATU_BUFFER(priv->buffer));
+
if(style == TALKATU_BUFFER_STYLE_WHOLE) {
- gtk_text_buffer_get_bounds(buffer, &start, &end);
+ gtk_text_buffer_get_bounds(priv->buffer, &start, &end);
apply = TRUE;
} else {
- if(gtk_text_buffer_get_selection_bounds(buffer, &start, &end)) {
+ if(gtk_text_buffer_get_selection_bounds(priv->buffer, &start, &end)) {
apply = TRUE;
}
}
@@ -259,65 +260,60 @@
return;
}
- gtk_text_buffer_begin_user_action(buffer);
+ gtk_text_buffer_begin_user_action(priv->buffer);
if(g_variant_get_boolean(state)) {
- gtk_text_buffer_apply_tag_by_name(buffer, tag_name, &start, &end);
+ gtk_text_buffer_apply_tag_by_name(priv->buffer, tag_name, &start, &end);
} else {
- gtk_text_buffer_remove_tag_by_name(buffer, tag_name, &start, &end);
+ gtk_text_buffer_remove_tag_by_name(priv->buffer, tag_name, &start, &end);
}
- gtk_text_buffer_end_user_action(buffer);
+ gtk_text_buffer_end_user_action(priv->buffer);
}
g_simple_action_set_state(action, state);
}
static void
-talkatu_action_reset_activate(GSimpleAction *act,
- GVariant *parameter,
- gpointer data)
+talkatu_action_reset_activate(GSimpleAction *act, GVariant *parameter,
+ gpointer data)
{
- GtkTextBuffer *buffer = GTK_TEXT_BUFFER(data);
- GSimpleActionGroup *ag = NULL;
+ TalkatuActionGroup *ag = TALKATU_ACTION_GROUP(data);
+ TalkatuActionGroupPrivate *priv = NULL;
GtkTextIter start, end;
TalkatuBufferStyle style;
gchar **actions = NULL, **action = NULL;
- g_return_if_fail(TALKATU_IS_BUFFER(buffer));
-
- style = talkatu_buffer_get_style(TALKATU_BUFFER(buffer));
- ag = talkatu_buffer_get_action_group(TALKATU_BUFFER(buffer));
-
- g_return_if_fail(TALKATU_IS_ACTION_GROUP(ag));
+ priv = talkatu_action_group_get_instance_private(ag);;
+ style = talkatu_buffer_get_style(TALKATU_BUFFER(priv->buffer));
/* if there's no selection or this is a whole buffer format, select the
* whole buffer.
*/
- if(!gtk_text_buffer_get_selection_bounds(buffer, &start, &end) || style == TALKATU_BUFFER_STYLE_WHOLE) {
- gtk_text_buffer_get_bounds(buffer, &start, &end);
- gtk_text_buffer_select_range(buffer, &start, &end);
+ if(!gtk_text_buffer_get_selection_bounds(priv->buffer, &start, &end) || style == TALKATU_BUFFER_STYLE_WHOLE) {
+ gtk_text_buffer_get_bounds(priv->buffer, &start, &end);
+ gtk_text_buffer_select_range(priv->buffer, &start, &end);
}
/* run through all of the talkatu tags and remove them from the
* selection.
*/
- gtk_text_buffer_remove_tag_by_name(buffer, TALKATU_TAG_BOLD, &start, &end);
- gtk_text_buffer_remove_tag_by_name(buffer, TALKATU_TAG_ITALIC, &start, &end);
- gtk_text_buffer_remove_tag_by_name(buffer, TALKATU_TAG_UNDERLINE, &start, &end);
- gtk_text_buffer_remove_tag_by_name(buffer, TALKATU_TAG_STRIKETHROUGH, &start, &end);
- gtk_text_buffer_remove_tag_by_name(buffer, TALKATU_TAG_SUBSCRIPT, &start, &end);
- gtk_text_buffer_remove_tag_by_name(buffer, TALKATU_TAG_SUPERSCRIPT, &start, &end);
- gtk_text_buffer_remove_tag_by_name(buffer, TALKATU_TAG_PRE, &start, &end);
- gtk_text_buffer_remove_tag_by_name(buffer, TALKATU_TAG_CODE, &start, &end);
- gtk_text_buffer_remove_tag_by_name(buffer, TALKATU_TAG_SEARCH, &start, &end);
- gtk_text_buffer_remove_tag_by_name(buffer, TALKATU_TAG_H1, &start, &end);
- gtk_text_buffer_remove_tag_by_name(buffer, TALKATU_TAG_H2, &start, &end);
- gtk_text_buffer_remove_tag_by_name(buffer, TALKATU_TAG_H3, &start, &end);
- gtk_text_buffer_remove_tag_by_name(buffer, TALKATU_TAG_H4, &start, &end);
- gtk_text_buffer_remove_tag_by_name(buffer, TALKATU_TAG_H5, &start, &end);
- gtk_text_buffer_remove_tag_by_name(buffer, TALKATU_TAG_H6, &start, &end);
- gtk_text_buffer_remove_tag_by_name(buffer, TALKATU_TAG_ANCHOR, &start, &end);
+ gtk_text_buffer_remove_tag_by_name(priv->buffer, TALKATU_TAG_BOLD, &start, &end);
+ gtk_text_buffer_remove_tag_by_name(priv->buffer, TALKATU_TAG_ITALIC, &start, &end);
+ gtk_text_buffer_remove_tag_by_name(priv->buffer, TALKATU_TAG_UNDERLINE, &start, &end);
+ gtk_text_buffer_remove_tag_by_name(priv->buffer, TALKATU_TAG_STRIKETHROUGH, &start, &end);
+ gtk_text_buffer_remove_tag_by_name(priv->buffer, TALKATU_TAG_SUBSCRIPT, &start, &end);
+ gtk_text_buffer_remove_tag_by_name(priv->buffer, TALKATU_TAG_SUPERSCRIPT, &start, &end);
+ gtk_text_buffer_remove_tag_by_name(priv->buffer, TALKATU_TAG_PRE, &start, &end);
+ gtk_text_buffer_remove_tag_by_name(priv->buffer, TALKATU_TAG_CODE, &start, &end);
+ gtk_text_buffer_remove_tag_by_name(priv->buffer, TALKATU_TAG_SEARCH, &start, &end);
+ gtk_text_buffer_remove_tag_by_name(priv->buffer, TALKATU_TAG_H1, &start, &end);
+ gtk_text_buffer_remove_tag_by_name(priv->buffer, TALKATU_TAG_H2, &start, &end);
+ gtk_text_buffer_remove_tag_by_name(priv->buffer, TALKATU_TAG_H3, &start, &end);
+ gtk_text_buffer_remove_tag_by_name(priv->buffer, TALKATU_TAG_H4, &start, &end);
+ gtk_text_buffer_remove_tag_by_name(priv->buffer, TALKATU_TAG_H5, &start, &end);
+ gtk_text_buffer_remove_tag_by_name(priv->buffer, TALKATU_TAG_H6, &start, &end);
+ gtk_text_buffer_remove_tag_by_name(priv->buffer, TALKATU_TAG_ANCHOR, &start, &end);
/* now run through all the actions and deactive any that are active by
* activating them.
@@ -420,23 +416,25 @@
}
static void
-talkatu_action_insert_link(GSimpleAction *action,
- GVariant *parameter,
- gpointer user_data)
+talkatu_action_insert_link(GSimpleAction *action, GVariant *parameter,
+ gpointer data)
{
- GtkTextBuffer *buffer = GTK_TEXT_BUFFER(user_data);
+ TalkatuActionGroup *ag = TALKATU_ACTION_GROUP(data);
+ TalkatuActionGroupPrivate *priv = NULL;
GtkWidget *link_dialog = talkatu_link_dialog_new();
+ priv = talkatu_action_group_get_instance_private(ag);
+
if(gtk_dialog_run(GTK_DIALOG(link_dialog)) == GTK_RESPONSE_ACCEPT) {
- GtkTextTagTable *table = gtk_text_buffer_get_tag_table(buffer);
+ GtkTextTagTable *table = gtk_text_buffer_get_tag_table(priv->buffer);
GtkTextTag *anchor, *anchor_data;
GtkTextMark *insert_mark = NULL;
GtkTextIter insert;
gchar *label = NULL, *url = NULL;
/* if any text is selected, delete it */
- if(gtk_text_buffer_get_has_selection(buffer)) {
- gtk_text_buffer_delete_selection(buffer, TRUE, TRUE);
+ if(gtk_text_buffer_get_has_selection(priv->buffer)) {
+ gtk_text_buffer_delete_selection(priv->buffer, TRUE, TRUE);
}
/* grab our inputs from the dialog */
@@ -455,11 +453,11 @@
g_object_set_data_full(G_OBJECT(anchor_data), "talkatu-anchor-url", url, g_free);
gtk_text_tag_table_add(table, anchor_data);
- insert_mark = gtk_text_buffer_get_insert(buffer);
- gtk_text_buffer_get_iter_at_mark(buffer, &insert, insert_mark);
+ insert_mark = gtk_text_buffer_get_insert(priv->buffer);
+ gtk_text_buffer_get_iter_at_mark(priv->buffer, &insert, insert_mark);
gtk_text_buffer_insert_with_tags(
- buffer,
+ priv->buffer,
&insert,
label,
-1,
@@ -517,10 +515,7 @@
talkatu_action_group_finalize(GObject *obj) {
TalkatuActionGroupPrivate *priv = talkatu_action_group_get_instance_private(TALKATU_ACTION_GROUP(obj));
- if(priv->buffer) {
- g_object_unref(priv->buffer);
- priv->buffer = NULL;
- }
+ g_clear_object(&priv->buffer);;
G_OBJECT_CLASS(talkatu_action_group_parent_class)->finalize(obj);
}
@@ -528,7 +523,6 @@
static void
talkatu_action_group_constructed(GObject *object) {
TalkatuActionGroup *ag = TALKATU_ACTION_GROUP(object);
- TalkatuActionGroupPrivate *priv = talkatu_action_group_get_instance_private(ag);
gint i;
GActionEntry entries[] = {
{
@@ -585,7 +579,8 @@
NULL
);
- g_action_map_add_action_entries(G_ACTION_MAP(ag), entries, G_N_ELEMENTS(entries), priv->buffer);
+ g_action_map_add_action_entries(G_ACTION_MAP(ag), entries,
+ G_N_ELEMENTS(entries), ag);
/* disable all of the actions by default */
for(i = 0; i < G_N_ELEMENTS(entries); i++) {