Optimize automation-event process splitting
[ardour.git] / gtk2_ardour / window_manager.h
index bc4baee18e3e89db369203cb8808411f2eb089d3..93d71add928244f63cfe691a3d79dc6e3375e54d 100644 (file)
@@ -52,7 +52,7 @@ class ProxyBase;
 
 class Manager : public ARDOUR::SessionHandlePtr
 {
-  public:
+public:
        static Manager& instance();
 
        void register_window (ProxyBase*);
@@ -66,59 +66,63 @@ class Manager : public ARDOUR::SessionHandlePtr
        void set_transient_for (Gtk::Window*);
        Gtk::Window* transient_parent() const { return current_transient_parent; }
 
-                                        private:
+private:
        typedef std::list<ProxyBase*> Windows;
        Windows _windows;
        Glib::RefPtr<Gtk::ActionGroup> window_actions;
        Gtk::Window* current_transient_parent;
-       
+
        Manager();
        ~Manager();
 
        static Manager* _instance;
+private:
+       void window_proxy_was_mapped (ProxyBase*);
+       void window_proxy_was_unmapped (ProxyBase*);
 };
-       
+
 class ProxyBase : public ARDOUR::SessionHandlePtr, public Gtkmm2ext::WindowProxy
 {
-  public:
+public:
        ProxyBase (const std::string& name, const std::string& menu_name);
        ProxyBase (const std::string& name, const std::string& menu_name, const XMLNode&);
-       
+
        virtual ARDOUR::SessionHandlePtr* session_handle () = 0;
 
-  protected:
+protected:
        void setup ();
 };
-       
+
 class ProxyTemporary: public ProxyBase
 {
-  public:
+public:
        ProxyTemporary (const std::string& name, Gtk::Window* win);
-       ~ProxyTemporary();
-    
-       Gtk::Window* get (bool create = false) { 
+
+       Gtk::Window* get (bool create = false) {
                (void) create;
                return _window;
        }
-    
-       Gtk::Window* operator->() { 
+
+       Gtk::Window* operator->() {
                return _window;
        }
 
        ARDOUR::SessionHandlePtr* session_handle ();
+
+       void explicit_delete () { _window = 0 ; delete this; }
 };
 
 template<typename T>
 class ProxyWithConstructor: public ProxyBase
 {
-  public:
+public:
        ProxyWithConstructor (const std::string& name, const std::string& menu_name, const boost::function<T*()>& c)
                : ProxyBase (name, menu_name) , creator (c) {}
-       
+
        ProxyWithConstructor (const std::string& name, const std::string& menu_name, const boost::function<T*()>& c, const XMLNode* node)
                : ProxyBase (name, menu_name, *node) , creator (c) {}
-       
-       Gtk::Window* get (bool create = false) { 
+
+       Gtk::Window* get (bool create = false) {
                if (!_window) {
                        if (!create) {
                                return 0;
@@ -128,13 +132,13 @@ class ProxyWithConstructor: public ProxyBase
 
                        if (_window) {
                                setup ();
-                       }       
+                       }
                }
 
                return _window;
        }
 
-       T* operator->() { 
+       T* operator->() {
                return dynamic_cast<T*> (get (true));
        }
 
@@ -152,21 +156,21 @@ class ProxyWithConstructor: public ProxyBase
                }
        }
 
-                                        private:
+private:
        boost::function<T*()>   creator;
 };
 
 template<typename T>
 class Proxy : public ProxyBase
 {
-  public:
+public:
        Proxy (const std::string& name, const std::string& menu_name)
                : ProxyBase (name, menu_name) {}
 
        Proxy (const std::string& name, const std::string& menu_name, const XMLNode* node)
                : ProxyBase (name, menu_name, *node)  {}
-       
-       Gtk::Window* get (bool create = false) { 
+
+       Gtk::Window* get (bool create = false) {
                if (!_window) {
                        if (!create) {
                                return 0;
@@ -176,13 +180,13 @@ class Proxy : public ProxyBase
 
                        if (_window) {
                                setup ();
-                       }       
+                       }
                }
 
                return _window;
        }
 
-       T* operator->() { 
+       T* operator->() {
                return dynamic_cast<T*> (get(true));
        }
 
@@ -190,7 +194,7 @@ class Proxy : public ProxyBase
                /* may return null */
                return dynamic_cast<T*> (_window);
        }
-       
+
        void set_session(ARDOUR::Session *s) {
                SessionHandlePtr::set_session (s);
                ARDOUR::SessionHandlePtr* sp = session_handle ();
@@ -199,8 +203,8 @@ class Proxy : public ProxyBase
                        dynamic_cast<T*>(_window)->set_session(s);
                }
        }
-       
-  private:
+
+private:
        boost::function<T*()>   creator;
 };