From 07bb5ff34735962bcfea9751420ade3af8be5d5c Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Tue, 6 Sep 2016 16:17:08 -0400 Subject: move kbd focus reset method into ARDOUR_UI where it (probably) belongs --- gtk2_ardour/ardour_ui.cc | 52 +++++++++++++++++++++++++++++++++++++++++++ gtk2_ardour/ardour_ui.h | 2 ++ gtk2_ardour/editor.h | 2 -- gtk2_ardour/editor_actions.cc | 48 --------------------------------------- gtk2_ardour/public_editor.h | 2 -- 5 files changed, 54 insertions(+), 52 deletions(-) (limited to 'gtk2_ardour') diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc index e9ed833c7d..a53bcf167f 100644 --- a/gtk2_ardour/ardour_ui.cc +++ b/gtk2_ardour/ardour_ui.cc @@ -5660,3 +5660,55 @@ ARDOUR_UI::cancel_solo () _session->cancel_all_solo (); } } + +void +ARDOUR_UI::reset_focus (Gtk::Widget* w) +{ + /* this resets focus to the first focusable parent of the given widget, + * or, if there is no focusable parent, cancels focus in the toplevel + * window that the given widget is packed into (if there is one). + */ + + if (!w) { + return; + } + + Gtk::Widget* top = w->get_toplevel(); + + if (!top || !top->is_toplevel()) { + return; + } + + w = w->get_parent (); + + while (w) { + + if (w->is_toplevel()) { + /* Setting the focus widget to a Gtk::Window causes all + * subsequent calls to ::has_focus() on the nominal + * focus widget in that window to return + * false. Workaround: never set focus to the toplevel + * itself. + */ + break; + } + + if (w->get_can_focus ()) { + Gtk::Window* win = dynamic_cast (top); + win->set_focus (*w); + return; + } + w = w->get_parent (); + } + + if (top == &_main_window) { + + } + + /* no focusable parent found, cancel focus in top level window. + C++ API cannot be used for this. Thanks, references. + */ + + gtk_window_set_focus (GTK_WINDOW(top->gobj()), 0); + +} diff --git a/gtk2_ardour/ardour_ui.h b/gtk2_ardour/ardour_ui.h index c5e4010f0f..ea97c313a7 100644 --- a/gtk2_ardour/ardour_ui.h +++ b/gtk2_ardour/ardour_ui.h @@ -219,6 +219,8 @@ public: void toggle_monitor_section_visibility (); void toggle_keep_tearoffs(); + void reset_focus (Gtk::Widget*); + static PublicEditor* _instance; /** Emitted frequently with the audible frame, false, and the edit point as diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index 75ba6863e9..1aa2f6f109 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -1276,8 +1276,6 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void naturalize_region (); - void reset_focus (Gtk::Widget*); - void split_region (); void delete_ (); diff --git a/gtk2_ardour/editor_actions.cc b/gtk2_ardour/editor_actions.cc index a5edaf5759..aacb760e14 100644 --- a/gtk2_ardour/editor_actions.cc +++ b/gtk2_ardour/editor_actions.cc @@ -1726,54 +1726,6 @@ Editor::parameter_changed (std::string p) } } -void -Editor::reset_focus (Gtk::Widget* w) -{ - /* this resets focus to the first focusable parent of the given widget, - * or, if there is no focusable parent, cancels focus in the toplevel - * window that the given widget is packed into (if there is one). - */ - - if (!w) { - return; - } - - Gtk::Widget* top = w->get_toplevel(); - - if (!top || !top->is_toplevel()) { - return; - } - - w = w->get_parent (); - - while (w) { - - if (w->is_toplevel()) { - /* Setting the focus widget to a Gtk::Window causes all - * subsequent calls to ::has_focus() on the nominal - * focus widget in that window to return - * false. Workaround: never set focus to the toplevel - * itself. - */ - break; - } - - if (w->get_can_focus ()) { - Window* win = dynamic_cast (top); - win->set_focus (*w); - return; - } - w = w->get_parent (); - } - - /* no focusable parent found, cancel focus in top level window. - C++ API cannot be used for this. Thanks, references. - */ - - gtk_window_set_focus (GTK_WINDOW(top->gobj()), 0); - -} - void Editor::reset_canvas_action_sensitivity (bool onoff) { diff --git a/gtk2_ardour/public_editor.h b/gtk2_ardour/public_editor.h index 69c081b94d..d7413feab7 100644 --- a/gtk2_ardour/public_editor.h +++ b/gtk2_ardour/public_editor.h @@ -325,8 +325,6 @@ class PublicEditor : public Gtkmm2ext::Tabbable { Glib::RefPtr editor_menu_actions; Glib::RefPtr _region_actions; - virtual void reset_focus (Gtk::Widget*) = 0; - virtual bool canvas_scroll_event (GdkEventScroll* event, bool from_canvas) = 0; virtual bool canvas_control_point_event (GdkEvent* event, ArdourCanvas::Item*, ControlPoint*) = 0; virtual bool canvas_line_event (GdkEvent* event, ArdourCanvas::Item*, AutomationLine*) = 0; -- cgit v1.2.3