gtksourceview отменить, отменить больше, чем ожидалось
Я пишу текстовый редактор, и я, кажется, не понимаю что-то о gtksourceview и отменить. Я хотел бы, чтобы операция отмены отменяла одну операцию с каждым вызовом, но, кажется, она хочет сделать больше, чем это.
Вот пример:
Я печатаю две строки:
первая строка
вторая линия
затем я поднимаюсь и сначала удаляю "r", затем нажимаю Ctrl + Z, чтобы отменить операцию. Какие результаты это:
первая строка
второй
В документации сказано:
Действия определяются как группы операций между вызовом gtk_text_buffer_begin_user_action() и gtk_text_buffer_end_user_action() или последовательностями схожих правок (вставка или удаление) в одной строке.
Я не вижу, как восстановление "r" и удаление слова "строка" - это "похожие правки (вставки или удаления) в одной строке".
Это очень сбивает с толку, чтобы ударить отмену и нужно помнить, чтобы ударить повтор, потому что больше было отменено, чем ожидалось. Другие редакторы не действуют таким образом, так что я просто неправильно это реализую?
Вот мой код отмены: GtkSourceBuffer *sbuffer;
sbuffer = GTK_SOURCE_BUFFER(gtk_text_view_get_buffer(GTK_TEXT_VIEW(txtinput[current_tab])));
if (gtk_source_buffer_can_undo(sbuffer))
{
gtk_source_buffer_undo(sbuffer);
}
1 ответ
Отмена является "бесплатной" с GtkSourceView, и из вашего описания это звучит так, как будто происходят две операции отмены, так что вполне вероятно, что вы не в состоянии сообщить Gtk, что вы обработали событие (возвращая true), и оно продолжает свое собственное отменить также. Но в любом случае поведение, которое вы видите, не является нормальным. Вы можете попробовать то же самое, например, с помощью gedit, чтобы показать это.