Ver Fonte

- all kwy shortcuts work across the entire application; started to move all the shortcuts definitions in FlatCAMGUI.keyPressEvent()

Marius Stanciu há 7 anos atrás
pai
commit
8bbb9ba534
6 ficheiros alterados com 261 adições e 240 exclusões
  1. 219 219
      FlatCAMApp.py
  2. 10 11
      FlatCAMEditor.py
  3. 28 1
      FlatCAMGUI.py
  4. 1 1
      README.md
  5. 2 7
      flatcamTools/ToolMeasurement.py
  6. 1 1
      flatcamTools/ToolMove.py

+ 219 - 219
FlatCAMApp.py

@@ -964,8 +964,7 @@ class App(QtCore.QObject):
         self.plotcanvas.vis_connect('mouse_double_click', self.on_double_click_over_plot)
 
         # Keys over plot enabled
-        self.plotcanvas.vis_connect('key_press', self.on_key_over_plot)
-        self.plotcanvas.vis_connect('key_release', self.on_key_release_over_plot)
+        self.plotcanvas.vis_connect('key_press', self.ui.keyPressEvent)
 
         self.ui.splitter.setStretchFactor(1, 2)
 
@@ -3934,223 +3933,224 @@ class App(QtCore.QObject):
         else:
             return 0
 
