我正在写一个文本编辑器,我似乎不理解一些关于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);
}发布于 2012-12-14 13:20:09
Undo在GtkSourceView中是“免费的”,从您的描述来看,似乎发生了两个undo操作,所以您很可能没有通知Gtk您处理了一个事件(通过返回true),而且它也在使用自己的undo。但在任何情况下,您看到的行为都是不正常的。你可以尝试同样的方法,例如gedit来显示这一点。
https://stackoverflow.com/questions/13872051
复制相似问题