34948


textviewウィンドウで1文字書かれるごとコールバックしたいです。  
シグナルは何にすればいいのですか?  
どのようにすればいいのでしょうか?  
ソースかリンクを書いてくれると幸いです。


CC BY-SA 3.0
2017-05-22T22:01:43.337
34941
2017-05-23T03:34:18.140
2017-05-23T03:34:18.140
3054
21169
question
c gtk
GTK+ の TextView で1文字書かれるごとにコールバックしたい


用途にもよると思いますが、TextView で表示している [TextBuffer
のシグナル](https://developer.gnome.org/gtk3/stable/GtkTextBuffer.html#GtkTextBuffer.signals)
ではどうでしょうか。  
`changed` や `insert_text` があります。  
ただ、貼り付け操作や、インプットメソッドの使用などがあるので、「挿入」は一文字ごとに行なわれるとは限りません。  
一応コードも書いておきましたが、普通にシグナルハンドラを登録しているだけです。（Genie です。まあ、疑似コードと考えて下さい）

[code]

    // print_text_buffer_signal.gs
    // valac --pkg gtk+-3.0 print_text_buffer_signal.gs 
    
    uses
        Gtk
    
    init
        Intl.setlocale(LocaleCategory.ALL, "")
        Gtk.init(ref args)
    
        // ウィンドウ
        var win = new Gtk.Window()
        win.set_title("TextBuffer のシグナルのテスト")
        win.destroy.connect(Gtk.main_quit)
    
        // バッファ
        var buf = new Gtk.TextBuffer(null)
        buf.set_text("今日は、世界！\n")
        buf.changed.connect(changed_hdl)
        buf.insert_text.connect(insert_text_hdl)
    
        // ビュー
        var view = new Gtk.TextView.with_buffer(buf)
        win.add(view)
    
        win.show_all()
        Gtk.main()
    
    
    def changed_hdl()
        print "変更されました"
    
    def insert_text_hdl(ref pos:TextIter, new_text:string, new_text_length:int)
        print @"挿入されました: $new_text"
    
[/code]


CC BY-SA 3.0
2017-05-23T03:32:19.857
34948
2017-05-23T03:32:19.857
3054
34941
answer