From 7ec4cb260c6f1bade4bbe515f91ebe8b3572472c Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Thu, 5 Apr 2018 11:12:58 +0100 Subject: [PATCH] Stop hot keys stealing from text fields (#1263). --- ChangeLog | 2 ++ src/tools/dcpomatic.cc | 38 ++++++++++++++++++++++++++++++++------ 2 files changed, 34 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index e2cf6af90..40808c6b3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,7 @@ 2018-04-05 Carl Hetherington + * Fix non-working arrow keys / space in text fields (#1263). + * Fix assertion failures with 3D content in some cases. 2018-03-28 Carl Hetherington diff --git a/src/tools/dcpomatic.cc b/src/tools/dcpomatic.cc index 0fffe6cfc..33e90aef3 100644 --- a/src/tools/dcpomatic.cc +++ b/src/tools/dcpomatic.cc @@ -348,10 +348,10 @@ public: #endif Bind (wxEVT_MENU, boost::bind (&ContentPanel::add_file_clicked, _film_editor->content_panel()), ID_add_file); Bind (wxEVT_MENU, boost::bind (&DOMFrame::remove_clicked, this, _1), ID_remove); - Bind (wxEVT_MENU, boost::bind (&DOMFrame::start_stop_pressed, this), ID_start_stop); + Bind (wxEVT_MENU, boost::bind (&DOMFrame::start_stop_pressed, this, _1), ID_start_stop); Bind (wxEVT_MENU, boost::bind (&DOMFrame::timeline_pressed, this), ID_timeline); - Bind (wxEVT_MENU, boost::bind (&DOMFrame::back_frame, this), ID_back_frame); - Bind (wxEVT_MENU, boost::bind (&DOMFrame::forward_frame, this), ID_forward_frame); + Bind (wxEVT_MENU, boost::bind (&DOMFrame::back_frame, this, _1), ID_back_frame); + Bind (wxEVT_MENU, boost::bind (&DOMFrame::forward_frame, this, _1), ID_forward_frame); wxAcceleratorTable accel_table (accelerators, accel); SetAcceleratorTable (accel_table); delete[] accel; @@ -1213,8 +1213,26 @@ private: _update_news_requested = false; } - void start_stop_pressed () + /** Skip the given event if we're focussed in a TextCtrl, so that hotkeys don't + * steal from text controls. + */ + bool maybe_pass (wxCommandEvent& ev) { + wxWindow* f = wxWindow::FindFocus(); + if (!f || !dynamic_cast(f)) { + return false; + } + + ev.Skip(); + return true; + } + + void start_stop_pressed (wxCommandEvent& ev) + { + if (maybe_pass(ev)) { + return; + } + if (_film_viewer->playing()) { _film_viewer->stop(); } else { @@ -1227,13 +1245,21 @@ private: _film_editor->content_panel()->timeline_clicked (); } - void back_frame () + void back_frame (wxCommandEvent& ev) { + if (maybe_pass(ev)) { + return; + } + _film_viewer->back_frame (); } - void forward_frame () + void forward_frame (wxCommandEvent& ev) { + if (maybe_pass(ev)) { + return; + } + _film_viewer->forward_frame (); } -- 2.30.2