RubyLit - Ruby.del.litoral!
Activar y Desactivar señales

En estos días me encontré con el inconveniente de que el método que utilizo habitualmente para activar y desactivar señales no me sirve y tuve que buscar otra solución

En General para deshabilitar un widget uso esto:


widget.sensitive=false

y para habilitarlo esto otro:


widget.sensitive=false

Pero en el caso que estoy trabajando el widget es una imágen, y al ejecutar imagen.sensitive=false la misma ya no se distingue bien y yo necesito que no funcione el evento clicked pero que se vea bien.

Por lo tanto investigue un poco y encontré que lo que tengo que usar es GLib::Instantiatable#signal_handler_block y GLib::Instantiatable#signal_handler_unblock, lamentablemente el ejemplo del sitio principal de rubygnome no funciona.
http://ruby-gnome2.sourceforge.jp/hiki.cgi?tut-gtk-signals-more
Lo que si funciona es la solución que dejo acá.


require 'gtk2'

Gtk.init

window = Gtk::Window.new
window.set_title("Disable clicked")
window.set_border_width(0)
window.set_default_size(350, 150)

box1 = Gtk::VBox.new(false, 0)
window.add(box1)

bt1=Gtk::Button.new("Clic Me")
bt2=Gtk::Button.new("Disable")
bt3=Gtk::Button.new("Enable")
bt4=Gtk::Button.new(Gtk::Stock::QUIT)

@h=bt1.signal_connect("clicked") do |b|
puts b.class
end

bt2.signal_connect("clicked") do |w|
bt1.signal_handler_block @h
puts @h
end

bt3.signal_connect("clicked") do |w|
bt1.signal_handler_unblock @h
puts @h
end

bt4.signal_connect("clicked") do |w|
  Gtk.main_quit 
end

box1.pack_start(bt1, false, true, 0)
box1.pack_start(bt2, false, true, 0)
box1.pack_start(bt3, false, true, 0)
box1.pack_start(bt4, false, true, 0)

window.show_all

Gtk.main