diff --git a/data/key-mapper.glade b/data/key-mapper.glade index 208a4cd1..2fab8417 100644 --- a/data/key-mapper.glade +++ b/data/key-mapper.glade @@ -602,7 +602,7 @@ True False - Click on a cell below and hit a key on your device. + Click on a cell below and hit a key on your device. If you have your preset active, the reported keycodes may be wrong. 5 5 Key diff --git a/keymapper/gtk/window.py b/keymapper/gtk/window.py index 9ad6e8bb..d74dc011 100755 --- a/keymapper/gtk/window.py +++ b/keymapper/gtk/window.py @@ -254,7 +254,14 @@ class Window: ) if self.keycode_reader is not None: self.keycode_reader.stop_injecting() - self.keycode_reader = KeycodeInjector(self.selected_device) + try: + self.keycode_reader = KeycodeInjector(self.selected_device) + except OSError: + self.get('status_bar').push( + CTX_ERROR, + f'Could not grab device "{self.selected_device}"' + ) + def on_select_device(self, dropdown): """List all presets, create one if none exist yet.""" diff --git a/keymapper/injector.py b/keymapper/injector.py index 0de512e4..5390665b 100644 --- a/keymapper/injector.py +++ b/keymapper/injector.py @@ -190,8 +190,12 @@ class KeycodeInjector: worker.start() # wait for the process to notify creation of the new injection # device, to keep the logs in order. - pipe[0].recv() - self.processes.append(worker) + status = pipe[0].recv() + if status != FAILED: + self.processes.append(worker) + + if len(self.processes) == 0: + raise OSError('Could not grab any device') def stop_injecting(self): """Stop injecting keycodes."""