-    def on_key_over_plot(self, event):
-        """
-        Callback for the key pressed event when the canvas is focused. Keyboard
-        shortcuts are handled here. So far, these are the shortcuts:
-
-        ==========  ============================================
-        Key         Action
-        ==========  ============================================
-        '1'         Zoom-fit. Fits the axes limits to the data.
-        '2'         Zoom-out.
-        '3'         Zoom-in.
-        'ctrl+m'         Toggle on-off the measuring tool.
-        ==========  ============================================
-
-        :param event: Ignored.
-        :return: None
-        """
-
-        self.key_modifiers = QtWidgets.QApplication.keyboardModifiers()
-
-        if self.key_modifiers == QtCore.Qt.ControlModifier:
-            if event.key == 'A':
-                self.on_selectall()
-
-            if event.key == 'C':
-                self.on_copy_object()
-
-            if event.key == 'E':
-                self.on_fileopenexcellon()
-            if event.key == 'G':
-                self.on_fileopengerber()
-
-            if event.key == 'N':
-                self.on_file_new_click()
-
-            if event.key == 'M':
-                self.measurement_tool.run()
-
-            if event.key == 'O':
-                self.on_file_openproject()
-
-            if event.key == 'S':
-                self.on_file_saveproject()
-
-            # Toggle Plot Area
-            if event.key == 'F10':
-                self.on_toggle_plotarea()
-
-            return
-        elif self.key_modifiers == QtCore.Qt.AltModifier:
-            # place holder for further shortcut key
-
-            if event.key == '1':
-                self.enable_all_plots()
-
-            if event.key == '2':
-                self.disable_all_plots()
-
-            if event.key == '3':
-                self.disable_other_plots()
-
-            if event.key == 'C':
-                self.calculator_tool.run()
-
-            if event.key == 'D':
-                self.dblsidedtool.run()
-
-            if event.key == 'L':
-                self.film_tool.run()
-
-            if event.key == 'N':
-                self.ncclear_tool.run()
-
-            if event.key == 'P':
-                self.paint_tool.run()
-
-            if event.key == 'R':
-                self.transform_tool.run()
-
-            if event.key == 'U':
-                self.cutout_tool.run()
-
-            if event.key == 'Z':
-                self.panelize_tool.run()
-
-            if event.key == 'F10':
-                self.on_fullscreen()
-
-            return
-        elif self.key_modifiers == QtCore.Qt.ShiftModifier:
-            # place holder for further shortcut key
-
-            if event.key == 'C':
-                self.on_copy_name()
-
-            # Toggle axis
-            if event.key == 'G':
-                self.on_toggle_axis()
-
-            # Open Preferences Window
-            if event.key == 'P':
-                self.on_preferences()
-
-            # Rotate Object by 90 degree CCW
-            if event.key == 'R':
-                self.on_rotate(silent=True, preset=-90)
-
-            # Run a Script
-            if event.key == 'S':
-                self.on_filerunscript()
-
-            # Toggle Workspace
-            if event.key == 'W':
-                self.on_workspace_menu()
-
-            # Skew on X axis
-            if event.key == 'X':
-                self.on_skewx()
-
-            # Skew on Y axis
-            if event.key == 'Y':
-                self.on_skewy()
-
-        else:
-            if event.key == 'F1':
-                webbrowser.open(self.manual_url)
-                return
-
-            if event.key == 'F2':
-                webbrowser.open(self.video_url)
-                return
-
-            if event.key == self.defaults['zoom_out_key']:  # '-'
-                self.plotcanvas.zoom(1 / self.defaults['zoom_ratio'], self.mouse)
-                return
-
-            if event.key == self.defaults['zoom_in_key']:  # '='
-                self.plotcanvas.zoom(self.defaults['zoom_ratio'], self.mouse)
-                return
-
-            if event.key == 'Delete':
-                self.on_delete()
-                return
-
-            if event.key == 'Space':
-                if self.collection.get_active() is not None:
-                    self.collection.get_active().ui.plot_cb.toggle()
-                    self.delete_selection_shape()
-
-            if event.key == '1':
-                self.on_select_tab('project')
-
-            if event.key == '2':
-                self.on_select_tab('selected')
-
-            if event.key == '3':
-                self.on_select_tab('tool')
-
-            if event.key == 'E':
-                self.object2editor()
-
-            if event.key == self.defaults['grid_toggle_key']:  # G
-                self.ui.grid_snap_btn.trigger()
-
-            if event.key == 'J':
-                self.on_jump_to()
-
-            if event.key == 'L':
-                self.new_excellon_object()
-
-            if event.key == 'M':
-                self.move_tool.toggle()
-                return
-
-            if event.key == 'N':
-                self.on_new_geometry()
-
-            if event.key == 'O':
-                self.on_set_origin()
-
-            if event.key == 'P':
-                self.properties_tool.run()
-
-            if event.key == 'Q':
-                self.on_toggle_units_click()
-
-            if event.key == 'R':
-                self.on_rotate(silent=True, preset=90)
-
-            if event.key == 'S':
-                self.on_toggle_shell()
-
-            if event.key == 'V':
-                self.on_zoom_fit(None)
-
-            if event.key == 'X':
-                self.on_flipx()
-
-            if event.key == 'Y':
-                self.on_flipy()
-
-            if event.key == '`':
-                self.on_shortcut_list()
-
-    def on_key_release_over_plot(self, event):
-        modifiers = QtWidgets.QApplication.keyboardModifiers()
-
-        if modifiers == QtCore.Qt.ControlModifier:
-            return
-        elif modifiers == QtCore.Qt.AltModifier:
-            # place holder for further shortcut key
-            return
-        elif modifiers == QtCore.Qt.ShiftModifier:
-            # place holder for further shortcut key
-            return
-        else:
-            return
+    # def on_key_over_plot(self, event):
+    #     """
+    #     Callback for the key pressed event when the canvas is focused. Keyboard
+    #     shortcuts are handled here. So far, these are the shortcuts:
+    #
+    #     ==========  ============================================
+    #     Key         Action
+    #     ==========  ============================================
+    #     '1'         Zoom-fit. Fits the axes limits to the data.
+    #     '2'         Zoom-out.
+    #     '3'         Zoom-in.
+    #     'ctrl+m'         Toggle on-off the measuring tool.
+    #     ==========  ============================================
+    #
+    #     :param event: Ignored.
+    #     :return: None
+    #     """
+    #     print(type(event.key), event.key)
+    #     self.key_modifiers = QtWidgets.QApplication.keyboardModifiers()
+    #
+    #     if self.key_modifiers == QtCore.Qt.ControlModifier:
+    #         if event.key == 'A':
+    #             self.on_selectall()
+    #
+    #         if event.key == 'C':
+    #             self.on_copy_object()
+    #
+    #         if event.key == 'E':
+    #             self.on_fileopenexcellon()
+    #
+    #         if event.key == 'G':
+    #             self.on_fileopengerber()
+    #
+    #         if event.key == 'N':
+    #             self.on_file_new_click()
+    #
+    #         if event.key == 'M':
+    #             self.measurement_tool.run()
+    #
+    #         if event.key == 'O':
+    #             self.on_file_openproject()
+    #
+    #         if event.key == 'S':
+    #             self.on_file_saveproject()
+    #
+    #         # Toggle Plot Area
+    #         if event.key == 'F10':
+    #             self.on_toggle_plotarea()
+    #
+    #         return
+    #     elif self.key_modifiers == QtCore.Qt.AltModifier:
+    #         # place holder for further shortcut key
+    #
+    #         if event.key == '1':
+    #             self.enable_all_plots()
+    #
+    #         if event.key == '2':
+    #             self.disable_all_plots()
+    #
+    #         if event.key == '3':
+    #             self.disable_other_plots()
+    #
+    #         if event.key == 'C':
+    #             self.calculator_tool.run()
+    #
+    #         if event.key == 'D':
+    #             self.dblsidedtool.run()
+    #
+    #         if event.key == 'L':
+    #             self.film_tool.run()
+    #
+    #         if event.key == 'N':
+    #             self.ncclear_tool.run()
+    #
+    #         if event.key == 'P':
+    #             self.paint_tool.run()
+    #
+    #         if event.key == 'R':
+    #             self.transform_tool.run()
+    #
+    #         if event.key == 'U':
+    #             self.cutout_tool.run()
+    #
+    #         if event.key == 'Z':
+    #             self.panelize_tool.run()
+    #
+    #         if event.key == 'F10':
+    #             self.on_fullscreen()
+    #
+    #         return
+    #     elif self.key_modifiers == QtCore.Qt.ShiftModifier:
+    #         # place holder for further shortcut key
+    #
+    #         if event.key == 'C':
+    #             self.on_copy_name()
+    #
+    #         # Toggle axis
+    #         if event.key == 'G':
+    #             self.on_toggle_axis()
+    #
+    #         # Open Preferences Window
+    #         if event.key == 'P':
+    #             self.on_preferences()
+    #
+    #         # Rotate Object by 90 degree CCW
+    #         if event.key == 'R':
+    #             self.on_rotate(silent=True, preset=-90)
+    #
+    #         # Run a Script
+    #         if event.key == 'S':
+    #             self.on_filerunscript()
+    #
+    #         # Toggle Workspace
+    #         if event.key == 'W':
+    #             self.on_workspace_menu()
+    #
+    #         # Skew on X axis
+    #         if event.key == 'X':
+    #             self.on_skewx()
+    #
+    #         # Skew on Y axis
+    #         if event.key == 'Y':
+    #             self.on_skewy()
+    #
+    #     else:
+    #         if event.key == 'F1':
+    #             webbrowser.open(self.manual_url)
+    #             return
+    #
+    #         if event.key == 'F2':
+    #             webbrowser.open(self.video_url)
+    #             return
+    #
+    #         if event.key == self.defaults['zoom_out_key']:  # '-'
+    #             self.plotcanvas.zoom(1 / self.defaults['zoom_ratio'], self.mouse)
+    #             return
+    #
+    #         if event.key == self.defaults['zoom_in_key']:  # '='
+    #             self.plotcanvas.zoom(self.defaults['zoom_ratio'], self.mouse)
+    #             return
+    #
+    #         if event.key == 'Delete':
+    #             self.on_delete()
+    #             return
+    #
+    #         if event.key == 'Space':
+    #             if self.collection.get_active() is not None:
+    #                 self.collection.get_active().ui.plot_cb.toggle()
+    #                 self.delete_selection_shape()
+    #
+    #         if event.key == '1':
+    #             self.on_select_tab('project')
+    #
+    #         if event.key == '2':
+    #             self.on_select_tab('selected')
+    #
+    #         if event.key == '3':
+    #             self.on_select_tab('tool')
+    #
+    #         if event.key == 'E':
+    #             self.object2editor()
+    #
+    #         if event.key == self.defaults['grid_toggle_key']:  # G
+    #             self.ui.grid_snap_btn.trigger()
+    #
+    #         if event.key == 'J':
+    #             self.on_jump_to()
+    #
+    #         if event.key == 'L':
+    #             self.new_excellon_object()
+    #
+    #         if event.key == 'M':
+    #             self.move_tool.toggle()
+    #             return
+    #
+    #         if event.key == 'N':
+    #             self.on_new_geometry()
+    #
+    #         if event.key == 'O':
+    #             self.on_set_origin()
+    #
+    #         if event.key == 'P':
+    #             self.properties_tool.run()
+    #
+    #         if event.key == 'Q':
+    #             self.on_toggle_units_click()
+    #
+    #         if event.key == 'R':
+    #             self.on_rotate(silent=True, preset=90)
+    #
+    #         if event.key == 'S':
+    #             self.on_toggle_shell()
+    #
+    #         if event.key == 'V':
+    #             self.on_zoom_fit(None)
+    #
+    #         if event.key == 'X':
+    #             self.on_flipx()
+    #
+    #         if event.key == 'Y':
+    #             self.on_flipy()
+    #
+    #         if event.key == '`':
+    #             self.on_shortcut_list()
+    #
+    # def on_key_release_over_plot(self, event):
+    #     modifiers = QtWidgets.QApplication.keyboardModifiers()
+    #
+    #     if modifiers == QtCore.Qt.ControlModifier:
+    #         return
+    #     elif modifiers == QtCore.Qt.AltModifier:
+    #         # place holder for further shortcut key
+    #         return
+    #     elif modifiers == QtCore.Qt.ShiftModifier:
+    #         # place holder for further shortcut key
+    #         return
+    #     else:
+    #         return
 
     def on_shortcut_list(self):
         self.report_usage("on_shortcut_list()")

