diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2013-05-04 22:02:05 -0400 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2013-05-04 22:02:05 -0400 |
commit | 40944574c620868b43872f64600a8a42d382a6a1 (patch) | |
tree | ea1eda6147b34afdfccf4882d99602b0565fd944 /gtk2_ardour/window_manager.cc | |
parent | 69a3310037e013c074b1d8643323017ac1c815f9 (diff) |
the big rework of window management. probably not complete at thsi point, but this is mostly functional
Diffstat (limited to 'gtk2_ardour/window_manager.cc')
-rw-r--r-- | gtk2_ardour/window_manager.cc | 36 |
1 files changed, 16 insertions, 20 deletions
diff --git a/gtk2_ardour/window_manager.cc b/gtk2_ardour/window_manager.cc index 5732e21a25..f50fe444a8 100644 --- a/gtk2_ardour/window_manager.cc +++ b/gtk2_ardour/window_manager.cc @@ -51,7 +51,7 @@ WindowManager::register_window (ProxyBase* info) { _windows.push_back (info); - if (info->rc_configured() && !info->menu_name().empty()) { + if (!info->menu_name().empty()) { if (!window_actions) { window_actions = Gtk::ActionGroup::create (X_("Window")); @@ -220,26 +220,25 @@ WindowManager::ProxyBase::toggle() } } -bool -WindowManager::ProxyBase::configured (GdkEventConfigure* ev) -{ - _visible = true; - _x_off = ev->x; - _y_off = ev->y; - _height = ev->height; - _width = ev->width; - - return false; -} - XMLNode& WindowManager::ProxyBase::get_state () const { XMLNode* node = new XMLNode (X_("Window")); + char buf[32]; + node->add_property (X_("name"), _name); - node->add_property (X_("visible"), _visible ? X_("yes") : X_("no")); - char buf[32]; + if (_window && vistracker) { + + /* we have a window, so use current state */ + + _visible = vistracker->partially_visible (); + _window->get_position (_x_off, _y_off); + _window->get_size (_width, _height); + } + + node->add_property (X_("visible"), _visible? X_("yes") : X_("no")); + snprintf (buf, sizeof (buf), "%d", _x_off); node->add_property (X_("x-off"), buf); snprintf (buf, sizeof (buf), "%d", _y_off); @@ -253,13 +252,12 @@ WindowManager::ProxyBase::get_state () const } void -WindowManager::ProxyBase::clear () +WindowManager::ProxyBase::drop_window () { if (_window) { _window->hide (); delete _window; _window = 0; - configure_connection.disconnect (); delete vistracker; vistracker = 0; } @@ -268,7 +266,7 @@ WindowManager::ProxyBase::clear () void WindowManager::ProxyBase::use_window (Gtk::Window& win) { - clear (); + drop_window (); _window = &win; setup (); } @@ -278,8 +276,6 @@ WindowManager::ProxyBase::setup () { assert (_window); - configure_connection = _window->signal_configure_event().connect (sigc::mem_fun (*this, &ProxyBase::configured), false); - vistracker = new Gtkmm2ext::VisibilityTracker (*_window); if (_width != -1 && _height != -1) { |