1

我正在编写一个文本编辑器,我似乎不了解有关 gtksourceview 和撤消的内容。我希望撤消操作在每次调用时撤消单个操作,但它似乎想做的不止于此。

这是一个例子:

我输入两行:

第一行

第二行

然后我先上去删除“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);
            }
4

1 回答 1

3

使用 GtkSourceView 撤消是“免费的”,从您的描述来看,这听起来像是两个撤消操作正在发生,因此您可能没有通知 Gtk 您处理了一个事件(通过返回 true),并且它正在继续自己的撤消为好。但无论如何,你看到的行为是不正常的。您可以尝试使用例如 gedit 来显示这一点。

于 2012-12-14T05:20:09.323 回答