+ 10 - 11
FlatCAMEditor.py

@@ -2134,19 +2134,20 @@ class FlatCAMGeoEditor(QtCore.QObject):
 
         # make sure that the shortcuts key and mouse events will no longer be linked to the methods from FlatCAMApp
         # but those from FlatCAMGeoEditor
-        self.app.plotcanvas.vis_disconnect('key_press', self.app.on_key_over_plot)
+
+        self.app.plotcanvas.vis_disconnect('key_press', self.app.ui.keyPressEvent)
         self.app.plotcanvas.vis_disconnect('mouse_press', self.app.on_mouse_click_over_plot)
         self.app.plotcanvas.vis_disconnect('mouse_move', self.app.on_mouse_move_over_plot)
         self.app.plotcanvas.vis_disconnect('mouse_release', self.app.on_mouse_click_release_over_plot)
         self.app.plotcanvas.vis_disconnect('mouse_double_click', self.app.on_double_click_over_plot)
-        self.app.collection.view.keyPressed.disconnect()
+
         self.app.collection.view.clicked.disconnect()
 
         self.canvas.vis_connect('mouse_press', self.on_canvas_click)
         self.canvas.vis_connect('mouse_move', self.on_canvas_move)
         self.canvas.vis_connect('mouse_release', self.on_canvas_click_release)
         self.canvas.vis_connect('key_press', self.on_canvas_key)
