replace ::cast_dynamic() with relevant ActionManager::get_*_action() calls
[ardour.git] / gtk2_ardour / ardour_window.cc
index 029f5f1c2382d0cc8c7aefc8176dd848c44f9342..956b3608d486d7bab7091772b9f4f45bdd1b6ed9 100644 (file)
@@ -54,7 +54,7 @@ ArdourWindow::ArdourWindow (Gtk::Window& parent, string title)
 
 ArdourWindow::~ArdourWindow ()
 {
-       WM::Manager::instance().remove (proxy);
+       // WM::Manager::instance().remove (proxy);
 }
 
 bool
@@ -106,21 +106,33 @@ ArdourWindow::init ()
        set_border_width (10);
        add_events (Gdk::FOCUS_CHANGE_MASK);
 
-      /* ArdourWindows are not dialogs (they have no "OK" or "Close" button) but
-           they should be considered part of the same "window level" as a dialog. This
-           works on X11 and Quartz, in that:
+       /* ArdourWindows are not dialogs (they have no "OK" or "Close" button) but
+          they should be considered part of the same "window level" as a dialog. This
+          works on X11 in that:
 
-           (a) utility & dialog windows are considered to be part of the same level
-           (b) they will float above normal windows without any particular effort
+          (a) there are no window "levels"
+          (b) they will float above normal windows without any particular effort
           (c) present()-ing them will make a utility float over a dialog or
-               vice versa.
-        */
+              vice versa.
 
+          Some X11 Window managers (e.g. KDE) get this wrong, and so we allow the user
+          to select what type of window hint is used.
+
+          GTK+ on OS X uses different levels for DIALOG and UTILITY, and Cocoa has a bug/design
+          issue that it will not transfer keyboard focus across levels when hiding a window.
+          So on OS X, we use DIALOG for all ArdourWindows to ensure that keyboard focus
+          will return to the main window(s) when this window is hidden.
+       */
+
+#ifdef __APPLE__
+       set_type_hint (Gdk::WINDOW_TYPE_HINT_DIALOG);
+#else
        if (UIConfiguration::instance().get_all_floating_windows_are_dialogs()) {
                set_type_hint (Gdk::WINDOW_TYPE_HINT_DIALOG);
        } else {
                set_type_hint (Gdk::WINDOW_TYPE_HINT_UTILITY);
        }
+#endif
 
        Gtk::Window* parent = WM::Manager::instance().transient_parent();
 
@@ -129,8 +141,5 @@ ArdourWindow::init ()
        }
 
        ARDOUR_UI::CloseAllDialogs.connect (sigc::mem_fun (*this, &ArdourWindow::hide));
-
-       proxy = new WM::ProxyTemporary (get_title(), this);
-       WM::Manager::instance().register_window (proxy);
 }