Indeed I tried your code from Aug 15 and if you insert a character at the beginning of the 3rd or 5th line, the indent/margin disappears. Then if you backspace over that inserted character, the indent/margin re-appears. I tried this in <3.20 and 3.22. Would you consider this a bug? I've never reported a bug to GTK. What is the basic procedure?
On Tue, Aug 15, 2017 at 2:38 PM, Doug McCasland <do...@bravoecho.net> wrote: > Indeed, gtk_text_buffer_insert_with_tags_by_name() does what it says. > What I was talking about was (in some future Textview) applying the tag to > an iter, then whenever the insert point was on that iter, it would inherit > the tag properties set there. So typing at that point gets the > formatting. > > I don't have my code in front of me, but as I recall the jumpy-cursor > thing happened with this: > > 1. Insert some text in a line. > 2. Apply indent 50px to whole line. The line will be indented on the > screen. > 3. Start typing at the beginning of line, which will not inherit the > indent tag. The indent will disappear on the screen. > 4. Move the cursor to the region with the applied indent -- the indent > comes back. > > > > On Tue, Aug 15, 2017 at 2:27 PM, <cecas...@aol.com> wrote: > >> >> Have you tried gtk_text_buffer_insert_with_tags_by_name() to insert text >> with a tag at an iter? >> >> What tag combo do you use to get the cursor to bounce around? If I test >> having two indent tags on the same line, the first one applied wins out. >> This is what I tested with. >> >> Eric >> >> >> /* >> gcc -Wall move_cursor1.c -o move_cursor1 `pkg-config --cflags --libs >> gtk+-3.0` >> Tested on GTK3.18 and Ubuntu16.04 >> */ >> >> #include<gtk/gtk.h> >> >> static void get_style(GtkTextView *tv, GtkMovementStep step, gint count, >> gboolean extend, gpointer *user_data) >> { >> static int i=1; >> GtkTextIter start; >> GtkTextMark *mark; >> GtkTextBuffer *buf; >> >> buf=gtk_text_view_get_buffer(GTK_TEXT_VIEW(tv)); >> >> mark=gtk_text_buffer_get_insert(buf); >> gtk_text_buffer_get_iter_at_mark (buf, &start, mark); >> g_print("Iter %i\n", gtk_text_iter_get_offset(&start)); >> >> GSList *tlist=NULL; >> GSList *p=NULL; >> tlist=gtk_text_iter_get_tags(&start); >> g_print("%i. List %p p %p\n", i, tlist, p); >> i++; >> for(p=tlist;p;p=p->next) >> { >> gchar *string=NULL; >> g_object_get(G_OBJECT(p->data), "name", &string, NULL); >> g_print("p %p %s\n", p, string); >> g_free(string); >> } >> >> g_print("List %p\n", tlist); >> if(tlist!=NULL) g_slist_free(tlist); >> } >> int main (int argc, char *argv[]) >> { >> gtk_init(&argc, &argv); >> >> GtkWidget *window=gtk_window_new(GTK_WINDOW_TOPLEVEL); >> gtk_window_set_title(GTK_WINDOW(window), "Move Cursor"); >> gtk_window_set_default_size(GTK_WINDOW(window), 300, 200); >> gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); >> g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL); >> >> GtkWidget *textview=gtk_text_view_new(); >> gtk_widget_set_vexpand(textview, TRUE); >> gtk_widget_set_hexpand(textview, TRUE); >> g_signal_connect(textview, "move-cursor", G_CALLBACK(get_style), >> NULL); >> >> GtkTextBuffer *buffer=gtk_text_view_get_buff >> er(GTK_TEXT_VIEW(textview)); >> gtk_text_buffer_create_tag(buffer, "ital", "style", >> PANGO_STYLE_ITALIC, NULL); >> gtk_text_buffer_create_tag(buffer, "bold", "weight", >> PANGO_WEIGHT_BOLD, NULL); >> gtk_text_buffer_create_tag(buffer, "uline", "underline", >> PANGO_UNDERLINE_SINGLE, NULL); >> gtk_text_buffer_create_tag(buffer, "indent", "indent", 20, NULL); >> gtk_text_buffer_create_tag(buffer, "indent2", "indent", 40, NULL); >> gtk_text_buffer_create_tag(buffer, "left-margin", "left-margin", 20, >> NULL); >> gtk_text_buffer_create_tag(buffer, "left-margin2", "left-margin", >> 40, NULL); >> >> GtkTextIter iter; >> gtk_text_buffer_get_start_iter(buffer, &iter); >> gtk_text_buffer_insert_with_tags_by_name(buffer, &iter, "ital ", -1, >> "ital", NULL); >> gtk_text_buffer_get_end_iter(buffer, &iter); >> gtk_text_buffer_insert_with_tags_by_name(buffer, &iter, "bold ", -1, >> "bold", NULL); >> gtk_text_buffer_get_end_iter(buffer, &iter); >> //Check a newline for a tag. >> gtk_text_buffer_insert_with_tags_by_name(buffer, &iter, "uline \n", >> -1, "uline", NULL); >> gtk_text_buffer_get_end_iter(buffer, &iter); >> gtk_text_buffer_insert_with_tags_by_name(buffer, &iter, "all\n", -1, >> "ital", "bold", "uline", NULL); >> //Check indents in the same line. >> gtk_text_buffer_get_end_iter(buffer, &iter); >> gtk_text_buffer_insert_with_tags_by_name(buffer, &iter, "indent ", >> -1, "indent", NULL); >> gtk_text_buffer_get_end_iter(buffer, &iter); >> gtk_text_buffer_insert_with_tags_by_name(buffer, &iter, "indent2\n", >> -1, "indent2", NULL); >> gtk_text_buffer_get_end_iter(buffer, &iter); >> gtk_text_buffer_insert_with_tags_by_name(buffer, &iter, "indent2\n", >> -1, "indent2", NULL); >> //Check left-margin in the same line. >> gtk_text_buffer_get_end_iter(buffer, &iter); >> gtk_text_buffer_insert_with_tags_by_name(buffer, &iter, "left-margin >> ", -1, "left-margin", NULL); >> gtk_text_buffer_get_end_iter(buffer, &iter); >> gtk_text_buffer_insert_with_tags_by_name(buffer, &iter, >> "left-margin2\n", -1, "left-margin2", NULL); >> gtk_text_buffer_get_end_iter(buffer, &iter); >> gtk_text_buffer_insert_with_tags_by_name(buffer, &iter, >> "left-margin2", -1, "left-margin2", NULL); >> >> GtkWidget *grid=gtk_grid_new(); >> gtk_container_set_border_width(GTK_CONTAINER(grid), 8); >> gtk_grid_attach(GTK_GRID(grid), textview, 0, 0, 1, 1); >> >> gtk_container_add(GTK_CONTAINER(window), grid); >> >> gtk_widget_show_all(window); >> >> gtk_main(); >> >> return 0; >> } > > > > > -- > Doug McCasland <do...@bravoecho.net> > -- Doug McCasland <do...@bravoecho.net> _______________________________________________ gtk-app-devel-list mailing list gtk-app-devel-list@gnome.org https://mail.gnome.org/mailman/listinfo/gtk-app-devel-list