【问题标题】:gtksourceview undo, undoing more than expectedgtksourceview 撤消,撤消超出预期
【发布时间】:2012-12-14 14:39:33
【问题描述】:

我正在编写一个文本编辑器,但我似乎不了解 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);
            }

【问题讨论】:

    标签: gtk gtksourceview


    【解决方案1】:

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

    【讨论】:

    • 再次感谢@ergosys。我想也许撤消操作被执行了不止一次,所以我在那个按键块中放了一个 printf 语句。我没有在终端中看到两次 printf 输出,所以我开始寻找其他方向。但是,返回 TRUE 解决了这个问题。我一直被那个咬。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 2021-06-01
    • 2014-04-12
    • 2013-06-06
    • 1970-01-01
    • 2014-03-03
    • 2013-07-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多