summaryrefslogtreecommitdiff
path: root/gtk2_ardour/window_manager.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2013-05-07 22:09:16 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2013-05-07 22:09:16 -0400
commitbedc7b170eb72f1b9aaaf3872c7160aa1661a4e1 (patch)
tree2c659ab7a49ede69a32e00799c04713a9ec15b02 /gtk2_ardour/window_manager.cc
parent87d502c15bf78f84a67566e0f2a8d51a820ad14a (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.cc93
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;
+}