-        self.canvas.vis_connect('key_release', self.on_canvas_key_release)
+
 
     def disconnect_canvas_event_handlers(self):
 
@@ -2154,15 +2155,14 @@ class FlatCAMGeoEditor(QtCore.QObject):
         self.canvas.vis_disconnect('mouse_move', self.on_canvas_move)
         self.canvas.vis_disconnect('mouse_release', self.on_canvas_click_release)
         self.canvas.vis_disconnect('key_press', self.on_canvas_key)
-        self.canvas.vis_disconnect('key_release', self.on_canvas_key_release)
+
 
         # we restore the key and mouse control to FlatCAMApp method
-        self.app.plotcanvas.vis_connect('key_press', self.app.on_key_over_plot)
+        self.app.plotcanvas.vis_connect('key_press', self.app.ui.keyPressEvent)
         self.app.plotcanvas.vis_connect('mouse_press', self.app.on_mouse_click_over_plot)
         self.app.plotcanvas.vis_connect('mouse_move', self.app.on_mouse_move_over_plot)
         self.app.plotcanvas.vis_connect('mouse_release', self.app.on_mouse_click_release_over_plot)
         self.app.plotcanvas.vis_connect('mouse_double_click', self.app.on_double_click_over_plot)
-        self.app.collection.view.keyPressed.connect(self.app.collection.on_key)
         self.app.collection.view.clicked.connect(self.app.collection.on_mouse_down)
 
     def add_shape(self, shape):
