diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2013-05-07 22:09:16 -0400 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2013-05-07 22:09:16 -0400 |
commit | bedc7b170eb72f1b9aaaf3872c7160aa1661a4e1 (patch) | |
tree | 2c659ab7a49ede69a32e00799c04713a9ec15b02 /gtk2_ardour/window_manager.cc | |
parent | 87d502c15bf78f84a67566e0f2a8d51a820ad14a (diff) |
change namespace/naming of WindowManager classes; register all ArdourDialog and ArdourWindow classes as ProxyTemporary windows so that transient-for can be set for all such windows
Diffstat (limited to 'gtk2_ardour/window_manager.cc')
-rw-r--r-- | gtk2_ardour/window_manager.cc | 93 |
1 files changed, 62 insertions, 31 deletions
diff --git a/gtk2_ardour/window_manager.cc b/gtk2_ardour/window_manager.cc index 1859eb85f1..90345acff0 100644 --- a/gtk2_ardour/window_manager.cc +++ b/gtk2_ardour/window_manager.cc @@ -25,30 +25,33 @@ #include "gtkmm2ext/visibility_tracker.h" #include "actions.h" +#include "ardour_dialog.h" +#include "ardour_window.h" #include "window_manager.h" #include "i18n.h" using std::string; +using namespace WM; -WindowManager* WindowManager::_instance = 0; +Manager* Manager::_instance = 0; -WindowManager& -WindowManager::instance () +Manager& +Manager::instance () { if (!_instance) { - _instance = new WindowManager; + _instance = new Manager; } return *_instance; } -WindowManager::WindowManager () +Manager::Manager () : current_transient_parent (0) { } void -WindowManager::register_window (ProxyBase* info) +Manager::register_window (ProxyBase* info) { _windows.push_back (info); @@ -60,12 +63,12 @@ WindowManager::register_window (ProxyBase* info) } info->set_action (ActionManager::register_action (window_actions, info->action_name().c_str(), info->menu_name().c_str(), - sigc::bind (sigc::mem_fun (*this, &WindowManager::toggle_window), info))); + sigc::bind (sigc::mem_fun (*this, &Manager::toggle_window), info))); } } void -WindowManager::remove (const ProxyBase* info) +Manager::remove (const ProxyBase* info) { for (Windows::iterator i = _windows.begin(); i != _windows.end(); ++i) { if ((*i) == info) { @@ -76,7 +79,7 @@ WindowManager::remove (const ProxyBase* info) } void -WindowManager::toggle_window (ProxyBase* proxy) +Manager::toggle_window (ProxyBase* proxy) { if (proxy) { proxy->toggle (); @@ -84,7 +87,7 @@ WindowManager::toggle_window (ProxyBase* proxy) } void -WindowManager::show_visible() const +Manager::show_visible() const { for (Windows::const_iterator i = _windows.begin(); i != _windows.end(); ++i) { if ((*i)->visible()) { @@ -95,15 +98,20 @@ WindowManager::show_visible() const } void -WindowManager::add_state (XMLNode& root) const +Manager::add_state (XMLNode& root) const { for (Windows::const_iterator i = _windows.begin(); i != _windows.end(); ++i) { + /* don't save state for temporary proxy windows + */ + if (dynamic_cast<ProxyTemporary*> (*i)) { + continue; + } root.add_child_nocopy ((*i)->get_state()); } } void -WindowManager::set_session (ARDOUR::Session* s) +Manager::set_session (ARDOUR::Session* s) { for (Windows::const_iterator i = _windows.begin(); i != _windows.end(); ++i) { ARDOUR::SessionHandlePtr* sp = (*i)->session_handle (); @@ -114,12 +122,13 @@ WindowManager::set_session (ARDOUR::Session* s) } void -WindowManager::set_transient_for (Gtk::Window* parent) +Manager::set_transient_for (Gtk::Window* parent) { if (parent) { for (Windows::const_iterator i = _windows.begin(); i != _windows.end(); ++i) { Gtk::Window* win = (*i)->get(); if (win) { + std::cerr << "marked " << win->get_title() << " as transient of " << parent->get_title() << std::endl; win->set_transient_for (*parent); } } @@ -131,13 +140,13 @@ WindowManager::set_transient_for (Gtk::Window* parent) } } } - + current_transient_parent = parent; } -/*-----------------------*/ +/*-------------------------*/ -WindowManager::ProxyBase::ProxyBase (const string& name, const std::string& menu_name) +ProxyBase::ProxyBase (const string& name, const std::string& menu_name) : _name (name) , _menu_name (menu_name) , _window (0) @@ -150,7 +159,7 @@ WindowManager::ProxyBase::ProxyBase (const string& name, const std::string& menu { } -WindowManager::ProxyBase::ProxyBase (const string& name, const std::string& menu_name, const XMLNode& node) +ProxyBase::ProxyBase (const string& name, const std::string& menu_name, const XMLNode& node) : _name (name) , _menu_name (menu_name) , _window (0) @@ -164,13 +173,13 @@ WindowManager::ProxyBase::ProxyBase (const string& name, const std::string& menu set_state (node); } -WindowManager::ProxyBase::~ProxyBase () +ProxyBase::~ProxyBase () { delete vistracker; } void -WindowManager::ProxyBase::set_state (const XMLNode& node) +ProxyBase::set_state (const XMLNode& node) { XMLNodeList children = node.children (); @@ -215,19 +224,19 @@ WindowManager::ProxyBase::set_state (const XMLNode& node) } void -WindowManager::ProxyBase::set_action (Glib::RefPtr<Gtk::Action> act) +ProxyBase::set_action (Glib::RefPtr<Gtk::Action> act) { _action = act; } std::string -WindowManager::ProxyBase::action_name() const +ProxyBase::action_name() const { return string_compose (X_("toggle-%1"), _name); } void -WindowManager::ProxyBase::toggle() +ProxyBase::toggle() { if (!_window) { (void) get (true); @@ -244,7 +253,7 @@ WindowManager::ProxyBase::toggle() } XMLNode& -WindowManager::ProxyBase::get_state () const +ProxyBase::get_state () const { XMLNode* node = new XMLNode (X_("Window")); char buf[32]; @@ -275,7 +284,7 @@ WindowManager::ProxyBase::get_state () const } void -WindowManager::ProxyBase::drop_window () +ProxyBase::drop_window () { if (_window) { _window->hide (); @@ -287,7 +296,7 @@ WindowManager::ProxyBase::drop_window () } void -WindowManager::ProxyBase::use_window (Gtk::Window& win) +ProxyBase::use_window (Gtk::Window& win) { drop_window (); _window = &win; @@ -295,7 +304,7 @@ WindowManager::ProxyBase::use_window (Gtk::Window& win) } void -WindowManager::ProxyBase::setup () +ProxyBase::setup () { assert (_window); @@ -316,14 +325,14 @@ WindowManager::ProxyBase::setup () } void -WindowManager::ProxyBase::show () +ProxyBase::show () { Gtk::Window* win = get (true); win->show (); } void -WindowManager::ProxyBase::maybe_show () +ProxyBase::maybe_show () { if (_visible) { show (); @@ -331,7 +340,7 @@ WindowManager::ProxyBase::maybe_show () } void -WindowManager::ProxyBase::show_all () +ProxyBase::show_all () { Gtk::Window* win = get (true); win->show_all (); @@ -339,7 +348,7 @@ WindowManager::ProxyBase::show_all () void -WindowManager::ProxyBase::present () +ProxyBase::present () { Gtk::Window* win = get (true); win->show_all (); @@ -350,7 +359,7 @@ WindowManager::ProxyBase::present () } void -WindowManager::ProxyBase::hide () +ProxyBase::hide () { Gtk::Window* win = get (false); if (win) { @@ -358,3 +367,25 @@ WindowManager::ProxyBase::hide () } } +/*-----------------------*/ + +ProxyTemporary::ProxyTemporary (const string& name, Gtk::Window* win) + : ProxyBase (name, string()) +{ + _window = win; +} + +ProxyTemporary::~ProxyTemporary () +{ +} + +ARDOUR::SessionHandlePtr* +ProxyTemporary::session_handle() +{ + /* may return null */ + ArdourWindow* aw = dynamic_cast<ArdourWindow*> (_window); + if (aw) { return aw; } + ArdourDialog* ad = dynamic_cast<ArdourDialog*> (_window); + if (ad) { return ad; } + return 0; +} |