summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/ardour.menus.in5
-rw-r--r--gtk2_ardour/ardour_ui.cc6
-rw-r--r--gtk2_ardour/ardour_ui.h18
-rw-r--r--gtk2_ardour/ardour_ui2.cc49
-rw-r--r--gtk2_ardour/ardour_ui_dependents.cc28
-rw-r--r--gtk2_ardour/ardour_ui_dialogs.cc14
-rw-r--r--gtk2_ardour/ardour_ui_ed.cc6
-rw-r--r--gtk2_ardour/editor.cc15
-rw-r--r--gtk2_ardour/mixer_ui.cc199
-rw-r--r--gtk2_ardour/mixer_ui.h18
-rw-r--r--gtk2_ardour/mnemonic-us.bindings.in3
-rw-r--r--gtk2_ardour/option_editor.cc12
-rw-r--r--gtk2_ardour/option_editor.h2
-rw-r--r--gtk2_ardour/public_editor.h5
-rw-r--r--gtk2_ardour/rc_option_editor.cc15
15 files changed, 284 insertions, 111 deletions
diff --git a/gtk2_ardour/ardour.menus.in b/gtk2_ardour/ardour.menus.in
index 411b262e4d..36211a79e4 100644
--- a/gtk2_ardour/ardour.menus.in
+++ b/gtk2_ardour/ardour.menus.in
@@ -45,7 +45,6 @@
<menuitem action='toggle-session-options-editor'/>
#ifdef GTKOSX
<menuitem action='toggle-about'/>
- <menuitem action='toggle-rc-options-editor'/>
#endif
<separator/>
<menuitem action='lock'/>
@@ -276,10 +275,6 @@
<menuitem action='set-tempo-from-edit-range'/>
</menu>
<menuitem action='set-mouse-mode-object-range'/>
-#ifndef GTKOSX
- <separator/>
- <menuitem action='toggle-rc-options-editor'/>
-#endif
</menu>
<menu name='RegionMenu' action='RegionMenu'>
diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc
index 4d6a0a72d5..c738f494f2 100644
--- a/gtk2_ardour/ardour_ui.cc
+++ b/gtk2_ardour/ardour_ui.cc
@@ -261,9 +261,9 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir)
, last_key_press_time (0)
, save_as_dialog (0)
, meterbridge (0)
+ , rc_option_editor (0)
, speaker_config_window (X_("speaker-config"), _("Speaker Configuration"))
, key_editor (X_("key-editor"), _("Key Bindings"))
- , rc_option_editor (X_("rc-options-editor"), _("Preferences"))
, add_route_dialog (X_("add-routes"), _("Add Tracks/Busses"))
, about (X_("about"), _("About"))
, location_ui (X_("locations"), _("Locations"))
@@ -408,7 +408,7 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir)
if (ui_xml) {
key_editor.set_state (*ui_xml);
- rc_option_editor.set_state (*ui_xml);
+ // rc_option_editor.set_state (*ui_xml);
session_option_editor.set_state (*ui_xml);
speaker_config_window.set_state (*ui_xml);
about.set_state (*ui_xml);
@@ -424,7 +424,7 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir)
}
WM::Manager::instance().register_window (&key_editor);
- WM::Manager::instance().register_window (&rc_option_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);
diff --git a/gtk2_ardour/ardour_ui.h b/gtk2_ardour/ardour_ui.h
index 33e4174b50..ddec14b1a1 100644
--- a/gtk2_ardour/ardour_ui.h
+++ b/gtk2_ardour/ardour_ui.h
@@ -320,6 +320,15 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr
void hide_application ();
+ Gtk::Notebook& tabs();
+
+ /* called from a static C function */
+
+ Gtk::Notebook* tab_window_root_drop (GtkNotebook* src,
+ GtkWidget* w,
+ gint x,
+ gint y,
+ gpointer user_data);
protected:
friend class PublicEditor;
@@ -340,7 +349,6 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr
void toggle_session_options_window ();
private:
- PublicEditor* editor;
Mixer_UI* mixer;
NSM_Client* nsm;
bool _was_dirty;
@@ -619,15 +627,19 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr
void setup_order_hint (AddRouteDialog::InsertAt);
int create_mixer ();
+ PublicEditor *editor;
int create_editor ();
Meterbridge *meterbridge;
int create_meterbridge ();
+
+ RCOptionEditor* rc_option_editor;
+ Gtk::HBox rc_option_editor_placeholder;
+
/* Dialogs that can be created via new<T> */
WM::Proxy<SpeakerDialog> speaker_config_window;
WM::Proxy<KeyEditor> key_editor;
- WM::Proxy<RCOptionEditor> rc_option_editor;
WM::Proxy<AddRouteDialog> add_route_dialog;
WM::Proxy<About> about;
WM::Proxy<LocationUIWindow> location_ui;
@@ -797,6 +809,8 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr
DuplicateRouteDialog* duplicate_routes_dialog;
void grab_focus_after_dialog ();
+
+ void tabs_switch (GtkNotebookPage*, guint page_number);
};
#endif /* __ardour_gui_h__ */
diff --git a/gtk2_ardour/ardour_ui2.cc b/gtk2_ardour/ardour_ui2.cc
index 3e8fde5dbb..554e955dbf 100644
--- a/gtk2_ardour/ardour_ui2.cc
+++ b/gtk2_ardour/ardour_ui2.cc
@@ -66,6 +66,22 @@ using namespace Gtk;
using namespace Glib;
using namespace ARDOUR_UI_UTILS;
+
+static GtkNotebook*
+tab_window_root_drop (GtkNotebook* src,
+ GtkWidget* w,
+ gint x,
+ gint y,
+ gpointer user_data)
+{
+ Gtk::Notebook* nb = ARDOUR_UI::instance()->tab_window_root_drop (src, w, x, y, user_data);
+ if (nb) {
+ return nb->gobj();
+ } else {
+ return 0;
+ }
+}
+
int
ARDOUR_UI::setup_windows ()
{
@@ -112,6 +128,15 @@ ARDOUR_UI::setup_windows ()
editor->add_toplevel_menu (top_packer);
editor->add_transport_frame (transport_frame);
+ editor->tabs().append_page (rc_option_editor_placeholder, _("Preferences"));
+
+ editor->tabs().signal_switch_page().connect (sigc::mem_fun (*this, &ARDOUR_UI::tabs_switch));
+
+ /* It would be nice if Gtkmm had wrapped this rather than just
+ * deprecating the old set_window_creation_hook() method, but oh well...
+ */
+ g_signal_connect (editor->tabs().gobj(), "create-window",
+ (GCallback) ::tab_window_root_drop, this);
setup_transport();
@@ -123,6 +148,18 @@ ARDOUR_UI::setup_windows ()
}
void
+ARDOUR_UI::tabs_switch (GtkNotebookPage*, guint page_number)
+{
+ if (page_number == 2) {
+ if (!rc_option_editor) {
+ rc_option_editor = new RCOptionEditor;
+ rc_option_editor_placeholder.pack_start (*rc_option_editor, true, true);
+ rc_option_editor_placeholder.show_all ();
+ }
+ }
+}
+
+void
ARDOUR_UI::setup_tooltips ()
{
set_tip (roll_button, _("Play from playhead"));
@@ -696,11 +733,7 @@ ARDOUR_UI::restore_editing_space ()
void
ARDOUR_UI::show_ui_prefs ()
{
- RefPtr<Action> act = ActionManager::get_action (X_("Window"), X_("toggle-rc-options-editor"));
- assert (act);
-
- act->activate();
-
+ tabs().set_current_page (2);
rc_option_editor->set_current_page (_("GUI"));
}
@@ -713,11 +746,7 @@ ARDOUR_UI::click_button_clicked (GdkEventButton* ev)
return false;
}
- RefPtr<Action> act = ActionManager::get_action (X_("Window"), X_("toggle-rc-options-editor"));
- assert (act);
-
- act->activate();
-
+ tabs().set_current_page (2);
rc_option_editor->set_current_page (_("Misc"));
return true;
}
diff --git a/gtk2_ardour/ardour_ui_dependents.cc b/gtk2_ardour/ardour_ui_dependents.cc
index 7227d4f87f..41af709e2f 100644
--- a/gtk2_ardour/ardour_ui_dependents.cc
+++ b/gtk2_ardour/ardour_ui_dependents.cc
@@ -61,6 +61,9 @@ ARDOUR_UI::we_have_dependents ()
editor->setup_tooltips ();
editor->UpdateAllTransportClocks.connect (sigc::mem_fun (*this, &ARDOUR_UI::update_transport_clocks));
+ std::cerr << "Mixer page = " << editor->tabs().append_page (*mixer, _("Mixer")) << std::endl;
+ editor->tabs().set_tab_detachable (*mixer);
+
/* all actions are defined */
ActionManager::enable_accelerators ();
@@ -101,3 +104,28 @@ ARDOUR_UI::exit_on_main_window_close (GdkEventAny * /*ev*/)
#endif
}
+Gtk::Notebook*
+ARDOUR_UI::tab_window_root_drop (GtkNotebook* src,
+ GtkWidget* w,
+ gint x,
+ gint y,
+ gpointer)
+{
+ using namespace std;
+
+ if (w == GTK_WIDGET(mixer->gobj())) {
+ /* Mixer */
+
+ cerr << "Call use own window\n";
+
+ Gtk::Notebook* nb = mixer->use_own_window ();
+ Gtk::Window* win = (Gtk::Window*) nb->get_toplevel ();
+
+ win->move (x, y);
+ win->present ();
+
+ return nb;
+ }
+
+ return 0;
+}
diff --git a/gtk2_ardour/ardour_ui_dialogs.cc b/gtk2_ardour/ardour_ui_dialogs.cc
index 859a167832..84959d1e51 100644
--- a/gtk2_ardour/ardour_ui_dialogs.cc
+++ b/gtk2_ardour/ardour_ui_dialogs.cc
@@ -366,11 +366,13 @@ ARDOUR_UI::goto_mixer_window ()
}
mixer->show_window ();
- mixer->present ();
+
+ // mixer->present ();
/* mixer should now be on top */
- if (UIConfiguration::instance().get_transients_follow_front()) {
- WM::Manager::instance().set_transient_for (mixer);
- }
+ //if (UIConfiguration::instance().get_transients_follow_front()) {
+ // WM::Manager::instance().set_transient_for (mixer);
+ //}
+
_mixer_on_top = true;
}
@@ -401,7 +403,7 @@ ARDOUR_UI::toggle_mixer_window ()
if (show) {
goto_mixer_window ();
} else {
- mixer->hide ();
+ mixer->hide_window ((GdkEventAny*)0);
}
}
@@ -549,7 +551,7 @@ ARDOUR_UI::main_window_state_event_handler (GdkEventWindowState* ev, bool window
if ((ev->changed_mask & GDK_WINDOW_STATE_FULLSCREEN) &&
(ev->new_window_state & GDK_WINDOW_STATE_FULLSCREEN)) {
if (big_clock_window) {
- big_clock_window->set_transient_for (*mixer);
+ // big_clock_window->set_transient_for (*mixer);
}
}
}
diff --git a/gtk2_ardour/ardour_ui_ed.cc b/gtk2_ardour/ardour_ui_ed.cc
index 8329ea35d2..1ba5f0bd5e 100644
--- a/gtk2_ardour/ardour_ui_ed.cc
+++ b/gtk2_ardour/ardour_ui_ed.cc
@@ -726,3 +726,9 @@ ARDOUR_UI::xrun_button_release (GdkEventButton* ev)
}
return true;
}
+
+Gtk::Notebook&
+ARDOUR_UI::tabs()
+{
+ return editor->tabs();
+}
diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc
index f080ed24fb..836360b2ef 100644
--- a/gtk2_ardour/editor.cc
+++ b/gtk2_ardour/editor.cc
@@ -668,8 +668,11 @@ Editor::Editor ()
status_bar_hpacker.show ();
+ _tabs.append_page (global_hpacker, _("Editor"));
+ _tabs.show ();
+
vpacker.pack_end (status_bar_hpacker, false, false);
- vpacker.pack_end (global_hpacker, true, true);
+ vpacker.pack_end (_tabs, true, true);
/* register actions now so that set_state() can find them and set toggles/checks etc */
@@ -852,13 +855,9 @@ Editor::add_toplevel_menu (Container& cont)
void
Editor::add_transport_frame (Container& cont)
{
- if(ARDOUR::Profile->get_mixbus()) {
- global_vpacker.pack_start (cont, false, false);
- global_vpacker.reorder_child (cont, 0);
- cont.show_all ();
- } else {
- vpacker.pack_start (cont, false, false);
- }
+ global_vpacker.pack_start (cont, false, false);
+ global_vpacker.reorder_child (cont, 0);
+ cont.show_all ();
}
bool
diff --git a/gtk2_ardour/mixer_ui.cc b/gtk2_ardour/mixer_ui.cc
index 7200cfd20f..3dde07be09 100644
--- a/gtk2_ardour/mixer_ui.cc
+++ b/gtk2_ardour/mixer_ui.cc
@@ -28,6 +28,7 @@
#include <gtkmm/accelmap.h>
#include "pbd/convert.h"
+#include "pbd/stacktrace.h"
#include "pbd/unwind.h"
#include <glibmm/threads.h>
@@ -36,6 +37,7 @@
#include <gtkmm2ext/utils.h>
#include <gtkmm2ext/tearoff.h>
#include <gtkmm2ext/window_title.h>
+#include <gtkmm2ext/doi.h>
#include "ardour/amp.h"
#include "ardour/debug.h"
@@ -87,8 +89,7 @@ Mixer_UI::instance ()
}
Mixer_UI::Mixer_UI ()
- : Window (Gtk::WINDOW_TOPLEVEL)
- , VisibilityTracker (*((Gtk::Window*) this))
+ : _parent_window (0)
, _visible (false)
, no_track_list_redisplay (false)
, in_group_row_change (false)
@@ -103,13 +104,10 @@ Mixer_UI::Mixer_UI ()
, _maximised (false)
, _show_mixer_list (true)
{
- /* allow this window to become the key focus window */
- set_flags (CAN_FOCUS);
-
Route::SyncOrderKeys.connect (*this, invalidator (*this), boost::bind (&Mixer_UI::sync_treeview_from_order_keys, this), gui_context());
scroller.set_can_default (true);
- set_default (scroller);
+ // set_default (scroller);
scroller_base.set_flags (Gtk::CAN_FOCUS);
scroller_base.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK);
@@ -239,26 +237,21 @@ Mixer_UI::Mixer_UI ()
list_hpane.signal_size_allocate().connect (sigc::bind (sigc::mem_fun(*this, &Mixer_UI::pane_allocation_handler),
static_cast<Gtk::Paned*> (&list_hpane)));
- global_vpacker.pack_start (list_hpane, true, true);
+ pack_start (list_hpane, true, true);
- add (global_vpacker);
set_name ("MixerWindow");
update_title ();
- set_wmclass (X_("ardour_mixer"), PROGRAM_NAME);
-
- signal_delete_event().connect (sigc::mem_fun (*this, &Mixer_UI::hide_window));
add_events (Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK);
- signal_configure_event().connect (sigc::mem_fun (*ARDOUR_UI::instance(), &ARDOUR_UI::configure_handler));
-
route_group_display_button_box->show();
route_group_add_button->show();
route_group_remove_button->show();
+ show ();
+
global_hpacker.show();
- global_vpacker.show();
scroller.show();
scroller_base.show();
scroller_hpacker.show();
@@ -310,14 +303,63 @@ Mixer_UI::track_editor_selection ()
void
Mixer_UI::ensure_float (Window& win)
{
- win.set_transient_for (*this);
+ if (_parent_window) {
+ win.set_transient_for (*_parent_window);
+ }
+}
+
+Gtk::Notebook*
+Mixer_UI::use_own_window ()
+{
+ /* This is called after a drop of a tab onto the root window. Its
+ * responsibility is to return the notebook that this Mixer_UI should
+ * be packed into before the drop handling is completed. It is not
+ * responsible for actually taking care of this packing
+ */
+
+ if (_parent_window) {
+ return 0;
+ }
+
+ create_own_window ();
+
+ return (Gtk::Notebook*) _parent_window->get_child();
+}
+
+void
+Mixer_UI::create_own_window ()
+{
+ if (_parent_window) {
+ return;
+ }
+
+ _parent_window = new Window (Gtk::WINDOW_TOPLEVEL);
+ Notebook* notebook = manage (new Notebook);
+
+ notebook->set_show_tabs (false);
+ notebook->show_all ();
+
+ _parent_window->add (*notebook);
+
+ /* allow parent window to become the key focus window */
+ _parent_window->set_flags (CAN_FOCUS);
+
+ /* handle window manager close/delete event sensibly */
+ _parent_window->signal_delete_event().connect (sigc::mem_fun (*this, &Mixer_UI::hide_window));
+
+ set_window_pos_and_size ();
+ update_title ();
}
void
Mixer_UI::show_window ()
{
- present ();
- if (!_visible) {
+ if (_parent_window) {
+ _parent_window->present ();
+ }
+
+ if (!_visible) { /* was hidden, update status */
+
set_window_pos_and_size ();
/* show/hide group tabs as required */
@@ -337,19 +379,43 @@ Mixer_UI::show_window ()
}
}
+ if (!_parent_window) {
+ /* not in its own window, just switch main tabs to show mixer */
+ int pagenum = ARDOUR_UI::instance()->tabs().page_num (*this);
+ ARDOUR_UI::instance()->tabs().set_current_page (pagenum);
+ }
+
/* force focus into main area */
scroller_base.grab_focus ();
-
_visible = true;
}
bool
Mixer_UI::hide_window (GdkEventAny *ev)
{
- get_window_pos_and_size ();
+ if (_parent_window) {
+ /* unpack Mixer_UI from parent, put it back in the main tabbed
+ * notebook
+ */
+
+ get_window_pos_and_size ();
+
+ get_parent()->remove (*this);
+ ARDOUR_UI::instance()->tabs().insert_page (*this, _("Mixer"), 1);
+ ARDOUR_UI::instance()->tabs().set_tab_detachable (*this);
+ ARDOUR_UI::instance()->tabs().set_current_page (0);
+
+ show_all ();
+
+ delete_when_idle (_parent_window);
+ _parent_window = 0;
+ }
+
+ ARDOUR_UI::instance()->tabs().set_current_page (0);
_visible = false;
- return just_hide_it(ev, static_cast<Gtk::Window *>(this));
+
+ return true;
}
@@ -1479,15 +1545,15 @@ Mixer_UI::show_mixer_list (bool yn)
{
if (yn) {
list_vpacker.show ();
-
- //if user wants to show the pane, we should make sure that it is wide enough to be visible
+
+ //if user wants to show the pane, we should make sure that it is wide enough to be visible
int width = list_hpane.get_position();
if (width < 40)
list_hpane.set_position(40);
} else {
list_vpacker.hide ();
}
-
+
_show_mixer_list = yn;
}
@@ -1616,7 +1682,7 @@ Mixer_UI::strip_scroller_button_release (GdkEventButton* ev)
using namespace Menu_Helpers;
if (Keyboard::is_context_menu_event (ev)) {
- ARDOUR_UI::instance()->add_route (this);
+ // ARDOUR_UI::instance()->add_route (this);
return true;
}
@@ -1636,15 +1702,19 @@ Mixer_UI::set_strip_width (Width w, bool save)
void
Mixer_UI::set_window_pos_and_size ()
{
- resize (m_width, m_height);
- move (m_root_x, m_root_y);
+ if (_parent_window) {
+ _parent_window->resize (m_width, m_height);
+ _parent_window->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);
+ if (_parent_window) {
+ _parent_window->get_position(m_root_x, m_root_y);
+ _parent_window->get_size(m_width, m_height);
+ }
}
struct PluginStateSorter {
@@ -1682,6 +1752,16 @@ Mixer_UI::set_state (const XMLNode& node)
if ((geometry = find_named_node (node, "geometry")) != 0) {
+ /* if there's a geometry node, we have our own window */
+
+ create_own_window ();
+ Gtk::Notebook* notebook = (Gtk::Notebook*) _parent_window->get_child();
+ Gtk::Widget* parent = get_parent();
+ if (parent) {
+ ((Gtk::Container*)parent)->remove (*this);
+ }
+ notebook->append_page (*this, _("Mixer"));
+
XMLProperty* prop;
if ((prop = geometry->property("x_size")) == 0) {
@@ -1735,8 +1815,7 @@ Mixer_UI::set_state (const XMLNode& node)
Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
bool fs = tact && tact->get_active();
if (yn ^ fs) {
- ActionManager::do_action ("Common",
- "ToggleMaximalMixer");
+ ActionManager::do_action ("Common", "ToggleMaximalMixer");
}
}
@@ -1771,7 +1850,6 @@ Mixer_UI::set_state (const XMLNode& node)
favorite_order.sort (cmp);
sync_treeview_from_favorite_order ();
}
-
return 0;
}
@@ -1780,8 +1858,8 @@ Mixer_UI::get_state (void)
{
XMLNode* node = new XMLNode ("Mixer");
- if (is_realized()) {
- Glib::RefPtr<Gdk::Window> win = get_window();
+ if (_parent_window && _parent_window->is_realized() ) {
+ Glib::RefPtr<Gdk::Window> win = _parent_window->get_window();
get_window_pos_and_size ();
@@ -1928,30 +2006,25 @@ Mixer_UI::scroll_right ()
bool
Mixer_UI::on_key_press_event (GdkEventKey* ev)
{
- /* focus widget gets first shot, then bindings, otherwise
- forward to main window
- */
-
- if (gtk_window_propagate_key_event (GTK_WINDOW(gobj()), ev)) {
- return true;
- }
-
KeyboardKey k (ev->state, ev->keyval);
if (bindings.activate (k, Bindings::Press)) {
return true;
}
- return forward_key_press (ev);
+ if (_parent_window) {
+ /* send it to the main window, since our own bindings didn't
+ * handle it
+ */
+ return forward_key_press (ev);
+ }
+
+ return false;
}
bool
Mixer_UI::on_key_release_event (GdkEventKey* ev)
{
- if (gtk_window_propagate_key_event (GTK_WINDOW(gobj()), ev)) {
- return true;
- }
-
KeyboardKey k (ev->state, ev->keyval);
if (bindings.activate (k, Bindings::Release)) {
@@ -2091,7 +2164,7 @@ Mixer_UI::setup_track_display ()
void
Mixer_UI::new_track_or_bus ()
{
- ARDOUR_UI::instance()->add_route (this);
+ // ARDOUR_UI::instance()->add_route (this);
}
@@ -2111,16 +2184,20 @@ Mixer_UI::update_title ()
n = "*" + n;
}
- WindowTitle title (n);
- title += S_("Window|Mixer");
- title += Glib::get_application_name ();
- set_title (title.get_string());
+ if (own_window()) {
+ WindowTitle title (n);
+ title += S_("Window|Mixer");
+ title += Glib::get_application_name ();
+ own_window()->set_title (title.get_string());
+ }
} else {
- WindowTitle title (S_("Window|Mixer"));
- title += Glib::get_application_name ();
- set_title (title.get_string());
+ if (own_window()) {
+ WindowTitle title (S_("Window|Mixer"));
+ title += Glib::get_application_name ();
+ own_window()->set_title (title.get_string());
+ }
}
}
@@ -2194,9 +2271,12 @@ Mixer_UI::maximise_mixer_space ()
return;
}
- fullscreen ();
+ Gtk::Window* win = (Gtk::Window*) get_toplevel();
- _maximised = true;
+ if (win) {
+ win->fullscreen ();
+ _maximised = true;
+ }
}
void
@@ -2206,9 +2286,12 @@ Mixer_UI::restore_mixer_space ()
return;
}
- unfullscreen();
+ Gtk::Window* win = (Gtk::Window*) get_toplevel();
- _maximised = false;
+ if (win) {
+ win->unfullscreen();
+ _maximised = false;
+ }
}
void
diff --git a/gtk2_ardour/mixer_ui.h b/gtk2_ardour/mixer_ui.h
index a909228b06..8e4eab1979 100644
--- a/gtk2_ardour/mixer_ui.h
+++ b/gtk2_ardour/mixer_ui.h
@@ -42,10 +42,13 @@
#include "ardour/plugin.h"
#include "ardour/plugin_manager.h"
+<<<<<<< HEAD
#include "gtkmm2ext/visibility_tracker.h"
#include "gtkmm2ext/dndtreeview.h"
#include "gtkmm2ext/treeutils.h"
+=======
+>>>>>>> the basics of tabbed
#include "enums.h"
#include "mixer_actor.h"
@@ -59,6 +62,7 @@ class PluginSelector;
class MixerGroupTabs;
class MonitorSection;
+<<<<<<< HEAD
class PluginTreeStore : public Gtk::TreeStore
{
public:
@@ -73,11 +77,19 @@ protected:
};
class Mixer_UI : public Gtk::Window, public PBD::ScopedConnectionList, public ARDOUR::SessionHandlePtr, public MixerActor, public Gtkmm2ext::VisibilityTracker
+=======
+class Mixer_UI : public Gtk::VBox, public PBD::ScopedConnectionList, public ARDOUR::SessionHandlePtr, public MixerActor
+>>>>>>> the basics of tabbed
{
public:
static Mixer_UI* instance();
~Mixer_UI();
+ Gtk::Window* own_window() const { return _parent_window; }
+ Gtk::Notebook* use_own_window();
+
+ bool visible() const { return _visible; }
+
void set_session (ARDOUR::Session *);
void track_editor_selection ();
@@ -119,6 +131,7 @@ class Mixer_UI : public Gtk::Window, public PBD::ScopedConnectionList, public AR
Mixer_UI ();
static Mixer_UI* _instance;
+ Gtk::Window* _parent_window;
bool _visible;
Gtk::HBox global_hpacker;
@@ -347,6 +360,7 @@ class Mixer_UI : public Gtk::Window, public PBD::ScopedConnectionList, public AR
void monitor_section_going_away ();
+<<<<<<< HEAD
void monitor_section_attached ();
void monitor_section_detached ();
@@ -357,6 +371,10 @@ class Mixer_UI : public Gtk::Window, public PBD::ScopedConnectionList, public AR
void sync_treeview_favorite_ui_state (const Gtk::TreeModel::Path&, const Gtk::TreeModel::iterator&);
void save_favorite_ui_state (const Gtk::TreeModel::iterator& iter, const Gtk::TreeModel::Path& path);
+=======
+ void create_own_window ();
+
+>>>>>>> the basics of tabbed
/// true if we are in fullscreen mode
bool _maximised;
diff --git a/gtk2_ardour/mnemonic-us.bindings.in b/gtk2_ardour/mnemonic-us.bindings.in
index df7dd6fe0d..e71e9d493f 100644
--- a/gtk2_ardour/mnemonic-us.bindings.in
+++ b/gtk2_ardour/mnemonic-us.bindings.in
@@ -171,7 +171,8 @@ This mode provides many different operations on both regions and control points,
@wvis|Window/toggle-session-options-editor|<@SECONDARY@>o|toggle preferences dialog
@trans|Editor/set-playhead|p|set playhead position
@select|Editor/select-all-before-playhead|<@PRIMARY@>p|all before playhead
-@wvis|Window/toggle-rc-options-editor|<@SECONDARY@>p|toggle preferences dialog
+@wvis|Window/toggle-audio-connection-manager|<@WINDOW@>p|toggle global audio patchbay
+@wvis|Window/toggle-midi-connection-manager|<@WINDOW@><@TERTIARY@>p|toggle global midi patchbay
@midi|MIDI/panic|<@PRIMARY@><@SECONDARY@>p|MIDI panic (stop all notes etc)
@select|Editor/select-all-after-playhead|<@PRIMARY@><@TERTIARY@>p|all after playhead
diff --git a/gtk2_ardour/option_editor.cc b/gtk2_ardour/option_editor.cc
index e963726531..103aa89a12 100644
--- a/gtk2_ardour/option_editor.cc
+++ b/gtk2_ardour/option_editor.cc
@@ -470,25 +470,19 @@ OptionEditorPage::OptionEditorPage (Gtk::Notebook& n, std::string const & t)
* @param t Title for the dialog.
*/
OptionEditor::OptionEditor (PBD::Configuration* c, std::string const & t)
- : ArdourWindow (t), _config (c)
+ : _config (c)
{
using namespace Notebook_Helpers;
- set_default_size (300, 300);
- // set_wmclass (X_("ardour_preferences"), PROGRAM_NAME);
-
- set_name ("Preferences");
- add_events (Gdk::KEY_PRESS_MASK | Gdk::KEY_RELEASE_MASK);
-
set_border_width (4);
- add (_notebook);
+ pack_start (_notebook, true, true);
_notebook.set_show_tabs (true);
_notebook.set_show_border (true);
_notebook.set_name ("OptionsNotebook");
- show_all_children();
+ show_all ();
/* Watch out for changes to parameters */
_config->ParameterChanged.connect (config_connection, invalidator (*this), boost::bind (&OptionEditor::parameter_changed, this, _1), gui_context());
diff --git a/gtk2_ardour/option_editor.h b/gtk2_ardour/option_editor.h
index 76370619aa..0823d16630 100644
--- a/gtk2_ardour/option_editor.h
+++ b/gtk2_ardour/option_editor.h
@@ -680,7 +680,7 @@ public:
};
/** The OptionEditor dialog base class */
-class OptionEditor : public ArdourWindow
+class OptionEditor : public Gtk::VBox, public ARDOUR::SessionHandlePtr
{
public:
OptionEditor (PBD::Configuration *, std::string const &);
diff --git a/gtk2_ardour/public_editor.h b/gtk2_ardour/public_editor.h
index bcf98dbac4..90ee30dbca 100644
--- a/gtk2_ardour/public_editor.h
+++ b/gtk2_ardour/public_editor.h
@@ -32,6 +32,7 @@
#include <gtkmm/box.h>
#include <gtkmm/window.h>
#include <gtkmm/actiongroup.h>
+#include <gtkmm/notebook.h>
#include <sigc++/signal.h>
#include "evoral/Note.hpp"
@@ -441,7 +442,11 @@ class PublicEditor : public Gtk::Window, public PBD::StatefulDestructible, publi
PBD::Signal0<void> SnapChanged;
PBD::Signal0<void> MouseModeChanged;
+ Gtk::Notebook& tabs() { return _tabs; }
+
protected:
+ Gtk::Notebook _tabs;
+
friend class DisplaySuspender;
virtual void suspend_route_redisplay () = 0;
virtual void resume_route_redisplay () = 0;
diff --git a/gtk2_ardour/rc_option_editor.cc b/gtk2_ardour/rc_option_editor.cc
index 421e4c56c2..ee5ebd4594 100644
--- a/gtk2_ardour/rc_option_editor.cc
+++ b/gtk2_ardour/rc_option_editor.cc
@@ -76,7 +76,7 @@ using namespace ARDOUR_UI_UTILS;
class ClickOptions : public OptionEditorBox
{
public:
- ClickOptions (RCConfiguration* c, Gtk::Window* p)
+ ClickOptions (RCConfiguration* c)
: _rc_config (c)
, _click_browse_button (_("Browse..."))
, _click_emphasis_browse_button (_("Browse..."))
@@ -1343,9 +1343,8 @@ private:
class ControlSurfacesOptions : public OptionEditorBox
{
public:
- ControlSurfacesOptions (Gtk::Window& parent)
- : _parent (parent)
- , _ignore_view_change (0)
+ ControlSurfacesOptions ()
+ : _ignore_view_change (0)
{
_store = ListStore::create (_model);
_view.set_model (_store);
@@ -1496,7 +1495,8 @@ private:
* or re-initializing a surface.
* tear_down_gui() hides an deletes the Window if it exists.
*/
- ArdourWindow* win = new ArdourWindow (_parent, title.get_string());
+ ArdourWindow* win = new ArdourWindow (*((Gtk::Window*) _view.get_toplevel()), title.get_string());
+ win->set_title ("Control Protocol Options");
win->add (*box);
box->show ();
win->present ();
@@ -1532,7 +1532,6 @@ private:
Glib::RefPtr<ListStore> _store;
ControlSurfacesModelColumns _model;
TreeView _view;
- Gtk::Window& _parent;
PBD::ScopedConnection protocol_status_connection;
uint32_t _ignore_view_change;
Gtk::Button* edit_button;
@@ -1800,7 +1799,7 @@ RCOptionEditor::RCOptionEditor ()
add_option (_("Misc"), new OptionEditorHeading (_("Click")));
- add_option (_("Misc"), new ClickOptions (_rc_config, this));
+ add_option (_("Misc"), new ClickOptions (_rc_config));
add_option (_("Misc"),
new FaderOption (
@@ -2710,7 +2709,7 @@ if (!Profile->get_mixbus()) {
/* Control Surfaces */
- add_option (_("Control Surfaces"), new ControlSurfacesOptions (*this));
+ add_option (_("Control Surfaces"), new ControlSurfacesOptions);
ComboOption<RemoteModel>* rm = new ComboOption<RemoteModel> (
"remote-model",