@@ -4277,7 +4277,7 @@ class FlatCAMExcEditor(QtCore.QObject):
 
         # make sure that the shortcuts key and mouse events will no longer be linked to the methods from FlatCAMApp
         # but those from FlatCAMGeoEditor
-        self.app.plotcanvas.vis_disconnect('key_press', self.app.on_key_over_plot)
+        self.app.plotcanvas.vis_disconnect('key_press', self.app.ui.keyPressEvent)
         self.app.plotcanvas.vis_disconnect('mouse_press', self.app.on_mouse_click_over_plot)
         self.app.plotcanvas.vis_disconnect('mouse_move', self.app.on_mouse_move_over_plot)
         self.app.plotcanvas.vis_disconnect('mouse_release', self.app.on_mouse_click_release_over_plot)
@@ -4289,10 +4289,9 @@ class FlatCAMExcEditor(QtCore.QObject):
         self.canvas.vis_connect('mouse_move', self.on_canvas_move)
         self.canvas.vis_connect('mouse_release', self.on_canvas_click_release)
         self.canvas.vis_connect('key_press', self.on_canvas_key)
-        self.canvas.vis_connect('key_release', self.on_canvas_key_release)
 
-    def disconnect_canvas_event_handlers(self):
 
+    def disconnect_canvas_event_handlers(self):
         self.canvas.vis_disconnect('mouse_press', self.on_canvas_click)
         self.canvas.vis_disconnect('mouse_move', self.on_canvas_move)
         self.canvas.vis_disconnect('mouse_release', self.on_canvas_click_release)
@@ -4300,12 +4299,12 @@ class FlatCAMExcEditor(QtCore.QObject):
         self.canvas.vis_disconnect('key_release', self.on_canvas_key_release)
 
         # we restore the key and mouse control to FlatCAMApp method
-        self.app.plotcanvas.vis_connect('key_press', self.app.on_key_over_plot)
+        self.app.plotcanvas.vis_connect('key_press', self.app.ui.keyPressEvent)
         self.app.plotcanvas.vis_connect('mouse_press', self.app.on_mouse_click_over_plot)
         self.app.plotcanvas.vis_connect('mouse_move', self.app.on_mouse_move_over_plot)
         self.app.plotcanvas.vis_connect('mouse_release', self.app.on_mouse_click_release_over_plot)
         self.app.plotcanvas.vis_connect('mouse_double_click', self.app.on_double_click_over_plot)
-        self.app.collection.view.keyPressed.connect(self.app.collection.on_key)
+
         self.app.collection.view.clicked.connect(self.app.collection.on_mouse_down)
 
     def clear(self):

