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