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, чтобы показать это.

Другие вопросы по тегам