From cb6f16ac2df2db18e4a87aa2617625a3195d45c9 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Sun, 7 Jul 2013 19:29:42 +0200 Subject: fix save/restore [plugin] window pos&size (without save) --- gtk2_ardour/window_manager.cc | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'gtk2_ardour/window_manager.cc') diff --git a/gtk2_ardour/window_manager.cc b/gtk2_ardour/window_manager.cc index b76958d4d4..730668d7e4 100644 --- a/gtk2_ardour/window_manager.cc +++ b/gtk2_ardour/window_manager.cc @@ -263,8 +263,27 @@ ProxyBase::toggle() _window->show_all(); /* we'd like to just call this and nothing else */ _window->present (); + + if (_width != -1 && _height != -1) { + _window->set_default_size (_width, _height); + } + if (_x_off != -1 && _y_off != -1) { + _window->move (_x_off, _y_off); + } + } else { + if (_window->is_mapped()) { + save_pos_and_size(); + } vistracker->cycle_visibility (); + if (_window->is_mapped()) { + if (_width != -1 && _height != -1) { + _window->set_default_size (_width, _height); + } + if (_x_off != -1 && _y_off != -1) { + _window->move (_x_off, _y_off); + } + } } } @@ -325,6 +344,7 @@ ProxyBase::setup () assert (_window); vistracker = new Gtkmm2ext::VisibilityTracker (*_window); + _window->signal_delete_event().connect (sigc::mem_fun (*this, &ProxyBase::handle_win_event)); if (_width != -1 || _height != -1 || _x_off != -1 || _y_off != -1) { /* cancel any mouse-based positioning */ @@ -379,10 +399,17 @@ ProxyBase::hide () { Gtk::Window* win = get (false); if (win) { + save_pos_and_size(); win->hide (); } } +void +ProxyBase::save_pos_and_size () +{ + _window->get_position (_x_off, _y_off); + _window->get_size (_width, _height); +} /*-----------------------*/ ProxyTemporary::ProxyTemporary (const string& name, Gtk::Window* win) -- cgit v1.2.3