gtksourceview撤消,撤消超过预期

时间:2012-12-14 03:03:59

标签: gtk gtksourceview

我正在编写一个文本编辑器,我似乎对gtksourceview和undo没有了解。我希望撤消操作在每次调用时撤消单个操作,但它似乎想要做更多的操作。

以下是一个例子:

我输入两行:

第一行

第二行

然后我上去并先删除“r”,然后按ctrl + z执行撤消。结果是什么:

第一行

第二

文档说:

操作定义为对gtk_text_buffer_begin_user_action()和gtk_text_buffer_end_user_action()的调用之间的操作组,或同一行上类似编辑(插入或删除)的序列。

我不知道如何恢复“r”并删除“line”这个词是“在同一行上进行类似的编辑(插入或删除)。”

击败撤消非常迷惑,必须记住重做,因为比预期的更多被撤消。其他编辑不这样做,所以我只是执行错误吗?

这是我的撤消代码:                 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 个答案:

答案 0 :(得分:3)

使用GtkSourceView“撤销”是免费的,并且根据您的描述,听起来好像发生了两次撤消操作,因此很可能您未能通知Gtk您处理了一个事件(通过返回true),并且它正在进行中也有自己的撤消。但无论如何,你所看到的行为并不正常。您也可以尝试相同的gedit来表明这一点。