1

私はテキスト エディターを書いていますが、gtksourceview と undo について理解していないようです。各呼び出しで単一の操作を元に戻す操作を元に戻したいのですが、それ以上のことをしたいようです。

次に例を示します。

次の 2 行を入力します。

最初の行

二行目

次に、上に移動して最初に「r」を削除し、次にctrl + zを押して元に戻します。これはどのような結果ですか:

最初の行

2番目

ドキュメントには次のように記載されています。

アクションは、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);
            }
4

1 に答える 1

3

Undo は GtkSourceView で「無料」であり、説明から 2 つの元に戻す操作が発生しているように聞こえるため、(true を返すことによって) イベントを処理したことを Gtk に通知できていない可能性が高く、独自の処理を進めています。同様に元に戻します。しかし、いずれにせよ、あなたが見ている行動は正常ではありません。これを表示するには、たとえば gedit で同じことを試すことができます。

于 2012-12-14T05:20:09.323 に答える