Cope with drags of selections that include regions on hidden tracks (#3493).
[ardour.git] / gtk2_ardour / led.cc
index 645b65e99b1b785ace5f7502f191b48c88ef178d..9a93e048d1d495247344f1115246137ded9d547d 100644 (file)
@@ -122,24 +122,7 @@ LED::set_visual_state (int32_t s)
         if (s != _visual_state) {
 
                 _visual_state = s;
-
-                RefPtr<Style> style = get_style();
-                Color c;
-                
-                switch (_visual_state) {
-                case 0:
-                        c = style->get_fg (STATE_NORMAL);
-                        break;
-                default:
-                        c = style->get_fg (STATE_ACTIVE);
-                        break;
-                }
-
-                _red = c.get_red_p ();
-                _green = c.get_green_p ();
-                _blue = c.get_blue_p ();
-                
-                set_dirty ();
+                set_colors_from_style ();
         }
 }
 
@@ -155,6 +138,13 @@ LED::set_diameter (float d)
         set_dirty ();
 }
 
+void
+LED::on_realize ()
+{
+        set_colors_from_style ();
+        CairoWidget::on_realize ();
+}
+
 void
 LED::on_size_request (Gtk::Requisition* req)
 {
@@ -165,3 +155,25 @@ LED::on_size_request (Gtk::Requisition* req)
                 CairoWidget::on_size_request (req);
         }
 }
+
+void
+LED::set_colors_from_style ()
+{
+        RefPtr<Style> style = get_style();
+        Color c;
+
+        switch (_visual_state) {
+        case 0:
+                c = style->get_fg (STATE_NORMAL);
+                break;
+        default:
+                c = style->get_fg (STATE_ACTIVE);
+                break;
+        }
+
+        _red = c.get_red_p ();
+        _green = c.get_green_p ();
+        _blue = c.get_blue_p ();
+
+        set_dirty ();
+}