From: Tadashi S. <sh...@ma...> - 2003-07-04 17:54:27
|
Ruby/GTK2を勉強中の、斎藤と申します。 すごい些細なものなんで迷ったのですが、一応報告させて下さい。 サンプルのSimple Text Editorで、redoがおかしい感じがします。 入力→undo→入力→redoで、最初の入力が出てきてしまいます。 redoは「undoのundo」なので、 「ユーザからの文字入力があった」=「直前の動作がundoでない」 時点で、redoできなくなるべきではないでしょうか。 geditもそうなっているようです。 --- simple-editor.rb.orig 2003-07-05 02:36:37.000000000 +0900 +++ simple-editor.rb 2003-07-05 01:12:14.000000000 +0900 @@ -46,7 +46,10 @@ @buffer = @textview.buffer @buffer.signal_connect("insert_text") do |w, iter, text, length| - @undopool << ["insert_text", iter.offset, iter.offset + text.scan(/./).size, text] if @user_action + if @user_action + @undopool << ["insert_text", iter.offset, iter.offset + text.scan(/./).size, text] + @redopool.clear + end end @buffer.signal_connect("delete_range") do |w, start_iter, end_iter| text = @buffer.get_text(start_iter, end_iter) # 今日散歩している時にたまたま、一般的なundo/redoのアルゴリズムを # 考えていたので気になってしまいました。その後実際にむとうさんの # コードを拝見して、やっぱりそうすればいいのか、と納得しました ;) ところで上と直接の関係はないのですが、むとうさんや他の方々は どのようにGTK2を勉強されているのでしょうか。 たとえば、自分はGtkTextBufferの"begin-user-action"シグナルの意味を 知るためにリファレンスをのぞいてみましたが、説明はさっぱりありません。 やっぱりソースが一番、ということでしょうか。 --- 斎藤ただし |