qulogic/talkatu

Parents 010c52bb47d3
Children 7b4adba8f7b0
Go back to only inserting text for links instead of an anchor
--- a/talkatu/talkatuactiongroup.c Sat Jul 13 09:05:59 2019 -0500
+++ b/talkatu/talkatuactiongroup.c Sat Jul 13 09:07:50 2019 -0500
@@ -331,27 +331,47 @@
GtkWidget *link_dialog = talkatu_link_dialog_new();
if(gtk_dialog_run(GTK_DIALOG(link_dialog)) == GTK_RESPONSE_ACCEPT) {
- GtkTextChildAnchor *anchor = NULL;
+ GtkTextTagTable *table = gtk_text_buffer_get_tag_table(buffer);
+ GtkTextTag *anchor, *anchor_data;
GtkTextMark *insert_mark = NULL;
GtkTextIter insert;
- gchar *url = NULL, *label = NULL;
+ 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);
}
+ /* grab our inputs from the dialog */
+ url = talkatu_link_dialog_get_url(TALKATU_LINK_DIALOG(link_dialog));
+ label = talkatu_link_dialog_get_display_text(TALKATU_LINK_DIALOG(link_dialog));
+
+ /* find the anchor tag from the table */
+ anchor = gtk_text_tag_table_lookup(table, TALKATU_TAG_ANCHOR);
+ g_return_if_fail(GTK_IS_TEXT_TAG(anchor));
+
+ /* now create an anonymous tag that will hold the url.
+ * This should probably be dedupped at some point, but pidgin 2 didn't
+ * bother with that.
+ */
+ anchor_data = gtk_text_tag_new(NULL);
+ 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);
- anchor = gtk_text_buffer_create_child_anchor(buffer, &insert);
-
- url = talkatu_link_dialog_get_url(TALKATU_LINK_DIALOG(link_dialog));
- g_object_set_data_full(G_OBJECT(anchor), "talkatu-url", url, g_free);
+ gtk_text_buffer_insert_with_tags(
+ buffer,
+ &insert,
+ label,
+ -1,
+ anchor,
+ anchor_data,
+ NULL
+ );
- label = talkatu_link_dialog_get_display_text(TALKATU_LINK_DIALOG(link_dialog));
- g_object_set_data_full(G_OBJECT(anchor), "talkatu-url-label", label, g_free);
-
- gtk_text_buffer_insert_child_anchor(buffer, &insert, anchor);
+ g_free(label);
}
gtk_widget_destroy(link_dialog);