むとうです。

In message "[ruby-ext:02035] Re: [ANN]ruby-gnome-0.26"
        on Thu, 6 Dec 2001 02:11:48 +0900, MUTOH Masao <mutoh / highway.ne.jp> wrote:

> > http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-ext/779
> > 
> > からのスレッドで話が出てます。
> > 
> > # 2年前… 懐かしい…(^^;
> > 
> > | C API では gint* position なので、関数中で *position = n; とすれば位置を
> > | 変更できたんですが、Ruby では整数の in-out parameter が使えないので…。
> 
> ありがとうございます。
> 
> 一通り見てみたんですが、これ、難しいですね....。

同じ、signal_connect内ではpositionの変更ができないんですね...。うーん。

一応、Rubyレベルで以下のようなトリッキーなアイデアを思いつきましたが
いかがでしょう。まぁ、美しくないし、応用きかなそうですけど....ってだめじゃん(^^;)。
#ただし、1度にinsertするのは1文字の場合のみです。

require 'gtk'

entry = Gtk::Entry.new

handler_id = entry.signal_connect_after("insert_text") do |widget, text, pos|
  entry.signal_handler_block(handler_id)
p    t = text.upcase
    entry.insert_text(t, pos)
    entry.delete_text(pos - 1,pos)
  entry.position = pos + text.size
  entry.signal_handler_unblock(handler_id)
end

window = Gtk::Window.new
window.add(entry)
window.show_all
Gtk.main

-- 
.:% MUTOH Masao <mutoh / highway.ne.jp>