From 3e1a097180afc0a2275ed36ad91a59af35731ddf Mon Sep 17 00:00:00 2001 From: Tim Mayberry Date: Wed, 18 Jul 2007 02:27:07 +0000 Subject: Restore position of the mixer window when it is reopened. #1277 git-svn-id: svn://localhost/ardour2/trunk@2141 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/mixer_ui.cc | 64 +++++++++++++++++++++++++++---------------------- gtk2_ardour/mixer_ui.h | 6 +++++ 2 files changed, 42 insertions(+), 28 deletions(-) (limited to 'gtk2_ardour') diff --git a/gtk2_ardour/mixer_ui.cc b/gtk2_ardour/mixer_ui.cc index 85c5ebce18..89d7ef5cc4 100644 --- a/gtk2_ardour/mixer_ui.cc +++ b/gtk2_ardour/mixer_ui.cc @@ -261,6 +261,8 @@ Mixer_UI::show_window () { present (); + set_window_pos_and_size (); + /* now reset each strips width so the right widgets are shown */ MixerStrip* ms; @@ -277,6 +279,8 @@ Mixer_UI::show_window () bool Mixer_UI::hide_window (GdkEventAny *ev) { + get_window_pos_and_size (); + _visible = false; return just_hide_it(ev, static_cast(this)); } @@ -1072,37 +1076,42 @@ Mixer_UI::set_strip_width (Width w) } } +void +Mixer_UI::set_window_pos_and_size () +{ + resize (m_width, m_height); + move (m_root_x, m_root_y); +} + + void +Mixer_UI::get_window_pos_and_size () +{ + get_position(m_root_x, m_root_y); + get_size(m_width, m_height); +} int Mixer_UI::set_state (const XMLNode& node) { const XMLProperty* prop; XMLNode* geometry; - Gdk::Geometry g; - int x, y, xoff, yoff; if ((geometry = find_named_node (node, "geometry")) == 0) { - g.base_width = default_width; - g.base_height = default_height; - x = 1; - y = 1; - xoff = 0; - yoff = 21; + m_width = default_width; + m_height = default_height; + m_root_x = 1; + m_root_y = 1; } else { - g.base_width = atoi(geometry->property("x_size")->value().c_str()); - g.base_height = atoi(geometry->property("y_size")->value().c_str()); - x = atoi(geometry->property("x_pos")->value().c_str()); - y = atoi(geometry->property("y_pos")->value().c_str()); - xoff = atoi(geometry->property("x_off")->value().c_str()); - yoff = atoi(geometry->property("y_off")->value().c_str()); + m_width = atoi(geometry->property("x_size")->value().c_str()); + m_height = atoi(geometry->property("y_size")->value().c_str()); + m_root_x = atoi(geometry->property("x_pos")->value().c_str()); + m_root_y = atoi(geometry->property("y_pos")->value().c_str()); } - set_geometry_hints (global_vpacker, g, Gdk::HINT_BASE_SIZE); - set_default_size(g.base_width, g.base_height); - move (x, y); + set_window_pos_and_size (); if ((prop = node.property ("narrow-strips"))) { if (prop->value() == "yes") { @@ -1128,25 +1137,24 @@ Mixer_UI::get_state (void) if (is_realized()) { Glib::RefPtr win = get_window(); - - int x, y, xoff, yoff, width, height; - win->get_root_origin(x, y); - win->get_position(xoff, yoff); - win->get_size(width, height); + + get_window_pos_and_size (); XMLNode* geometry = new XMLNode ("geometry"); char buf[32]; - snprintf(buf, sizeof(buf), "%d", width); + snprintf(buf, sizeof(buf), "%d", m_width); geometry->add_property(X_("x_size"), string(buf)); - snprintf(buf, sizeof(buf), "%d", height); + snprintf(buf, sizeof(buf), "%d", m_height); geometry->add_property(X_("y_size"), string(buf)); - snprintf(buf, sizeof(buf), "%d", x); + snprintf(buf, sizeof(buf), "%d", m_root_x); geometry->add_property(X_("x_pos"), string(buf)); - snprintf(buf, sizeof(buf), "%d", y); + snprintf(buf, sizeof(buf), "%d", m_root_y); geometry->add_property(X_("y_pos"), string(buf)); - snprintf(buf, sizeof(buf), "%d", xoff); + + // written only for compatibility, they are not used. + snprintf(buf, sizeof(buf), "%d", 0); geometry->add_property(X_("x_off"), string(buf)); - snprintf(buf, sizeof(buf), "%d", yoff); + snprintf(buf, sizeof(buf), "%d", 0); geometry->add_property(X_("y_off"), string(buf)); snprintf(buf,sizeof(buf), "%d",gtk_paned_get_position (static_cast(&rhs_pane1)->gobj())); diff --git a/gtk2_ardour/mixer_ui.h b/gtk2_ardour/mixer_ui.h index 2851763ba5..3c9355efb7 100644 --- a/gtk2_ardour/mixer_ui.h +++ b/gtk2_ardour/mixer_ui.h @@ -102,6 +102,12 @@ class Mixer_UI : public Gtk::Window Gtk::HBox out_packer; Gtk::HPaned list_hpane; + // for restoring window geometry. + int m_root_x, m_root_y, m_width, m_height; + + void set_window_pos_and_size (); + void get_window_pos_and_size (); + bool on_key_press_event (GdkEventKey*); void pane_allocation_handler (Gtk::Allocation&, Gtk::Paned*); -- cgit v1.2.3