make window-manager session-aware

This commit is contained in:
Robin Gareus 2013-07-07 17:44:00 +02:00
parent cb6f16ac2d
commit a22e20133d
2 changed files with 38 additions and 8 deletions

View file

@ -47,7 +47,7 @@ namespace WM {
class ProxyBase;
class Manager
class Manager : public ARDOUR::SessionHandlePtr
{
public:
static Manager& instance();
@ -75,7 +75,7 @@ class Manager
static Manager* _instance;
};
class ProxyBase : public sigc::trackable {
class ProxyBase : public ARDOUR::SessionHandlePtr, public sigc::trackable {
public:
ProxyBase (const std::string& name, const std::string& menu_name);
ProxyBase (const std::string& name, const std::string& menu_name, const XMLNode&);
@ -106,7 +106,7 @@ class ProxyBase : public sigc::trackable {
XMLNode& get_state () const;
virtual ARDOUR::SessionHandlePtr* session_handle () = 0;
operator bool() const { return _window != 0; }
protected:
@ -122,6 +122,7 @@ class ProxyBase : public sigc::trackable {
Gtkmm2ext::VisibilityTracker* vistracker;
void save_pos_and_size ();
bool handle_win_event (GdkEventAny *ev);
void setup ();
};
@ -139,7 +140,7 @@ class ProxyTemporary: public ProxyBase {
Gtk::Window* operator->() {
return _window;
}
ARDOUR::SessionHandlePtr* session_handle ();
};
@ -177,6 +178,15 @@ class ProxyWithConstructor: public ProxyBase {
return dynamic_cast<T*> (_window);
}
void set_session(ARDOUR::Session *s) {
SessionHandlePtr::set_session (s);
ARDOUR::SessionHandlePtr* sp = session_handle ();
if (sp) {
sp->set_session (s);
dynamic_cast<T*>(_window)->set_session(s);
}
}
private:
boost::function<T*()> creator;
};
@ -215,6 +225,15 @@ class Proxy : public ProxyBase {
return dynamic_cast<T*> (_window);
}
void set_session(ARDOUR::Session *s) {
SessionHandlePtr::set_session (s);
ARDOUR::SessionHandlePtr* sp = session_handle ();
if (sp) {
sp->set_session (s);
dynamic_cast<T*>(_window)->set_session(s);
}
}
private:
boost::function<T*()> creator;
};