From 074ef3c85951a015d62cff49965c775a1a8b8c15 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Sun, 5 May 2013 15:07:52 -0400 Subject: fix bigclockwindow's lack of hiding, set ArdourWindow to just-hide-on-delete and add a bit of visibility tracking debugging --- gtk2_ardour/ardour_window.cc | 3 +++ gtk2_ardour/big_clock_window.cc | 2 ++ 2 files changed, 5 insertions(+) (limited to 'gtk2_ardour') diff --git a/gtk2_ardour/ardour_window.cc b/gtk2_ardour/ardour_window.cc index f16032dc74..3d09e59f7c 100644 --- a/gtk2_ardour/ardour_window.cc +++ b/gtk2_ardour/ardour_window.cc @@ -25,6 +25,7 @@ #include "ardour_window.h" #include "ardour_ui.h" #include "keyboard.h" +#include "utils.h" using namespace std; using namespace Gtk; @@ -90,6 +91,8 @@ ArdourWindow::init () set_type_hint (Gdk::WINDOW_TYPE_HINT_UTILITY); + signal_delete_event().connect (sigc::bind (sigc::ptr_fun (just_hide_it), this)); + ARDOUR_UI::CloseAllDialogs.connect (sigc::mem_fun (*this, &ArdourWindow::hide)); } diff --git a/gtk2_ardour/big_clock_window.cc b/gtk2_ardour/big_clock_window.cc index 7a96293b05..5b369a68c1 100644 --- a/gtk2_ardour/big_clock_window.cc +++ b/gtk2_ardour/big_clock_window.cc @@ -53,6 +53,8 @@ BigClockWindow::BigClockWindow (AudioClock& c) void BigClockWindow::on_unmap () { + ArdourWindow::on_unmap (); + PublicEditor::instance().reset_focus (); } -- cgit v1.2.3 From ad4412ee7f75ed44042a22a5efa7dfb998408888 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Sun, 5 May 2013 15:13:03 -0400 Subject: fix missing content of theme manager --- gtk2_ardour/theme_manager.cc | 3 +++ 1 file changed, 3 insertions(+) (limited to 'gtk2_ardour') diff --git a/gtk2_ardour/theme_manager.cc b/gtk2_ardour/theme_manager.cc index 4d7599bb78..1fc06bf0a8 100644 --- a/gtk2_ardour/theme_manager.cc +++ b/gtk2_ardour/theme_manager.cc @@ -95,6 +95,9 @@ ThemeManager::ThemeManager() vbox->pack_start (flat_buttons, PACK_SHRINK); vbox->pack_start (gradient_waveforms, PACK_SHRINK); vbox->pack_start (scroller); + + vbox->show_all (); + add (*vbox); color_display.signal_button_press_event().connect (sigc::mem_fun (*this, &ThemeManager::button_press_event), false); -- cgit v1.2.3 From 65b6f8efad3a53893138da53527a0e62d28af655 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Sun, 5 May 2013 16:10:54 -0400 Subject: more window management rationalization --- gtk2_ardour/ardour_dialog.cc | 7 +++++++ gtk2_ardour/ardour_dialog.h | 1 + gtk2_ardour/ardour_ui.h | 2 -- gtk2_ardour/ardour_ui2.cc | 8 -------- gtk2_ardour/ardour_ui_dialogs.cc | 1 - gtk2_ardour/ardour_window.cc | 9 +++++++-- gtk2_ardour/ardour_window.h | 1 + 7 files changed, 16 insertions(+), 13 deletions(-) (limited to 'gtk2_ardour') diff --git a/gtk2_ardour/ardour_dialog.cc b/gtk2_ardour/ardour_dialog.cc index cd7d0fbd55..07d5d47d6b 100644 --- a/gtk2_ardour/ardour_dialog.cc +++ b/gtk2_ardour/ardour_dialog.cc @@ -94,6 +94,13 @@ ArdourDialog::on_show () } } +bool +ArdourDialog::on_delete_event (GdkEventAny*) +{ + hide (); + return false; +} + void ArdourDialog::init () { diff --git a/gtk2_ardour/ardour_dialog.h b/gtk2_ardour/ardour_dialog.h index 041b62e1cd..1e01c8f625 100644 --- a/gtk2_ardour/ardour_dialog.h +++ b/gtk2_ardour/ardour_dialog.h @@ -40,6 +40,7 @@ class ArdourDialog : public Gtk::Dialog, public ARDOUR::SessionHandlePtr bool on_enter_notify_event (GdkEventCrossing*); bool on_leave_notify_event (GdkEventCrossing*); + bool on_delete_event (GdkEventAny *); void on_unmap (); void on_show (); diff --git a/gtk2_ardour/ardour_ui.h b/gtk2_ardour/ardour_ui.h index 79b5403daf..f2b2029170 100644 --- a/gtk2_ardour/ardour_ui.h +++ b/gtk2_ardour/ardour_ui.h @@ -348,8 +348,6 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr void start_clocking (); void stop_clocking (); - void manage_window (Gtk::Window&); - bool main_window_state_event_handler (GdkEventWindowState*, bool window_was_editor); void update_transport_clocks (framepos_t pos); diff --git a/gtk2_ardour/ardour_ui2.cc b/gtk2_ardour/ardour_ui2.cc index 348a87136f..76396e845d 100644 --- a/gtk2_ardour/ardour_ui2.cc +++ b/gtk2_ardour/ardour_ui2.cc @@ -428,14 +428,6 @@ ARDOUR_UI::setup_transport () } } -void -ARDOUR_UI::manage_window (Window& win) -{ - win.signal_delete_event().connect (sigc::bind (sigc::ptr_fun (just_hide_it), &win)); - win.signal_enter_notify_event().connect (sigc::bind (sigc::mem_fun (Keyboard::the_keyboard(), &Keyboard::enter_window), &win)); - win.signal_leave_notify_event().connect (sigc::bind (sigc::mem_fun (Keyboard::the_keyboard(), &Keyboard::leave_window), &win)); -} - void ARDOUR_UI::detach_tearoff (Box* b, Widget* w) { diff --git a/gtk2_ardour/ardour_ui_dialogs.cc b/gtk2_ardour/ardour_ui_dialogs.cc index d43d1dbec6..2e0d017d0c 100644 --- a/gtk2_ardour/ardour_ui_dialogs.cc +++ b/gtk2_ardour/ardour_ui_dialogs.cc @@ -380,7 +380,6 @@ ARDOUR_UI::new_midi_tracer_window () if (i == _midi_tracer_windows.end()) { /* all our MIDITracer windows are visible; make a new one */ MidiTracer* t = new MidiTracer (); - manage_window (*t); t->show_all (); _midi_tracer_windows.push_back (t); } else { diff --git a/gtk2_ardour/ardour_window.cc b/gtk2_ardour/ardour_window.cc index 3d09e59f7c..705fdaa1f9 100644 --- a/gtk2_ardour/ardour_window.cc +++ b/gtk2_ardour/ardour_window.cc @@ -74,6 +74,13 @@ ArdourWindow::on_unmap () Window::on_unmap (); } +bool +ArdourWindow::on_delete_event (GdkEventAny*) +{ + hide (); + return false; +} + void ArdourWindow::init () { @@ -91,8 +98,6 @@ ArdourWindow::init () set_type_hint (Gdk::WINDOW_TYPE_HINT_UTILITY); - signal_delete_event().connect (sigc::bind (sigc::ptr_fun (just_hide_it), this)); - ARDOUR_UI::CloseAllDialogs.connect (sigc::mem_fun (*this, &ArdourWindow::hide)); } diff --git a/gtk2_ardour/ardour_window.h b/gtk2_ardour/ardour_window.h index 3b8628d5a7..68bf65d353 100644 --- a/gtk2_ardour/ardour_window.h +++ b/gtk2_ardour/ardour_window.h @@ -42,6 +42,7 @@ class ArdourWindow : public Gtk::Window, public ARDOUR::SessionHandlePtr, public bool on_enter_notify_event (GdkEventCrossing*); bool on_leave_notify_event (GdkEventCrossing*); + bool on_delete_event (GdkEventAny *); void on_unmap (); private: -- cgit v1.2.3 From ee426ca223833dddcf660bb20e1e7cbb1785616a Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Mon, 6 May 2013 00:15:48 +0200 Subject: fix crash on export if no master bus is present in the session --- gtk2_ardour/export_channel_selector.cc | 6 ++++-- libs/ardour/export_profile_manager.cc | 2 ++ 2 files changed, 6 insertions(+), 2 deletions(-) (limited to 'gtk2_ardour') diff --git a/gtk2_ardour/export_channel_selector.cc b/gtk2_ardour/export_channel_selector.cc index 6f32ae783e..10e3135b53 100644 --- a/gtk2_ardour/export_channel_selector.cc +++ b/gtk2_ardour/export_channel_selector.cc @@ -110,8 +110,10 @@ PortExportChannelSelector::fill_route_list () /* Add master bus and then everything else */ - ARDOUR::IO* master = _session->master_out()->output().get(); - channel_view.add_route (master); + if (_session->master_out()) { + ARDOUR::IO* master = _session->master_out()->output().get(); + channel_view.add_route (master); + } for (RouteList::iterator it = routes.begin(); it != routes.end(); ++it) { if ((*it)->is_master () || (*it)->is_monitor ()) { diff --git a/libs/ardour/export_profile_manager.cc b/libs/ardour/export_profile_manager.cc index deeb3aea2b..388ffe2508 100644 --- a/libs/ardour/export_profile_manager.cc +++ b/libs/ardour/export_profile_manager.cc @@ -501,6 +501,8 @@ ExportProfileManager::init_channel_configs (XMLNodeList nodes) channel_configs.push_back (config); // Add master outs as default + if (!session.master_out()) { return false; } + IO* master_out = session.master_out()->output().get(); if (!master_out) { return false; } -- cgit v1.2.3 From f96a5c2a954c3e0c80b3461c5d70a08b15ed6cb2 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Mon, 6 May 2013 10:55:40 -0400 Subject: make ArdourDialog and ArdourWindow call ::relay_key_press() which fixes the "not-toggleable-on-first-show" and other issues --- gtk2_ardour/ardour_dialog.cc | 7 +++++++ gtk2_ardour/ardour_dialog.h | 3 ++- gtk2_ardour/ardour_window.cc | 6 ++++++ gtk2_ardour/ardour_window.h | 1 + 4 files changed, 16 insertions(+), 1 deletion(-) (limited to 'gtk2_ardour') diff --git a/gtk2_ardour/ardour_dialog.cc b/gtk2_ardour/ardour_dialog.cc index 07d5d47d6b..8231289c5a 100644 --- a/gtk2_ardour/ardour_dialog.cc +++ b/gtk2_ardour/ardour_dialog.cc @@ -26,6 +26,7 @@ #include "ardour_ui.h" #include "keyboard.h" #include "splash.h" +#include "utils.h" using namespace std; using namespace Gtk; @@ -58,6 +59,12 @@ ArdourDialog::~ArdourDialog () } } +bool +ArdourDialog::on_key_press_event (GdkEventKey* ev) +{ + return relay_key_press (ev, this); +} + bool ArdourDialog::on_enter_notify_event (GdkEventCrossing *ev) { diff --git a/gtk2_ardour/ardour_dialog.h b/gtk2_ardour/ardour_dialog.h index 1e01c8f625..40472f20c0 100644 --- a/gtk2_ardour/ardour_dialog.h +++ b/gtk2_ardour/ardour_dialog.h @@ -40,7 +40,8 @@ class ArdourDialog : public Gtk::Dialog, public ARDOUR::SessionHandlePtr bool on_enter_notify_event (GdkEventCrossing*); bool on_leave_notify_event (GdkEventCrossing*); - bool on_delete_event (GdkEventAny *); + bool on_delete_event (GdkEventAny*); + bool on_key_press_event (GdkEventKey*); void on_unmap (); void on_show (); diff --git a/gtk2_ardour/ardour_window.cc b/gtk2_ardour/ardour_window.cc index 705fdaa1f9..490fabb19b 100644 --- a/gtk2_ardour/ardour_window.cc +++ b/gtk2_ardour/ardour_window.cc @@ -53,6 +53,12 @@ ArdourWindow::~ArdourWindow () { } +bool +ArdourWindow::on_key_press_event (GdkEventKey* ev) +{ + return relay_key_press (ev, this); +} + bool ArdourWindow::on_enter_notify_event (GdkEventCrossing *ev) { diff --git a/gtk2_ardour/ardour_window.h b/gtk2_ardour/ardour_window.h index 68bf65d353..e113f724c8 100644 --- a/gtk2_ardour/ardour_window.h +++ b/gtk2_ardour/ardour_window.h @@ -43,6 +43,7 @@ class ArdourWindow : public Gtk::Window, public ARDOUR::SessionHandlePtr, public bool on_enter_notify_event (GdkEventCrossing*); bool on_leave_notify_event (GdkEventCrossing*); bool on_delete_event (GdkEventAny *); + bool on_key_press_event (GdkEventKey*); void on_unmap (); private: -- cgit v1.2.3 From 128b3749542f310ce2c3b66d9ba792c9bfd15cb9 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Mon, 6 May 2013 11:44:59 -0400 Subject: fix bad edit that caused simple proxy windows to fail/crash --- gtk2_ardour/window_manager.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'gtk2_ardour') diff --git a/gtk2_ardour/window_manager.h b/gtk2_ardour/window_manager.h index fb65a8d088..9f4382725d 100644 --- a/gtk2_ardour/window_manager.h +++ b/gtk2_ardour/window_manager.h @@ -161,12 +161,12 @@ class WindowManager } T* operator->() { - /* make return null */ - return dynamic_cast (_window); + return dynamic_cast (get(true)); } ARDOUR::SessionHandlePtr* session_handle () { - return dynamic_cast (get()); + /* may return null */ + return dynamic_cast (_window); } private: -- cgit v1.2.3 From 81f86b11d1eef3d75e774add89ec9b8e285490e9 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Mon, 6 May 2013 12:13:43 -0400 Subject: drop WIN_POS_MOUSE on a managed window if we have stored coordinates and after the first present() call --- gtk2_ardour/window_manager.cc | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'gtk2_ardour') diff --git a/gtk2_ardour/window_manager.cc b/gtk2_ardour/window_manager.cc index f50fe444a8..cb63f4f822 100644 --- a/gtk2_ardour/window_manager.cc +++ b/gtk2_ardour/window_manager.cc @@ -278,6 +278,11 @@ WindowManager::ProxyBase::setup () vistracker = new Gtkmm2ext::VisibilityTracker (*_window); + if (_width != -1 || _height != -1 || _x_off != -1 || _y_off != -1) { + /* cancel any mouse-based positioning */ + _window->set_position (Gtk::WIN_POS_NONE); + } + if (_width != -1 && _height != -1) { _window->set_default_size (_width, _height); } @@ -316,6 +321,9 @@ WindowManager::ProxyBase::present () Gtk::Window* win = get (true); win->show_all (); win->present (); + + /* turn off any mouse-based positioning */ + _window->set_position (Gtk::WIN_POS_NONE); } void -- cgit v1.2.3 From a902737db97e6bdd55493a1536242a26e26a0014 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Tue, 7 May 2013 13:01:18 -0400 Subject: various changes to window visibility mgmt, including use of the mixbus2 code for toggling editor + mixer windows. no longer attempt to track changes made outside of ardour, which is a lost cause --- gtk2_ardour/ardour_ui.cc | 11 ++- gtk2_ardour/ardour_ui.h | 1 + gtk2_ardour/ardour_ui_dialogs.cc | 130 ++++++++++++++++++++++------------- gtk2_ardour/editor.cc | 3 +- gtk2_ardour/editor.h | 3 +- gtk2_ardour/public_editor.cc | 1 + gtk2_ardour/public_editor.h | 4 +- gtk2_ardour/window_manager.cc | 20 ++++++ gtk2_ardour/window_manager.h | 3 + libs/gtkmm2ext/utils.cc | 4 +- libs/gtkmm2ext/visibility_tracker.cc | 2 +- 11 files changed, 124 insertions(+), 58 deletions(-) (limited to 'gtk2_ardour') diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc index 1d08d65215..abf2d44145 100644 --- a/gtk2_ardour/ardour_ui.cc +++ b/gtk2_ardour/ardour_ui.cc @@ -146,8 +146,15 @@ sigc::signal ARDOUR_UI::CloseAllDialogs; ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir) : Gtkmm2ext::UI (PROGRAM_NAME, argcp, argvp) - + , gui_object_state (new GUIObjectState) + + , _startup (0) + , engine (0) + , nsm (0) + , _was_dirty (false) + , _mixer_on_top (false) + , primary_clock (new MainClock (X_("primary"), false, X_("transport"), true, true, true, false, true)) , secondary_clock (new MainClock (X_("secondary"), false, X_("secondary"), true, true, false, false, true)) @@ -197,7 +204,6 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir) Gtkmm2ext::init(localedir); splash = 0; - _startup = 0; if (theArdourUI == 0) { theArdourUI = this; @@ -688,7 +694,6 @@ ARDOUR_UI::startup () app->ready (); nsm_url = getenv ("NSM_URL"); - nsm = 0; if (nsm_url) { nsm = new NSM_Client; diff --git a/gtk2_ardour/ardour_ui.h b/gtk2_ardour/ardour_ui.h index f2b2029170..4d624377c6 100644 --- a/gtk2_ardour/ardour_ui.h +++ b/gtk2_ardour/ardour_ui.h @@ -301,6 +301,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr Gtk::Tooltips _tooltips; NSM_Client *nsm; bool _was_dirty; + bool _mixer_on_top; void goto_editor_window (); void goto_mixer_window (); diff --git a/gtk2_ardour/ardour_ui_dialogs.cc b/gtk2_ardour/ardour_ui_dialogs.cc index 2e0d017d0c..ad469ff160 100644 --- a/gtk2_ardour/ardour_ui_dialogs.cc +++ b/gtk2_ardour/ardour_ui_dialogs.cc @@ -268,19 +268,21 @@ ARDOUR_UI::goto_editor_window () editor->show_window (); editor->present (); - flush_pending (); + /* mixer should now be on top */ + WindowManager::instance().set_transient_for (editor); + _mixer_on_top = false; } void ARDOUR_UI::goto_mixer_window () { - if (!editor) { - return; - } - - Glib::RefPtr win = editor->get_window (); + Glib::RefPtr win; Glib::RefPtr screen; + if (editor) { + win = editor->get_window (); + } + if (win) { screen = win->get_screen(); } else { @@ -295,10 +297,11 @@ ARDOUR_UI::goto_mixer_window () mixer->show_window (); mixer->present (); - flush_pending (); + /* mixer should now be on top */ + WindowManager::instance().set_transient_for (mixer); + _mixer_on_top = true; } - void ARDOUR_UI::toggle_mixer_window () { @@ -319,49 +322,80 @@ ARDOUR_UI::toggle_mixer_window () void ARDOUR_UI::toggle_editor_mixer () { - if (editor && mixer) { - - if (editor->get_screen() != mixer->get_screen()) { - // different screens, so don't do anything - return; - } - - /* See if they are obscuring each other */ - - gint ex, ey, ew, eh; - gint mx, my, mw, mh; - - editor->get_position (ex, ey); - editor->get_size (ew, eh); - - mixer->get_position (mx, my); - mixer->get_size (mw, mh); - - GdkRectangle e; - GdkRectangle m; - GdkRectangle r; - - e.x = ex; - e.y = ey; - e.width = ew; - e.height = eh; + bool obscuring = false; + /* currently, if windows are on different + screens then we do nothing; but in the + future we may want to bring the window + to the front or something, so I'm leaving this + variable for future use + */ + bool same_screen = true; + + if (editor && mixer) { - m.x = mx; - m.y = my; - m.width = mw; - m.height = mh; + /* remeber: Screen != Monitor (Screen is a separately rendered + * continuous geometry that make include 1 or more monitors. + */ - if (!gdk_rectangle_intersect (&e, &m, &r)) { - /* they do not intersect so do not toggle */ - return; + if (editor->get_screen() != mixer->get_screen() && (mixer->get_screen() != 0) && (editor->get_screen() != 0)) { + // different screens, so don't do anything + same_screen = false; + } else { + // they are on the same screen, see if they are obscuring each other + + gint ex, ey, ew, eh; + gint mx, my, mw, mh; + + editor->get_position (ex, ey); + editor->get_size (ew, eh); + + mixer->get_position (mx, my); + mixer->get_size (mw, mh); + + GdkRectangle e; + GdkRectangle m; + GdkRectangle r; + + e.x = ex; + e.y = ey; + e.width = ew; + e.height = eh; + + m.x = mx; + m.y = my; + m.width = mw; + m.height = mh; + + if (gdk_rectangle_intersect (&e, &m, &r)) { + obscuring = true; + } + } + } + + if (mixer && !mixer->not_visible() && mixer->property_has_toplevel_focus()) { + if (obscuring && same_screen) { + goto_editor_window(); + } + } else if (editor && !editor->not_visible() && editor->property_has_toplevel_focus()) { + if (obscuring && same_screen) { + goto_mixer_window(); + } + } else if (mixer && mixer->not_visible()) { + if (obscuring && same_screen) { + goto_mixer_window (); + } + } else if (editor && editor->not_visible()) { + if (obscuring && same_screen) { + goto_editor_window (); + } + } else if (obscuring && same_screen) { + //it's unclear what to do here, so just do the opposite of what we did last time (old behavior) + if (_mixer_on_top) { + goto_editor_window (); + } else { + goto_mixer_window (); } - } - - if (mixer && mixer->fully_visible()) { - goto_editor_window (); - } else { - goto_mixer_window (); - } + } } void diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc index 170a14d2c8..761404ba18 100644 --- a/gtk2_ardour/editor.cc +++ b/gtk2_ardour/editor.cc @@ -229,8 +229,7 @@ pane_size_watcher (Paned* pane) } Editor::Editor () - : VisibilityTracker (*((Gtk::Window*) this)) - , _join_object_range_state (JOIN_OBJECT_RANGE_NONE) + : _join_object_range_state (JOIN_OBJECT_RANGE_NONE) /* time display buttons */ , minsec_label (_("Mins:Secs")) diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index 6c0a52fa42..f9ce1da514 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -43,7 +43,6 @@ #include "gtkmm2ext/dndtreeview.h" #include "gtkmm2ext/stateful_button.h" #include "gtkmm2ext/bindings.h" -#include "gtkmm2ext/visibility_tracker.h" #include "pbd/stateful.h" #include "pbd/signals.h" @@ -137,7 +136,7 @@ class TimeSelection; class RegionLayeringOrderEditor; class VerboseCursor; -class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARDOUR::SessionHandlePtr, public Gtkmm2ext::VisibilityTracker +class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARDOUR::SessionHandlePtr { public: Editor (); diff --git a/gtk2_ardour/public_editor.cc b/gtk2_ardour/public_editor.cc index dc468e4a83..6c5d528e1e 100644 --- a/gtk2_ardour/public_editor.cc +++ b/gtk2_ardour/public_editor.cc @@ -30,6 +30,7 @@ sigc::signal PublicEditor::DropDownKeys; PublicEditor::PublicEditor () : Window (Gtk::WINDOW_TOPLEVEL) + , VisibilityTracker (*((Gtk::Window*)this)) { } diff --git a/gtk2_ardour/public_editor.h b/gtk2_ardour/public_editor.h index a96e451a31..7a4dd5d59b 100644 --- a/gtk2_ardour/public_editor.h +++ b/gtk2_ardour/public_editor.h @@ -39,6 +39,8 @@ #include "pbd/statefuldestructible.h" +#include "gtkmm2ext/visibility_tracker.h" + #include "editing.h" #include "canvas.h" #include "selection.h" @@ -97,7 +99,7 @@ using ARDOUR::framecnt_t; * of PublicEditor need not be recompiled if private methods or member variables * change. */ -class PublicEditor : public Gtk::Window, public PBD::StatefulDestructible { +class PublicEditor : public Gtk::Window, public PBD::StatefulDestructible, public Gtkmm2ext::VisibilityTracker { public: PublicEditor (); virtual ~PublicEditor (); diff --git a/gtk2_ardour/window_manager.cc b/gtk2_ardour/window_manager.cc index cb63f4f822..627e9a1744 100644 --- a/gtk2_ardour/window_manager.cc +++ b/gtk2_ardour/window_manager.cc @@ -112,6 +112,26 @@ WindowManager::set_session (ARDOUR::Session* s) } } +void +WindowManager::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) { + win->set_transient_for (*parent); + } + } + } else { + for (Windows::const_iterator i = _windows.begin(); i != _windows.end(); ++i) { + Gtk::Window* win = (*i)->get(); + if (win) { + gtk_window_set_transient_for (win->gobj(), 0); + } + } + } +} + /*-----------------------*/ WindowManager::ProxyBase::ProxyBase (const string& name, const std::string& menu_name) diff --git a/gtk2_ardour/window_manager.h b/gtk2_ardour/window_manager.h index 9f4382725d..082407b61d 100644 --- a/gtk2_ardour/window_manager.h +++ b/gtk2_ardour/window_manager.h @@ -180,6 +180,9 @@ class WindowManager void set_session (ARDOUR::Session*); void add_state (XMLNode&) const; + /* HACK HACK HACK */ + void set_transient_for (Gtk::Window*); + private: typedef std::list Windows; Windows _windows; diff --git a/libs/gtkmm2ext/utils.cc b/libs/gtkmm2ext/utils.cc index 4bc9113875..f0a09d5685 100644 --- a/libs/gtkmm2ext/utils.cc +++ b/libs/gtkmm2ext/utils.cc @@ -23,7 +23,6 @@ #include #include -#include #include #include #include @@ -32,6 +31,8 @@ #include #include +#include "gtkmm2ext/utils.h" + #include "i18n.h" using namespace std; @@ -659,3 +660,4 @@ Gtkmm2ext::disable_tooltips () { gtk_rc_parse_string ("gtk-enable-tooltips = 0"); } + diff --git a/libs/gtkmm2ext/visibility_tracker.cc b/libs/gtkmm2ext/visibility_tracker.cc index 8c7c493812..aac76a5021 100644 --- a/libs/gtkmm2ext/visibility_tracker.cc +++ b/libs/gtkmm2ext/visibility_tracker.cc @@ -35,7 +35,7 @@ bool VisibilityTracker::handle_visibility_notify_event (GdkEventVisibility* ev) { _visibility = ev->state; - std::cerr << "VT: " << _window.get_title() << " vis event, fv = " << fully_visible() << " pv = " << partially_visible() << " nv = " << not_visible() << std::endl; + // std::cerr << "VT: " << _window.get_title() << " vis event, fv = " << fully_visible() << " pv = " << partially_visible() << " nv = " << not_visible() << std::endl; return false; } -- cgit v1.2.3 From 87d502c15bf78f84a67566e0f2a8d51a820ad14a Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Tue, 7 May 2013 18:09:12 -0400 Subject: work work on window mgmt: offer the change to mark all floating windows as Dialogs (in th theme manager), and mark ArdourWindow and ArdourDialog as transient-for on creation, based on current WindowManager (ardour-object) settings --- gtk2_ardour/ardour_dialog.cc | 10 +++++++++- gtk2_ardour/ardour_ui.cc | 14 ++++++++------ gtk2_ardour/ardour_window.cc | 17 +++++++++++++++-- gtk2_ardour/theme_manager.cc | 19 +++++++++++++++++++ gtk2_ardour/theme_manager.h | 2 ++ gtk2_ardour/ui_config_vars.h | 1 + gtk2_ardour/window_manager.cc | 3 +++ gtk2_ardour/window_manager.h | 2 ++ 8 files changed, 59 insertions(+), 9 deletions(-) (limited to 'gtk2_ardour') diff --git a/gtk2_ardour/ardour_dialog.cc b/gtk2_ardour/ardour_dialog.cc index 8231289c5a..c8a25f1874 100644 --- a/gtk2_ardour/ardour_dialog.cc +++ b/gtk2_ardour/ardour_dialog.cc @@ -112,6 +112,14 @@ void ArdourDialog::init () { set_border_width (10); - // set_type_hint (Gdk::WINDOW_TYPE_HINT_DIALOG); + + set_type_hint (Gdk::WINDOW_TYPE_HINT_DIALOG); + + Gtk::Window* parent = WindowManager::instance().transient_parent(); + + if (parent) { + set_transient_for (*parent); + } + ARDOUR_UI::CloseAllDialogs.connect (sigc::bind (sigc::mem_fun (*this, &ArdourDialog::response), RESPONSE_CANCEL)); } diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc index abf2d44145..3540dc30f2 100644 --- a/gtk2_ardour/ardour_ui.cc +++ b/gtk2_ardour/ardour_ui.cc @@ -149,12 +149,6 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir) , gui_object_state (new GUIObjectState) - , _startup (0) - , engine (0) - , nsm (0) - , _was_dirty (false) - , _mixer_on_top (false) - , primary_clock (new MainClock (X_("primary"), false, X_("transport"), true, true, true, false, true)) , secondary_clock (new MainClock (X_("secondary"), false, X_("secondary"), true, true, false, false, true)) @@ -162,6 +156,14 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir) , big_clock (new AudioClock (X_("bigclock"), false, "big", true, true, false, false)) + /* start of private members */ + + , _startup (0) + , engine (0) + , nsm (0) + , _was_dirty (false) + , _mixer_on_top (false) + /* transport */ , roll_controllable (new TransportControllable ("transport roll", *this, TransportControllable::Roll)) diff --git a/gtk2_ardour/ardour_window.cc b/gtk2_ardour/ardour_window.cc index 490fabb19b..532d9828fe 100644 --- a/gtk2_ardour/ardour_window.cc +++ b/gtk2_ardour/ardour_window.cc @@ -102,8 +102,21 @@ ArdourWindow::init () vice versa. */ - set_type_hint (Gdk::WINDOW_TYPE_HINT_UTILITY); - + if (ARDOUR_UI::instance()->config()->all_floating_windows_are_dialogs.get()) { + cerr << "AW " << get_title() << " => dialog\n"; + set_type_hint (Gdk::WINDOW_TYPE_HINT_DIALOG); + } else { + cerr << "AW " << get_title() << " => utility\n"; + set_type_hint (Gdk::WINDOW_TYPE_HINT_UTILITY); + } + + Gtk::Window* parent = WindowManager::instance().transient_parent(); + + if (parent) { + cerr << "\tmarked as transient for " << parent->get_title() << endl; + set_transient_for (*parent); + } + ARDOUR_UI::CloseAllDialogs.connect (sigc::mem_fun (*this, &ArdourWindow::hide)); } diff --git a/gtk2_ardour/theme_manager.cc b/gtk2_ardour/theme_manager.cc index 1fc06bf0a8..5f707e3212 100644 --- a/gtk2_ardour/theme_manager.cc +++ b/gtk2_ardour/theme_manager.cc @@ -31,6 +31,7 @@ #include "gtkmm2ext/cell_renderer_color_selector.h" #include "pbd/file_utils.h" +#include "pbd/compose.h" #include "ardour/filesystem_paths.h" @@ -57,6 +58,7 @@ ThemeManager::ThemeManager() , light_button (_("Light Theme")) , reset_button (_("Restore Defaults")) , flat_buttons (_("Draw \"flat\" buttons")) + , all_dialogs (_("All floating windows are dialogs")) , gradient_waveforms (_("Draw waveforms with color gradient")) { set_title (_("Theme Manager")); @@ -92,6 +94,9 @@ ThemeManager::ThemeManager() vbox->set_homogeneous (false); vbox->pack_start (theme_selection_hbox, PACK_SHRINK); vbox->pack_start (reset_button, PACK_SHRINK); +#ifndef __APPLE__ + vbox->pack_start (all_dialogs, PACK_SHRINK); +#endif vbox->pack_start (flat_buttons, PACK_SHRINK); vbox->pack_start (gradient_waveforms, PACK_SHRINK); vbox->pack_start (scroller); @@ -111,8 +116,14 @@ ThemeManager::ThemeManager() light_button.signal_toggled().connect (sigc::mem_fun (*this, &ThemeManager::on_light_theme_button_toggled)); reset_button.signal_clicked().connect (sigc::mem_fun (*this, &ThemeManager::reset_canvas_colors)); flat_buttons.signal_toggled().connect (sigc::mem_fun (*this, &ThemeManager::on_flat_buttons_toggled)); + all_dialogs.signal_toggled().connect (sigc::mem_fun (*this, &ThemeManager::on_all_dialogs_toggled)); gradient_waveforms.signal_toggled().connect (sigc::mem_fun (*this, &ThemeManager::on_gradient_waveforms_toggled)); + Gtkmm2ext::UI::instance()->set_tip (all_dialogs, + string_compose (_("Mark all floating windows to be type \"Dialog\" rather than using \"Utility\" for some.\n" + "This may help with some window managers. This requires a restart of %1 to take effect"), + PROGRAM_NAME)); + set_size_request (-1, 400); setup_theme (); } @@ -248,6 +259,13 @@ ThemeManager::on_flat_buttons_toggled () gtk_rc_reset_styles (gtk_settings_get_default()); } +void +ThemeManager::on_all_dialogs_toggled () +{ + ARDOUR_UI::config()->all_floating_windows_are_dialogs.set (all_dialogs.get_active()); + ARDOUR_UI::config()->set_dirty (); +} + void ThemeManager::on_gradient_waveforms_toggled () { @@ -369,6 +387,7 @@ ThemeManager::setup_theme () } flat_buttons.set_active (ARDOUR_UI::config()->flat_buttons.get()); + all_dialogs.set_active (ARDOUR_UI::config()->all_floating_windows_are_dialogs.get()); gradient_waveforms.set_active (ARDOUR_UI::config()->gradient_waveforms.get()); load_rc_file(rcfile, false); diff --git a/gtk2_ardour/theme_manager.h b/gtk2_ardour/theme_manager.h index d08713dc3e..04aa3ed770 100644 --- a/gtk2_ardour/theme_manager.h +++ b/gtk2_ardour/theme_manager.h @@ -43,6 +43,7 @@ class ThemeManager : public ArdourWindow void on_dark_theme_button_toggled (); void on_light_theme_button_toggled (); void on_flat_buttons_toggled (); + void on_all_dialogs_toggled (); void on_gradient_waveforms_toggled (); private: @@ -70,6 +71,7 @@ class ThemeManager : public ArdourWindow Gtk::RadioButton light_button; Gtk::Button reset_button; Gtk::CheckButton flat_buttons; + Gtk::CheckButton all_dialogs; Gtk::CheckButton gradient_waveforms; bool button_press_event (GdkEventButton*); diff --git a/gtk2_ardour/ui_config_vars.h b/gtk2_ardour/ui_config_vars.h index f64e1ca141..ad266d9674 100644 --- a/gtk2_ardour/ui_config_vars.h +++ b/gtk2_ardour/ui_config_vars.h @@ -20,4 +20,5 @@ UI_CONFIG_VARIABLE(std::string, ui_rc_file, "ui-rc-file", "ardour3_ui_dark.rc") UI_CONFIG_VARIABLE(bool, flat_buttons, "flat-buttons", false) UI_CONFIG_VARIABLE(bool, gradient_waveforms, "gradient-waveforms", false) +UI_CONFIG_VARIABLE(bool, all_floating_windows_are_dialogs, "all-floating-windows-are-dialogs", false) diff --git a/gtk2_ardour/window_manager.cc b/gtk2_ardour/window_manager.cc index 627e9a1744..1859eb85f1 100644 --- a/gtk2_ardour/window_manager.cc +++ b/gtk2_ardour/window_manager.cc @@ -43,6 +43,7 @@ WindowManager::instance () } WindowManager::WindowManager () + : current_transient_parent (0) { } @@ -130,6 +131,8 @@ WindowManager::set_transient_for (Gtk::Window* parent) } } } + + current_transient_parent = parent; } /*-----------------------*/ diff --git a/gtk2_ardour/window_manager.h b/gtk2_ardour/window_manager.h index 082407b61d..1b1b2566ab 100644 --- a/gtk2_ardour/window_manager.h +++ b/gtk2_ardour/window_manager.h @@ -182,11 +182,13 @@ class WindowManager /* HACK HACK HACK */ void set_transient_for (Gtk::Window*); + Gtk::Window* transient_parent() const { return current_transient_parent; } private: typedef std::list Windows; Windows _windows; Glib::RefPtr window_actions; + Gtk::Window* current_transient_parent; WindowManager(); ~WindowManager(); -- cgit v1.2.3 From bedc7b170eb72f1b9aaaf3872c7160aa1661a4e1 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Tue, 7 May 2013 22:09:16 -0400 Subject: 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 --- gtk2_ardour/ardour_dialog.cc | 8 +- gtk2_ardour/ardour_dialog.h | 5 + gtk2_ardour/ardour_ui.cc | 32 ++--- gtk2_ardour/ardour_ui.h | 28 ++-- gtk2_ardour/ardour_ui_dialogs.cc | 6 +- gtk2_ardour/ardour_ui_ed.cc | 2 +- gtk2_ardour/ardour_window.cc | 9 +- gtk2_ardour/ardour_window.h | 7 +- gtk2_ardour/processor_box.cc | 8 +- gtk2_ardour/processor_box.h | 2 +- gtk2_ardour/window_manager.cc | 93 ++++++++----- gtk2_ardour/window_manager.h | 283 +++++++++++++++++++++------------------ 12 files changed, 277 insertions(+), 206 deletions(-) (limited to 'gtk2_ardour') diff --git a/gtk2_ardour/ardour_dialog.cc b/gtk2_ardour/ardour_dialog.cc index c8a25f1874..3690ee023b 100644 --- a/gtk2_ardour/ardour_dialog.cc +++ b/gtk2_ardour/ardour_dialog.cc @@ -27,6 +27,7 @@ #include "keyboard.h" #include "splash.h" #include "utils.h" +#include "window_manager.h" using namespace std; using namespace Gtk; @@ -34,6 +35,7 @@ using namespace Gtkmm2ext; ArdourDialog::ArdourDialog (string title, bool modal, bool use_seperator) : Dialog (title, modal, use_seperator) + , proxy (0) , _splash_pushed (false) { init (); @@ -57,6 +59,7 @@ ArdourDialog::~ArdourDialog () spl->pop_front(); } } + WM::Manager::instance().remove (proxy); } bool @@ -115,11 +118,14 @@ ArdourDialog::init () set_type_hint (Gdk::WINDOW_TYPE_HINT_DIALOG); - Gtk::Window* parent = WindowManager::instance().transient_parent(); + Gtk::Window* parent = WM::Manager::instance().transient_parent(); if (parent) { set_transient_for (*parent); } ARDOUR_UI::CloseAllDialogs.connect (sigc::bind (sigc::mem_fun (*this, &ArdourDialog::response), RESPONSE_CANCEL)); + + proxy = new WM::ProxyTemporary (get_title(), this); + WM::Manager::instance().register_window (proxy); } diff --git a/gtk2_ardour/ardour_dialog.h b/gtk2_ardour/ardour_dialog.h index 40472f20c0..d994c0a6d1 100644 --- a/gtk2_ardour/ardour_dialog.h +++ b/gtk2_ardour/ardour_dialog.h @@ -25,6 +25,10 @@ #include "ardour/session_handle.h" +namespace WM { + class ProxyTemporary; +} + /* * This virtual parent class is so that each dialog box uses the * same mechanism to declare its closing. It shares a common @@ -46,6 +50,7 @@ class ArdourDialog : public Gtk::Dialog, public ARDOUR::SessionHandlePtr void on_show (); private: + WM::ProxyTemporary* proxy; bool _splash_pushed; void init (); diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc index 3540dc30f2..250a94baa4 100644 --- a/gtk2_ardour/ardour_ui.cc +++ b/gtk2_ardour/ardour_ui.cc @@ -344,20 +344,20 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir) midi_port_matrix.set_state (*ui_xml); } - WindowManager::instance().register_window (&theme_manager); - WindowManager::instance().register_window (&key_editor); - WindowManager::instance().register_window (&rc_option_editor); - WindowManager::instance().register_window (&session_option_editor); - WindowManager::instance().register_window (&speaker_config_window); - WindowManager::instance().register_window (&about); - WindowManager::instance().register_window (&add_route_dialog); - WindowManager::instance().register_window (&add_video_dialog); - WindowManager::instance().register_window (&route_params); - WindowManager::instance().register_window (&bundle_manager); - WindowManager::instance().register_window (&location_ui); - WindowManager::instance().register_window (&big_clock_window); - WindowManager::instance().register_window (&audio_port_matrix); - WindowManager::instance().register_window (&midi_port_matrix); + WM::Manager::instance().register_window (&theme_manager); + WM::Manager::instance().register_window (&key_editor); + WM::Manager::instance().register_window (&rc_option_editor); + WM::Manager::instance().register_window (&session_option_editor); + WM::Manager::instance().register_window (&speaker_config_window); + WM::Manager::instance().register_window (&about); + WM::Manager::instance().register_window (&add_route_dialog); + WM::Manager::instance().register_window (&add_video_dialog); + WM::Manager::instance().register_window (&route_params); + WM::Manager::instance().register_window (&bundle_manager); + WM::Manager::instance().register_window (&location_ui); + WM::Manager::instance().register_window (&big_clock_window); + WM::Manager::instance().register_window (&audio_port_matrix); + WM::Manager::instance().register_window (&midi_port_matrix); /* We need to instantiate the theme manager because it loads our theme files. This should really change so that its window @@ -753,7 +753,7 @@ ARDOUR_UI::startup () goto_editor_window (); - WindowManager::instance().show_visible (); + WM::Manager::instance().show_visible (); /* We have to do this here since goto_editor_window() ends up calling show_all() on the * editor window, and we may want stuff to be hidden. @@ -2336,7 +2336,7 @@ ARDOUR_UI::save_state (const string & name, bool switch_to_it) { XMLNode* node = new XMLNode (X_("UI")); - WindowManager::instance().add_state (*node); + WM::Manager::instance().add_state (*node); node->add_child_nocopy (gui_object_state->get_state()); diff --git a/gtk2_ardour/ardour_ui.h b/gtk2_ardour/ardour_ui.h index 4d624377c6..0ed5d145b4 100644 --- a/gtk2_ardour/ardour_ui.h +++ b/gtk2_ardour/ardour_ui.h @@ -572,23 +572,23 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr /* Dialogs that can be created via new */ - WindowManager::Proxy speaker_config_window; - WindowManager::Proxy theme_manager; - WindowManager::Proxy key_editor; - WindowManager::Proxy rc_option_editor; - WindowManager::Proxy add_route_dialog; - WindowManager::Proxy about; - WindowManager::Proxy location_ui; - WindowManager::Proxy route_params; + WM::Proxy speaker_config_window; + WM::Proxy theme_manager; + WM::Proxy key_editor; + WM::Proxy rc_option_editor; + WM::Proxy add_route_dialog; + WM::Proxy about; + WM::Proxy location_ui; + WM::Proxy route_params; /* Windows/Dialogs that require a creator method */ - WindowManager::ProxyWithConstructor session_option_editor; - WindowManager::ProxyWithConstructor add_video_dialog; - WindowManager::ProxyWithConstructor bundle_manager; - WindowManager::ProxyWithConstructor big_clock_window; - WindowManager::ProxyWithConstructor audio_port_matrix; - WindowManager::ProxyWithConstructor midi_port_matrix; + WM::ProxyWithConstructor session_option_editor; + WM::ProxyWithConstructor add_video_dialog; + WM::ProxyWithConstructor bundle_manager; + WM::ProxyWithConstructor big_clock_window; + WM::ProxyWithConstructor audio_port_matrix; + WM::ProxyWithConstructor midi_port_matrix; /* creator methods */ diff --git a/gtk2_ardour/ardour_ui_dialogs.cc b/gtk2_ardour/ardour_ui_dialogs.cc index ad469ff160..3ff625a207 100644 --- a/gtk2_ardour/ardour_ui_dialogs.cc +++ b/gtk2_ardour/ardour_ui_dialogs.cc @@ -95,7 +95,7 @@ ARDOUR_UI::set_session (Session *s) } AutomationWatch::instance().set_session (s); - WindowManager::instance().set_session (s); + WM::Manager::instance().set_session (s); if (shuttle_box) { shuttle_box->set_session (s); @@ -269,7 +269,7 @@ ARDOUR_UI::goto_editor_window () editor->show_window (); editor->present (); /* mixer should now be on top */ - WindowManager::instance().set_transient_for (editor); + WM::Manager::instance().set_transient_for (editor); _mixer_on_top = false; } @@ -298,7 +298,7 @@ ARDOUR_UI::goto_mixer_window () mixer->show_window (); mixer->present (); /* mixer should now be on top */ - WindowManager::instance().set_transient_for (mixer); + WM::Manager::instance().set_transient_for (mixer); _mixer_on_top = true; } diff --git a/gtk2_ardour/ardour_ui_ed.cc b/gtk2_ardour/ardour_ui_ed.cc index 9d1e8c3d8a..84f73391a4 100644 --- a/gtk2_ardour/ardour_ui_ed.cc +++ b/gtk2_ardour/ardour_ui_ed.cc @@ -612,7 +612,7 @@ ARDOUR_UI::save_ardour_state () /* Windows */ - WindowManager::instance().add_state (*window_node); + WM::Manager::instance().add_state (*window_node); /* tearoffs */ diff --git a/gtk2_ardour/ardour_window.cc b/gtk2_ardour/ardour_window.cc index 532d9828fe..3d33b14e60 100644 --- a/gtk2_ardour/ardour_window.cc +++ b/gtk2_ardour/ardour_window.cc @@ -51,6 +51,7 @@ ArdourWindow::ArdourWindow (Gtk::Window& parent, string /*title*/) ArdourWindow::~ArdourWindow () { + WM::Manager::instance().remove (proxy); } bool @@ -103,20 +104,20 @@ ArdourWindow::init () */ if (ARDOUR_UI::instance()->config()->all_floating_windows_are_dialogs.get()) { - cerr << "AW " << get_title() << " => dialog\n"; set_type_hint (Gdk::WINDOW_TYPE_HINT_DIALOG); } else { - cerr << "AW " << get_title() << " => utility\n"; set_type_hint (Gdk::WINDOW_TYPE_HINT_UTILITY); } - Gtk::Window* parent = WindowManager::instance().transient_parent(); + Gtk::Window* parent = WM::Manager::instance().transient_parent(); if (parent) { - cerr << "\tmarked as transient for " << parent->get_title() << endl; set_transient_for (*parent); } ARDOUR_UI::CloseAllDialogs.connect (sigc::mem_fun (*this, &ArdourWindow::hide)); + + proxy = new WM::ProxyTemporary (get_title(), this); + WM::Manager::instance().register_window (proxy); } diff --git a/gtk2_ardour/ardour_window.h b/gtk2_ardour/ardour_window.h index e113f724c8..c90eb3c049 100644 --- a/gtk2_ardour/ardour_window.h +++ b/gtk2_ardour/ardour_window.h @@ -27,6 +27,10 @@ #include "ardour/session_handle.h" +namespace WM { + class ProxyTemporary; +} + /** * This virtual parent class is so that each window uses the * same mechanism to declare its closing. It shares a common @@ -47,7 +51,8 @@ class ArdourWindow : public Gtk::Window, public ARDOUR::SessionHandlePtr, public void on_unmap (); private: - void init (); + WM::ProxyTemporary* proxy; + void init (); }; #endif // __ardour_window_h__ diff --git a/gtk2_ardour/processor_box.cc b/gtk2_ardour/processor_box.cc index 07bb0cadde..2782d2cff8 100644 --- a/gtk2_ardour/processor_box.cc +++ b/gtk2_ardour/processor_box.cc @@ -1378,7 +1378,7 @@ ProcessorBox::redisplay_processors () ++j; if (!(*i)->marked) { - WindowManager::instance().remove (*i); + WM::Manager::instance().remove (*i); delete *i; _processor_window_info.erase (i); } @@ -1451,7 +1451,7 @@ ProcessorBox::maybe_add_processor_to_ui_list (boost::weak_ptr w) } _processor_window_info.push_back (wp); - WindowManager::instance().register_window (wp); + WM::Manager::instance().register_window (wp); } void @@ -2624,7 +2624,7 @@ ProcessorBox::update_gui_object_state (ProcessorEntry* entry) } ProcessorWindowProxy::ProcessorWindowProxy (string const & name, ProcessorBox* box, boost::weak_ptr processor) - : WindowManager::ProxyBase (name, string()) + : WM::ProxyBase (name, string()) , marked (false) , _processor_box (box) , _processor (processor) @@ -2678,5 +2678,5 @@ ProcessorWindowProxy::toggle () drop_window (); } - WindowManager::ProxyBase::toggle (); + WM::ProxyBase::toggle (); } diff --git a/gtk2_ardour/processor_box.h b/gtk2_ardour/processor_box.h index 44d6a0ab6a..c279ffa917 100644 --- a/gtk2_ardour/processor_box.h +++ b/gtk2_ardour/processor_box.h @@ -75,7 +75,7 @@ namespace ARDOUR { class ProcessorBox; -class ProcessorWindowProxy : public WindowManager::ProxyBase +class ProcessorWindowProxy : public WM::ProxyBase { public: ProcessorWindowProxy (std::string const &, ProcessorBox *, boost::weak_ptr); 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 (*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 act) +ProxyBase::set_action (Glib::RefPtr 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 (_window); + if (aw) { return aw; } + ArdourDialog* ad = dynamic_cast (_window); + if (ad) { return ad; } + return 0; +} diff --git a/gtk2_ardour/window_manager.h b/gtk2_ardour/window_manager.h index 1b1b2566ab..7138a95e7b 100644 --- a/gtk2_ardour/window_manager.h +++ b/gtk2_ardour/window_manager.h @@ -43,136 +43,15 @@ namespace ARDOUR { class SessionHandlePtr; } -class WindowManager -{ - public: - static WindowManager& instance(); - - class ProxyBase : public sigc::trackable { - public: - ProxyBase (const std::string& name, const std::string& menu_name); - ProxyBase (const std::string& name, const std::string& menu_name, const XMLNode&); - virtual ~ProxyBase(); - - void show (); - void show_all (); - void hide (); - void present (); - void maybe_show (); - - bool visible() const { return _visible; } - const std::string& name() const { return _name; } - const std::string& menu_name() const { return _menu_name; } - - std::string action_name() const; - void set_action (Glib::RefPtr); - Glib::RefPtr action() const { return _action; }; - - void drop_window (); - void use_window (Gtk::Window&); - - virtual Gtk::Window* get (bool create = false) = 0; - - virtual void toggle (); - - void set_state (const XMLNode&); - XMLNode& get_state () const; - - virtual ARDOUR::SessionHandlePtr* session_handle () = 0; - - operator bool() const { return _window != 0; } +namespace WM { - protected: - std::string _name; - std::string _menu_name; - Glib::RefPtr _action; - Gtk::Window* _window; - mutable bool _visible; ///< true if the window should be visible on startup - mutable int _x_off; ///< x position - mutable int _y_off; ///< y position - mutable int _width; ///< width - mutable int _height; ///< height - Gtkmm2ext::VisibilityTracker* vistracker; +class ProxyBase; - void setup (); - }; +class Manager +{ + public: + static Manager& instance(); - template - class ProxyWithConstructor: public ProxyBase { - public: - ProxyWithConstructor (const std::string& name, const std::string& menu_name, const boost::function& c) - : ProxyBase (name, menu_name) , creator (c) {} - - ProxyWithConstructor (const std::string& name, const std::string& menu_name, const boost::function& c, const XMLNode* node) - : ProxyBase (name, menu_name, node) , creator (c) {} - - Gtk::Window* get (bool create = false) { - if (!_window) { - if (!create) { - return 0; - } - - _window = creator (); - - if (_window) { - setup (); - } - } - - return _window; - } - - T* operator->() { - return dynamic_cast (get (true)); - } - - ARDOUR::SessionHandlePtr* session_handle () { - /* may return null */ - return dynamic_cast (_window); - } - - private: - boost::function creator; - }; - - template - class Proxy : public ProxyBase { - public: - Proxy (const std::string& name, const std::string& menu_name) - : ProxyBase (name, menu_name) {} - - Proxy (const std::string& name, const std::string& menu_name, const XMLNode* node) - : ProxyBase (name, menu_name, node) {} - - Gtk::Window* get (bool create = false) { - if (!_window) { - if (!create) { - return 0; - } - - _window = new T (); - - if (_window) { - setup (); - } - } - - return _window; - } - - T* operator->() { - return dynamic_cast (get(true)); - } - - ARDOUR::SessionHandlePtr* session_handle () { - /* may return null */ - return dynamic_cast (_window); - } - - private: - boost::function creator; - }; - void register_window (ProxyBase*); void remove (const ProxyBase*); void toggle_window (ProxyBase*); @@ -190,10 +69,154 @@ class WindowManager Glib::RefPtr window_actions; Gtk::Window* current_transient_parent; - WindowManager(); - ~WindowManager(); + Manager(); + ~Manager(); - static WindowManager* _instance; + static Manager* _instance; +}; + +class ProxyBase : public sigc::trackable { + public: + ProxyBase (const std::string& name, const std::string& menu_name); + ProxyBase (const std::string& name, const std::string& menu_name, const XMLNode&); + virtual ~ProxyBase(); + + void show (); + void show_all (); + void hide (); + void present (); + void maybe_show (); + + bool visible() const { return _visible; } + const std::string& name() const { return _name; } + const std::string& menu_name() const { return _menu_name; } + + std::string action_name() const; + void set_action (Glib::RefPtr); + Glib::RefPtr action() const { return _action; }; + + void drop_window (); + void use_window (Gtk::Window&); + + virtual Gtk::Window* get (bool create = false) = 0; + + virtual void toggle (); + + void set_state (const XMLNode&); + XMLNode& get_state () const; + + virtual ARDOUR::SessionHandlePtr* session_handle () = 0; + + operator bool() const { return _window != 0; } + + protected: + std::string _name; + std::string _menu_name; + Glib::RefPtr _action; + Gtk::Window* _window; + mutable bool _visible; ///< true if the window should be visible on startup + mutable int _x_off; ///< x position + mutable int _y_off; ///< y position + mutable int _width; ///< width + mutable int _height; ///< height + Gtkmm2ext::VisibilityTracker* vistracker; + + void setup (); }; + +class ProxyTemporary: public ProxyBase { + public: + ProxyTemporary (const std::string& name, Gtk::Window* win); + ~ProxyTemporary(); + + Gtk::Window* get (bool create = false) { + (void) create; + return _window; + } + + Gtk::Window* operator->() { + return _window; + } + + ARDOUR::SessionHandlePtr* session_handle (); +}; + +template +class ProxyWithConstructor: public ProxyBase { + public: + ProxyWithConstructor (const std::string& name, const std::string& menu_name, const boost::function& c) + : ProxyBase (name, menu_name) , creator (c) {} + + ProxyWithConstructor (const std::string& name, const std::string& menu_name, const boost::function& c, const XMLNode* node) + : ProxyBase (name, menu_name, node) , creator (c) {} + + Gtk::Window* get (bool create = false) { + if (!_window) { + if (!create) { + return 0; + } + + _window = creator (); + + if (_window) { + setup (); + } + } + + return _window; + } + + T* operator->() { + return dynamic_cast (get (true)); + } + + ARDOUR::SessionHandlePtr* session_handle () { + /* may return null */ + return dynamic_cast (_window); + } + + private: + boost::function creator; +}; + +template +class Proxy : public ProxyBase { + public: + Proxy (const std::string& name, const std::string& menu_name) + : ProxyBase (name, menu_name) {} + + Proxy (const std::string& name, const std::string& menu_name, const XMLNode* node) + : ProxyBase (name, menu_name, node) {} + + Gtk::Window* get (bool create = false) { + if (!_window) { + if (!create) { + return 0; + } + + _window = new T (); + + if (_window) { + setup (); + } + } + + return _window; + } + + T* operator->() { + return dynamic_cast (get(true)); + } + + ARDOUR::SessionHandlePtr* session_handle () { + /* may return null */ + return dynamic_cast (_window); + } + + private: + boost::function creator; +}; + +} /* namespace */ #endif /* __gtk2_ardour_window_manager_h__ */ -- cgit v1.2.3 From b08c71af0295fbfc800081af08b9bad80ce20292 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Tue, 7 May 2013 22:30:01 -0400 Subject: don't set transient-for on OS X, where it is not necessary --- gtk2_ardour/window_manager.cc | 2 ++ 1 file changed, 2 insertions(+) (limited to 'gtk2_ardour') diff --git a/gtk2_ardour/window_manager.cc b/gtk2_ardour/window_manager.cc index 90345acff0..4a3d5f6ce4 100644 --- a/gtk2_ardour/window_manager.cc +++ b/gtk2_ardour/window_manager.cc @@ -124,6 +124,7 @@ Manager::set_session (ARDOUR::Session* s) void Manager::set_transient_for (Gtk::Window* parent) { +#ifndef __APPLE__ if (parent) { for (Windows::const_iterator i = _windows.begin(); i != _windows.end(); ++i) { Gtk::Window* win = (*i)->get(); @@ -142,6 +143,7 @@ Manager::set_transient_for (Gtk::Window* parent) } current_transient_parent = parent; +#endif } /*-------------------------*/ -- cgit v1.2.3 From a70192adff7db3962707541b198e93dd94859104 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Wed, 8 May 2013 10:47:45 -0400 Subject: tweaks for OS X menu building --- gtk2_ardour/ardour_ui_ed.cc | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'gtk2_ardour') diff --git a/gtk2_ardour/ardour_ui_ed.cc b/gtk2_ardour/ardour_ui_ed.cc index 84f73391a4..b3621c1779 100644 --- a/gtk2_ardour/ardour_ui_ed.cc +++ b/gtk2_ardour/ardour_ui_ed.cc @@ -579,13 +579,17 @@ ARDOUR_UI::use_menubar_as_top_menubar () widget->hide (); } + /* Put items for About and Preferences into App menu (the + * ardour.menus.in file does not list them for OS X) + */ + GtkApplicationMenuGroup* group = app->add_app_menu_group (); - if ((widget = ActionManager::get_widget ("/ui/Main/Session/About"))) { + if ((widget = ActionManager::get_widget ("/ui/Windows/toggle-about"))) { app->add_app_menu_item (group, dynamic_cast(widget)); } - if ((widget = ActionManager::get_widget ("/ui/Main/Session/ToggleRCOptionsEditor"))) { + if ((widget = ActionManager::get_widget ("/ui/Windows/toggle-rc-options-editor"))) { app->add_app_menu_item (group, dynamic_cast(widget)); } -- cgit v1.2.3 From 4cd27e47336c566d10ec88e80541097059b3c732 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Wed, 8 May 2013 11:43:33 -0400 Subject: cleanup menus/actions mess exposed on OS X; remove video items from OS X menus (for now) --- gtk2_ardour/actions.cc | 9 +++++++-- gtk2_ardour/actions.h | 1 + gtk2_ardour/ardour.menus.in | 23 ++++++++++++++++------- gtk2_ardour/ardour_ui.cc | 4 +++- gtk2_ardour/ardour_ui_ed.cc | 13 ++++++++----- 5 files changed, 35 insertions(+), 15 deletions(-) (limited to 'gtk2_ardour') diff --git a/gtk2_ardour/actions.cc b/gtk2_ardour/actions.cc index 343dd20308..3b0133b535 100644 --- a/gtk2_ardour/actions.cc +++ b/gtk2_ardour/actions.cc @@ -63,13 +63,18 @@ vector > ActionManager::jack_opposite_sensitive_actions; vector > ActionManager::transport_sensitive_actions; vector > ActionManager::edit_point_in_region_sensitive_actions; +static Glib::RefPtr ui_manager; void ActionManager::init () { - std::string ui_file; - ui_manager = UIManager::create (); +} + +void +ActionManager::load_menus () +{ + std::string ui_file; find_file_in_search_path (ardour_config_search_path(), "ardour.menus", ui_file); diff --git a/gtk2_ardour/actions.h b/gtk2_ardour/actions.h index fd9af9992a..20c0532636 100644 --- a/gtk2_ardour/actions.h +++ b/gtk2_ardour/actions.h @@ -30,6 +30,7 @@ namespace ActionManager { /* Ardour specific */ extern void init (); + extern void load_menus (); extern std::vector > session_sensitive_actions; extern std::vector > write_sensitive_actions; diff --git a/gtk2_ardour/ardour.menus.in b/gtk2_ardour/ardour.menus.in index 5b10a4f2c2..632136c734 100644 --- a/gtk2_ardour/ardour.menus.in +++ b/gtk2_ardour/ardour.menus.in @@ -35,9 +35,10 @@ +#ifndef GTKOSX - +#endif @@ -47,16 +48,16 @@ -#ifndef GTKOSX -#endif -#ifdef GTKOSX - +#ifdef GTKOSX + #endif +#ifndef GTKOSX +#endif @@ -281,7 +282,9 @@ +#ifndef GTKOSX +#endif @@ -434,7 +437,9 @@ +#ifndef GTKOSX +#endif @@ -552,8 +557,10 @@ - - +#ifndef GTKOSX + + +#endif @@ -649,7 +656,9 @@ +#ifndef GTKOSX +#endif diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc index 250a94baa4..4dcb4eb5fa 100644 --- a/gtk2_ardour/ardour_ui.cc +++ b/gtk2_ardour/ardour_ui.cc @@ -319,7 +319,7 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir) TimeAxisViewItem::set_constant_heights (); - /* load up the UI manager */ + /* Set this up so that our window proxies can register actions */ ActionManager::init (); @@ -426,6 +426,8 @@ ARDOUR_UI::post_engine () _tooltips.enable(); + ActionManager::load_menus (); + if (setup_windows ()) { throw failed_constructor (); } diff --git a/gtk2_ardour/ardour_ui_ed.cc b/gtk2_ardour/ardour_ui_ed.cc index b3621c1779..941f1936d1 100644 --- a/gtk2_ardour/ardour_ui_ed.cc +++ b/gtk2_ardour/ardour_ui_ed.cc @@ -573,7 +573,10 @@ ARDOUR_UI::use_menubar_as_top_menubar () Gtk::Widget* widget; Application* app = Application::instance (); - /* Quit will be taken of separately */ + /* the addresses ("/ui/Main...") used below are based on the menu definitions in the menus file + */ + + /* Quit will be taken care of separately */ if ((widget = ActionManager::get_widget ("/ui/Main/Session/Quit"))) { widget->hide (); @@ -585,13 +588,13 @@ ARDOUR_UI::use_menubar_as_top_menubar () GtkApplicationMenuGroup* group = app->add_app_menu_group (); - if ((widget = ActionManager::get_widget ("/ui/Windows/toggle-about"))) { + if ((widget = ActionManager::get_widget ("/ui/Main/Session/toggle-about"))) { app->add_app_menu_item (group, dynamic_cast(widget)); - } + } - if ((widget = ActionManager::get_widget ("/ui/Windows/toggle-rc-options-editor"))) { + if ((widget = ActionManager::get_widget ("/ui/Main/Session/toggle-rc-options-editor"))) { app->add_app_menu_item (group, dynamic_cast(widget)); - } + } app->set_menu_bar (*menu_bar); } -- cgit v1.2.3 From cadfc2aee13e14af341dd68f33308a421820c855 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Wed, 8 May 2013 13:16:50 -0400 Subject: various miscellany related to versions, gtk2 build and packaging --- gtk2_ardour/wscript | 8 ++++---- tools/define_versions.sh | 23 +++++++++++++++++++++++ tools/linux_packaging/build | 2 +- tools/linux_packaging/define_versions.sh | 23 ----------------------- tools/linux_packaging/package | 2 +- tools/osx_packaging/osx_build | 9 ++++----- wscript | 11 +---------- 7 files changed, 34 insertions(+), 44 deletions(-) create mode 100644 tools/define_versions.sh delete mode 100644 tools/linux_packaging/define_versions.sh (limited to 'gtk2_ardour') diff --git a/gtk2_ardour/wscript b/gtk2_ardour/wscript index 0cd0f338fb..a9dc2ceff7 100644 --- a/gtk2_ardour/wscript +++ b/gtk2_ardour/wscript @@ -386,7 +386,7 @@ def build(bld): 'libgtk2_ardour', 'libgtkmm2ext', 'libtaglib'] - obj.target = 'ardour-3.0-vst.exe.so' + obj.target = 'ardour-' + bld.env['VERSION'] + '-vst.exe.so' obj.includes = [ '../libs/fst', '.' ] obj.linkflags = ['-mwindows', '-Wl,--export-dynamic'] obj.defines = ['_POSIX_SOURCE', 'USE_WS_PREFIX'] @@ -403,7 +403,7 @@ def build(bld): # just the normal executable version of the GTK GUI obj = bld(features = 'cxx c cxxprogram') obj.source = gtk2_ardour_sources - obj.target = 'ardour-3.0' + obj.target = 'ardour-' + bld.env['VERSION'] obj.includes = ['.'] # continue with setup of obj, which could be a shared library @@ -476,8 +476,8 @@ def build(bld): 'DATADIR' : os.path.normpath(bld.env['DATADIR']), 'SYSCONFDIR' : os.path.normpath(bld.env['SYSCONFDIR']), 'LIBS' : 'build/libs', - 'VERSION' : '3.0', - 'EXECUTABLE' : 'build/gtk2_ardour/ardour-3.0' + 'VERSION' : bld.env['VERSION'], + 'EXECUTABLE' : 'build/gtk2_ardour/ardour-' + bld.env['VERSION'] } def set_subst_dict(obj, dict): diff --git a/tools/define_versions.sh b/tools/define_versions.sh new file mode 100644 index 0000000000..860414e0a6 --- /dev/null +++ b/tools/define_versions.sh @@ -0,0 +1,23 @@ +# +# this is sourced by build and package, and executed from within build/{osx,linux}_packaging +# + +release_version=`grep -m 1 '^VERSION = ' ../../wscript | awk '{print $3}' | sed "s/'//g"` +r=`cut -d'"' -f2 < ../../libs/ardour/revision.cc | sed -e 1d -e "s/$release_version-//"` +if echo $r | grep -q -e - ; then + revcount=`echo $r | cut -d- -f1` +fi +commit=`echo $r | cut -d- -f2` +version=${release_version}${revcount:+.$revcount} + +# +# Figure out the Build Type +# +# Note that the name of the cache file may vary from to time +# + +if grep -q "DEBUG = True" ../../build/c4che/_cache.py; then + DEBUG="T" +else + DEBUG="F" +fi diff --git a/tools/linux_packaging/build b/tools/linux_packaging/build index 9f70f95eb2..26c509a1dc 100755 --- a/tools/linux_packaging/build +++ b/tools/linux_packaging/build @@ -89,7 +89,7 @@ if test x$STRIP != xall -a x$STRIP != xnone -a x$STRIP != xsome ; then exit 1 fi -. ./define_versions.sh +. ../define_versions.sh echo "Version is $version / $commit" info_string="$version ($commit) built on `hostname` by `whoami` on `date`" diff --git a/tools/linux_packaging/define_versions.sh b/tools/linux_packaging/define_versions.sh deleted file mode 100644 index def50ec079..0000000000 --- a/tools/linux_packaging/define_versions.sh +++ /dev/null @@ -1,23 +0,0 @@ -# -# this is sourced by build and package, and executed from within build/linux_packaging -# - -release_version=`grep -m 1 '[^A-Za-z_]LINUX_VERSION = ' ../../wscript | awk '{print $3}' | sed "s/'//g"` -r=`cut -d'"' -f2 < ../../libs/ardour/revision.cc | sed -e 1d -e "s/$release_version-//"` -if echo $r | grep -q -e - ; then - revcount=`echo $r | cut -d- -f1` -fi -commit=`echo $r | cut -d- -f2` -version=${release_version}${revcount:+.$revcount} - -# -# Figure out the Build Type -# -# Note that the name of the cache file may vary from to time -# - -if grep -q "DEBUG = True" ../../build/c4che/_cache.py; then - DEBUG="T" -else - DEBUG="F" -fi diff --git a/tools/linux_packaging/package b/tools/linux_packaging/package index ea50ce4b98..259a2a22da 100755 --- a/tools/linux_packaging/package +++ b/tools/linux_packaging/package @@ -50,7 +50,7 @@ while [ $# -gt 0 ] ; do esac done -. ./define_versions.sh +. ../define_versions.sh if [ x$DEBUG = xT ]; then BUILDTYPE="dbg" diff --git a/tools/osx_packaging/osx_build b/tools/osx_packaging/osx_build index 66f3f791e7..5b3248e1c1 100755 --- a/tools/osx_packaging/osx_build +++ b/tools/osx_packaging/osx_build @@ -67,10 +67,9 @@ if test -z "$PRODUCT_PKG_DIR" -o -z "$APPNAME"; then exit 1 fi -release_version=`grep -m 1 '[^A-Za-z_]OSX_VERSION = ' ../../wscript | cut -d"'" -f2` -revision=`grep -m 1 'revision =' ../../libs/ardour/revision.cc | cut -d'"' -f 2 | sed 's/^.*-//g'` +. ../define_versions.sh echo "Version is $release_version / $revision" -info_string="$release_version/$revision built on `hostname` by `whoami` on `date`" +info_string="$version built on `hostname` by `whoami` on `date`" echo "Info string is $info_string" # setup directory structure @@ -502,8 +501,8 @@ echo "Building DMG ..." # UC_DMG=$APPNAME-${release_version}-${revision}-UC.dmg # FINAL_DMG=$APPNAME-${release_version}-${revision}.dmg -UC_DMG=$APPNAME-${release_version}-${revision}.dmg -VOLNAME=$APPNAME-$release_version +UC_DMG=$APPNAME-$version.dmg +VOLNAME=$APPNAME-$version # TODO use mktemp export TMPDIR=`pwd` diff --git a/wscript b/wscript index 302b8fe069..93f2912edb 100644 --- a/wscript +++ b/wscript @@ -7,16 +7,7 @@ import string import subprocess import sys -# -# build scripts need to find the right platform specific version -# - -if sys.platform == 'darwin': - OSX_VERSION = '3.0' - VERSION = '3.0beta6' -else: - LINUX_VERSION = '3.1' - VERSION = '3.1' +VERSION = '3.1' APPNAME = 'Ardour3' -- cgit v1.2.3