+ 28 - 1
FlatCAMGUI.py

@@ -1507,8 +1507,11 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
         if type(event) is int:
             key = event
         # events from the GUI are of type QKeyEvent
-        else:
+        elif type(event) == QtGui.QKeyEvent:
             key = event.key()
+        # events from Vispy are of type KeyEvent
+        else:
+            key = event.key
 
         if modifiers == QtCore.Qt.ControlModifier:
             if key == QtCore.Qt.Key_A:
@@ -1528,6 +1531,7 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
 
             if key == QtCore.Qt.Key_M:
                 self.app.measurement_tool.run()
+
             if key == QtCore.Qt.Key_O:
                 self.app.on_file_openproject()
 
@@ -1603,16 +1607,30 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
             if key == Qt.Key_3:
                 self.app.disable_other_plots()
 
+            # Calculator Tool
+            if key == QtCore.Qt.Key_C:
+                self.app.calculator_tool.run()
+
             # 2-Sided PCB Tool
             if key == QtCore.Qt.Key_D:
                 self.app.dblsidedtool.run()
                 return
 
+            # Film Tool
+            if key == QtCore.Qt.Key_L:
+                self.app.film_tool.run()
+                return
+
             # Non-Copper Clear Tool
             if key == QtCore.Qt.Key_N:
                 self.app.ncclear_tool.run()
                 return
 
+            # Paint Tool
+            if key == QtCore.Qt.Key_P:
+                self.app.paint_tool.run()
+                return
+
             # Transformation Tool
             if key == QtCore.Qt.Key_R:
                 self.app.transform_tool.run()
@@ -1623,6 +1641,15 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
                 self.app.cutout_tool.run()
                 return
 
+            # Panelize Tool
+            if key == QtCore.Qt.Key_Z:
+                self.app.panelize_tool.run()
+                return
+
+            # Toggle Fullscreen
+            if key == QtCore.Qt.Key_F10:
+                self.app.on_fullscreen()
+                return
         else:
             # Open Manual
             if key == QtCore.Qt.Key_F1:

+ 1 - 1
README.md

@@ -19,7 +19,7 @@ CAD program, and create G-Code for Isolation routing.
 - fixed the name self-insert in save dialog file for GCode; added protection in case the save path is None
 - fixed FlatCAM crash when trying to make drills GCode out of a file that have only slots.
 - changed the messages for Units Conversion
-- all kwy shortcuts work across the entire application; started to move all the shortcuts definitions in FlatCAMGUI.keyPressEvent()
+- all key shortcuts work across the entire application; moved all the shortcuts definitions in FlatCAMGUI.keyPressEvent()
 
 5.02.3019
 

+ 2 - 7
flatcamTools/ToolMeasurement.py

@@ -184,25 +184,22 @@ class Measurement(FlatCAMTool):
             # disconnect the mouse/key events from functions of measurement tool
             self.app.plotcanvas.vis_disconnect('mouse_move', self.on_mouse_move_meas)
             self.app.plotcanvas.vis_disconnect('mouse_press', self.on_click_meas)
-            self.app.plotcanvas.vis_disconnect('key_release', self.on_key_release_meas)
 
             # reconnect the mouse/key events to the functions from where the tool was called
             if self.app.call_source == 'app':
                 self.app.plotcanvas.vis_connect('mouse_move', self.app.on_mouse_move_over_plot)
                 self.app.plotcanvas.vis_connect('mouse_press', self.app.on_mouse_click_over_plot)
-                self.app.plotcanvas.vis_connect('key_press', self.app.on_key_over_plot)
+                self.app.plotcanvas.vis_connect('key_press', self.app.ui.keyPressEvent)
                 self.app.plotcanvas.vis_connect('mouse_release', self.app.on_mouse_click_release_over_plot)
             elif self.app.call_source == 'geo_editor':
                 self.app.geo_editor.canvas.vis_connect('mouse_move', self.app.geo_editor.on_canvas_move)
                 self.app.geo_editor.canvas.vis_connect('mouse_press', self.app.geo_editor.on_canvas_click)
                 self.app.geo_editor.canvas.vis_connect('key_press', self.app.geo_editor.on_canvas_key)
