summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2016-09-06 16:17:08 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2016-09-06 16:17:08 -0400
commit07bb5ff34735962bcfea9751420ade3af8be5d5c (patch)
treed08be16e26f61b2a221d54de86600c4cde0b02f5 /gtk2_ardour
parent755010f25454fbf62a3880939b2093b3e0ed32ca (diff)
move kbd focus reset method into ARDOUR_UI where it (probably) belongs
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/ardour_ui.cc52
-rw-r--r--gtk2_ardour/ardour_ui.h2
-rw-r--r--gtk2_ardour/editor.h2
-rw-r--r--gtk2_ardour/editor_actions.cc48
-rw-r--r--gtk2_ardour/public_editor.h2
5 files changed, 54 insertions, 52 deletions
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<Gtk::Window*> (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
@@ -1727,54 +1727,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<Window*> (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)
{
if (_edit_point != EditAtMouse) {
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<Gtk::ActionGroup> editor_menu_actions;
Glib::RefPtr<Gtk::ActionGroup> _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;