#include "ardour_window.h"
#include "ardour_ui.h"
+#include "ui_config.h"
#include "keyboard.h"
#include "utils.h"
{
set_title (title);
init ();
- set_position (Gtk::WIN_POS_CENTER);
+ set_position (Gtk::WIN_POS_MOUSE);
}
-ArdourWindow::ArdourWindow (Gtk::Window& parent, string /*title*/)
+ArdourWindow::ArdourWindow (Gtk::Window& parent, string title)
: Window ()
, VisibilityTracker (*((Gtk::Window*)this))
{
init ();
+ set_title (title);
set_transient_for (parent);
set_position (Gtk::WIN_POS_CENTER_ON_PARENT);
}
bool
ArdourWindow::on_key_press_event (GdkEventKey* ev)
{
- if (get_modal()) {
- return Gtk::Window::on_key_press_event (ev);
- }
+ bool handled = Gtk::Window::on_key_press_event (ev);
- if (!relay_key_press (ev, this)) {
- return Gtk::Window::on_key_press_event (ev);
+ if (!handled) {
+ if (!get_modal()) {
+ handled = relay_key_press (ev, this);
+ }
}
- return true;
+
+ return handled;
}
bool
ArdourWindow::on_focus_in_event (GdkEventFocus *ev)
{
- if (Keyboard::some_magic_widget_has_focus()) {
- Keyboard::magic_widget_drop_focus ();
- }
-
Keyboard::the_keyboard().focus_in_window (ev, this);
- Keyboard::magic_widget_grab_focus ();
return Window::on_focus_in_event (ev);
}
ArdourWindow::on_focus_out_event (GdkEventFocus *ev)
{
if (!get_modal()) {
- Keyboard::magic_widget_drop_focus ();
Keyboard::the_keyboard().focus_out_window (ev, this);
}
return Window::on_focus_out_event (ev);
void
ArdourWindow::on_unmap ()
{
- if (Keyboard::some_magic_widget_has_focus()) {
- Gtk::Widget* widget = get_focus();
- if (widget) {
- Gtk::Window* win = static_cast<Gtk::Window*>(get_focus()->get_toplevel());
- if (win == Keyboard::get_current_window()) {
- Keyboard::magic_widget_drop_focus ();
- }
- }
- }
-
Keyboard::the_keyboard().leave_window (0, this);
Window::on_unmap ();
}
/* 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:
-
+
(a) utility & dialog windows are considered to be part of the same level
(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.
*/
- if (ARDOUR_UI::config()->get_all_floating_windows_are_dialogs()) {
+ 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);
if (parent) {
set_transient_for (*parent);
}
-
+
ARDOUR_UI::CloseAllDialogs.connect (sigc::mem_fun (*this, &ArdourWindow::hide));
proxy = new WM::ProxyTemporary (get_title(), this);