summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2015-06-26 22:35:40 +0200
committerRobin Gareus <robin@gareus.org>2015-06-26 22:35:54 +0200
commit02be98b3d614bbb156351f83dbd164d7d2fe071a (patch)
treea27a6613a96849b3d26012136e1ee9d546feb730 /gtk2_ardour
parent7bc9d8aa90031046cfce233dd171b19d0deab6df (diff)
Alternative approach for show/hide Meterbridge #6386
* no more on-top (transient to editor) * similar approach as toggle editor/mixer see also 0cd1db76f04
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/ardour_ui_dialogs.cc56
-rw-r--r--gtk2_ardour/ardour_ui_ed.cc2
-rw-r--r--gtk2_ardour/ardour_ui_mixer.cc1
-rw-r--r--gtk2_ardour/meterbridge.cc1
4 files changed, 50 insertions, 10 deletions
diff --git a/gtk2_ardour/ardour_ui_dialogs.cc b/gtk2_ardour/ardour_ui_dialogs.cc
index d1efb4d7de..6556238240 100644
--- a/gtk2_ardour/ardour_ui_dialogs.cc
+++ b/gtk2_ardour/ardour_ui_dialogs.cc
@@ -393,19 +393,61 @@ ARDOUR_UI::toggle_mixer_window ()
void
ARDOUR_UI::toggle_meterbridge ()
{
- Glib::RefPtr<Action> act = ActionManager::get_action (X_("Common"), X_("toggle-meterbridge"));
- if (!act) {
+ if (!editor || !meterbridge) {
+ /* can this really happen?
+ * keyboard shortcut during session close, maybe?
+ */
+#ifndef NDEBUG
+ /* one way to find out: */
+ printf("ARDOUR_UI::toggle_meterbridge: Editor: %p MB: %p\n", editor, meterbridge);
+ PBD::stacktrace (std::cerr, 20);
+ assert (0);
+#endif
return;
}
- Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic (act);
+ bool show = false;
+ bool obscuring = false;
- if (tact->get_active()) {
+ if (meterbridge->not_visible ()) {
+ show = true;
+ }
+ else if (editor->get_screen() == meterbridge->get_screen()) {
+ gint ex, ey, ew, eh;
+ gint mx, my, mw, mh;
+
+ editor->get_position (ex, ey);
+ editor->get_size (ew, eh);
+ meterbridge->get_position (mx, my);
+ meterbridge->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 (obscuring && editor->property_has_toplevel_focus()) {
+ show = true;
+ }
+
+ if (show) {
meterbridge->show_window ();
meterbridge->present ();
- if (editor) {
- meterbridge->set_transient_for (*editor);
- }
+ meterbridge->raise ();
} else {
meterbridge->hide_window (NULL);
}
diff --git a/gtk2_ardour/ardour_ui_ed.cc b/gtk2_ardour/ardour_ui_ed.cc
index 3f0bb44336..2b427bf04f 100644
--- a/gtk2_ardour/ardour_ui_ed.cc
+++ b/gtk2_ardour/ardour_ui_ed.cc
@@ -203,7 +203,7 @@ if (Profile->get_mixbus())
ActionManager::register_toggle_action (common_actions, X_("toggle-mixer"), S_("Window|Mixer"), sigc::mem_fun(*this, &ARDOUR_UI::toggle_mixer_window));
ActionManager::register_action (common_actions, X_("toggle-editor-mixer"), _("Toggle Editor+Mixer"), sigc::mem_fun(*this, &ARDOUR_UI::toggle_editor_mixer));
- ActionManager::register_toggle_action (common_actions, X_("toggle-meterbridge"), S_("Window|Meterbridge"), sigc::mem_fun(*this, &ARDOUR_UI::toggle_meterbridge));
+ ActionManager::register_action (common_actions, X_("toggle-meterbridge"), S_("Window|Meterbridge"), sigc::mem_fun(*this, &ARDOUR_UI::toggle_meterbridge));
ActionManager::register_action (common_actions, X_("reattach-all-tearoffs"), _("Reattach All Tearoffs"), sigc::mem_fun (*this, &ARDOUR_UI::reattach_all_tearoffs));
diff --git a/gtk2_ardour/ardour_ui_mixer.cc b/gtk2_ardour/ardour_ui_mixer.cc
index a2669f968d..009442f769 100644
--- a/gtk2_ardour/ardour_ui_mixer.cc
+++ b/gtk2_ardour/ardour_ui_mixer.cc
@@ -65,7 +65,6 @@ ARDOUR_UI::create_meterbridge ()
}
meterbridge->signal_window_state_event().connect (sigc::bind (sigc::mem_fun (*this, &ARDOUR_UI::main_window_state_event_handler), false));
- meterbridge->signal_unmap().connect (sigc::bind (sigc::ptr_fun (&ActionManager::uncheck_toggleaction), X_("<Actions>/Common/toggle-meterbridge")));
return 0;
}
diff --git a/gtk2_ardour/meterbridge.cc b/gtk2_ardour/meterbridge.cc
index e325ff814b..aaf1842c79 100644
--- a/gtk2_ardour/meterbridge.cc
+++ b/gtk2_ardour/meterbridge.cc
@@ -439,7 +439,6 @@ Meterbridge::set_session (Session* s)
if (_visible) {
show_window();
present ();
- ActionManager::check_toggleaction ("<Actions>/Common/toggle-meterbridge");
}
start_updating ();
}