diff --git a/gtk2_ardour/cairo_widget.cc b/gtk2_ardour/cairo_widget.cc index cdb0901313..e2edc24bbc 100644 --- a/gtk2_ardour/cairo_widget.cc +++ b/gtk2_ardour/cairo_widget.cc @@ -105,3 +105,19 @@ CairoWidget::set_visual_state (Gtkmm2ext::VisualState s) StateChanged (); } } + +void +CairoWidget::on_state_changed (Gtk::StateType) +{ + /* this will catch GTK-level state changes from calls like + ::set_sensitive() + */ + + if (get_state() == Gtk::STATE_INSENSITIVE) { + set_visual_state (Gtkmm2ext::VisualState (visual_state() | Gtkmm2ext::Insensitive)); + } else { + set_visual_state (Gtkmm2ext::VisualState (visual_state() & ~Gtkmm2ext::Insensitive)); + } + + queue_draw (); +} diff --git a/gtk2_ardour/cairo_widget.h b/gtk2_ardour/cairo_widget.h index 7cdaf66efe..d3eac0bb02 100644 --- a/gtk2_ardour/cairo_widget.h +++ b/gtk2_ardour/cairo_widget.h @@ -48,6 +48,7 @@ protected: virtual void render (cairo_t *) = 0; virtual bool on_expose_event (GdkEventExpose *); void on_size_allocate (Gtk::Allocation &); + void on_state_changed (Gtk::StateType); Gdk::Color get_parent_bg (); int _width; ///< pixmap width