-                self.app.geo_editor.canvas.vis_connect('key_release', self.app.geo_editor.on_canvas_key_release)
                 self.app.geo_editor.canvas.vis_connect('mouse_release', self.app.geo_editor.on_canvas_click_release)
             elif self.app.call_source == 'exc_editor':
                 self.app.exc_editor.canvas.vis_connect('mouse_move', self.app.exc_editor.on_canvas_move)
                 self.app.exc_editor.canvas.vis_connect('mouse_press', self.app.exc_editor.on_canvas_click)
                 self.app.exc_editor.canvas.vis_connect('key_press', self.app.exc_editor.on_canvas_key)
-                self.app.exc_editor.canvas.vis_connect('key_release', self.app.exc_editor.on_canvas_key_release)
                 self.app.exc_editor.canvas.vis_connect('mouse_release', self.app.exc_editor.on_canvas_click_release)
 
             self.clicked_meas = 0
@@ -219,19 +216,17 @@ class Measurement(FlatCAMTool):
             if self.app.call_source == 'app':
                 self.app.plotcanvas.vis_disconnect('mouse_move', self.app.on_mouse_move_over_plot)
                 self.app.plotcanvas.vis_disconnect('mouse_press', self.app.on_mouse_click_over_plot)
-                self.app.plotcanvas.vis_disconnect('key_press', self.app.on_key_over_plot)
+                self.app.plotcanvas.vis_disconnect('key_press', self.app.ui.keyPressEvent)
                 self.app.plotcanvas.vis_disconnect('mouse_release', self.app.on_mouse_click_release_over_plot)
             elif self.app.call_source == 'geo_editor':
                 self.app.geo_editor.canvas.vis_disconnect('mouse_move', self.app.geo_editor.on_canvas_move)
                 self.app.geo_editor.canvas.vis_disconnect('mouse_press', self.app.geo_editor.on_canvas_click)
                 self.app.geo_editor.canvas.vis_disconnect('key_press', self.app.geo_editor.on_canvas_key)
-                self.app.geo_editor.canvas.vis_disconnect('key_release', self.app.geo_editor.on_canvas_key_release)
                 self.app.geo_editor.canvas.vis_disconnect('mouse_release', self.app.geo_editor.on_canvas_click_release)
             elif self.app.call_source == 'exc_editor':
                 self.app.exc_editor.canvas.vis_disconnect('mouse_move', self.app.exc_editor.on_canvas_move)
                 self.app.exc_editor.canvas.vis_disconnect('mouse_press', self.app.exc_editor.on_canvas_click)
                 self.app.exc_editor.canvas.vis_disconnect('key_press', self.app.exc_editor.on_canvas_key)
-                self.app.exc_editor.canvas.vis_disconnect('key_release', self.app.exc_editor.on_canvas_key_release)
                 self.app.exc_editor.canvas.vis_disconnect('mouse_release', self.app.exc_editor.on_canvas_click_release)
 
             # we can safely connect the app mouse events to the measurement tool

+ 1 - 1
flatcamTools/ToolMove.py

@@ -47,7 +47,7 @@ class ToolMove(FlatCAMTool):
             self.app.plotcanvas.vis_disconnect('mouse_move', self.on_move)
             self.app.plotcanvas.vis_disconnect('mouse_press', self.on_left_click)
             self.app.plotcanvas.vis_disconnect('key_release', self.on_key_press)
-            self.app.plotcanvas.vis_connect('key_press', self.app.on_key_over_plot)
+            self.app.plotcanvas.vis_connect('key_press', self.app.ui.keyPressEvent)
 
             self.clicked_move = 0