Stop hot keys stealing from text fields (#1263). v2.13.10
authorCarl Hetherington <cth@carlh.net>
Thu, 5 Apr 2018 10:12:58 +0000 (11:12 +0100)
committerCarl Hetherington <cth@carlh.net>
Thu, 5 Apr 2018 10:12:58 +0000 (11:12 +0100)
ChangeLog
src/tools/dcpomatic.cc

index e2cf6af..40808c6 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,7 @@
 2018-04-05  Carl Hetherington  <cth@carlh.net>
 
+       * Fix non-working arrow keys / space in text fields (#1263).
+
        * Fix assertion failures with 3D content in some cases.
 
 2018-03-28  Carl Hetherington  <cth@carlh.net>
index 0fffe6c..33e90ae 100644 (file)
@@ -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<wxTextCtrl*>(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 ();
        }