Skip to content

fix: show_error no longer crashes on failed startup - #1863

Merged
mkrnr merged 4 commits into
opensteno:mainfrom
Pandapip1:fix-startup-crash-on-error
Aug 27, 2026
Merged

mkrnr merged 4 commits into
opensteno:mainfrom
Pandapip1:fix-startup-crash-on-error

Conversation

@Pandapip1

@Pandapip1 Pandapip1 commented Aug 6, 2026 •

Copy link
Copy Markdown
Contributor

Summary of changes

If the app crashes while the application is being initialized, like in the following case:

❯ nix run .#plover_5
Unexpected error: Traceback (most recent call last):
  File "/nix/store/nfk0rwvw8lgm1yymbdr7ynxznrlbwzfw-python3.14-plover-5.4.0/lib/python3.14/site-packages/plover/scripts/main.py", line 150, in main
    code = gui.main(config, controller)
  File "/nix/store/nfk0rwvw8lgm1yymbdr7ynxznrlbwzfw-python3.14-plover-5.4.0/lib/python3.14/site-packages/plover/gui_qt/main.py", line 125, in main
    app = Application(config, controller, use_qt_notifications)
  File "/nix/store/nfk0rwvw8lgm1yymbdr7ynxznrlbwzfw-python3.14-plover-5.4.0/lib/python3.14/site-packages/plover/gui_qt/main.py", line 61, in __init__
    config, controller, KeyboardEmulation()
                        ~~~~~~~~~~~~~~~~~^^
  File "/nix/store/nfk0rwvw8lgm1yymbdr7ynxznrlbwzfw-python3.14-plover-5.4.0/lib/python3.14/site-packages/plover/oslayer/linux/keyboardcontrol_uinput.py", line 76, in __init__
    self._ui = UInput(res)
               ~~~~~~^^^^^
  File "/nix/store/5hcr44a0jk8zxfwxzd18s4lcn5abrv0i-python3.14-evdev-1.9.3/lib/python3.14/site-packages/evdev/uinput.py", line 152, in __init__
    self._verify()
    ~~~~~~~~~~~~^^
  File "/nix/store/5hcr44a0jk8zxfwxzd18s4lcn5abrv0i-python3.14-evdev-1.9.3/lib/python3.14/site-packages/evdev/uinput.py", line 285, in _verify
    raise UInputError(msg.format(self.devnode))
evdev.uinput.UInputError: "/dev/uinput" cannot be opened for writing

2026-08-06 19:22:17,873 [MainThread] ERROR: Qt GUI error
Traceback (most recent call last):
  File "/nix/store/nfk0rwvw8lgm1yymbdr7ynxznrlbwzfw-python3.14-plover-5.4.0/lib/python3.14/site-packages/plover/scripts/main.py", line 150, in main
    code = gui.main(config, controller)
  File "/nix/store/nfk0rwvw8lgm1yymbdr7ynxznrlbwzfw-python3.14-plover-5.4.0/lib/python3.14/site-packages/plover/gui_qt/main.py", line 125, in main
    app = Application(config, controller, use_qt_notifications)
  File "/nix/store/nfk0rwvw8lgm1yymbdr7ynxznrlbwzfw-python3.14-plover-5.4.0/lib/python3.14/site-packages/plover/gui_qt/main.py", line 61, in __init__
    config, controller, KeyboardEmulation()
                        ~~~~~~~~~~~~~~~~~^^
  File "/nix/store/nfk0rwvw8lgm1yymbdr7ynxznrlbwzfw-python3.14-plover-5.4.0/lib/python3.14/site-packages/plover/oslayer/linux/keyboardcontrol_uinput.py", line 76, in __init__
    self._ui = UInput(res)
               ~~~~~~^^^^^
  File "/nix/store/5hcr44a0jk8zxfwxzd18s4lcn5abrv0i-python3.14-evdev-1.9.3/lib/python3.14/site-packages/evdev/uinput.py", line 152, in __init__
    self._verify()
    ~~~~~~~~~~~~^^
  File "/nix/store/5hcr44a0jk8zxfwxzd18s4lcn5abrv0i-python3.14-evdev-1.9.3/lib/python3.14/site-packages/evdev/uinput.py", line 285, in _verify
    raise UInputError(msg.format(self.devnode))
evdev.uinput.UInputError: "/dev/uinput" cannot be opened for writing

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/nix/store/nfk0rwvw8lgm1yymbdr7ynxznrlbwzfw-python3.14-plover-5.4.0/bin/.plover-wrapped", line 9, in <module>
    sys.exit(main())
             ~~~~^^
  File "/nix/store/nfk0rwvw8lgm1yymbdr7ynxznrlbwzfw-python3.14-plover-5.4.0/lib/python3.14/site-packages/plover/scripts/main.py", line 170, in main
    gui.show_error("Unexpected error", traceback.format_exc())
    ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/nix/store/nfk0rwvw8lgm1yymbdr7ynxznrlbwzfw-python3.14-plover-5.4.0/lib/python3.14/site-packages/plover/gui_qt/main.py", line 90, in show_error
    app = QApplication([])
RuntimeError: libshiboken: Please destroy the QApplication singleton before creating a new QApplication instance.

then an application instance already exists, and so when show_error tries to open its own dialog, it can't because there's already a QApplication instance.

Pull Request Checklist

  • Changes have tests
  • News fragment added in news.d. See documentation for details

@Pandapip1
Pandapip1 marked this pull request as ready for review August 6, 2026 23:25

@mkrnr mkrnr left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks a lot for this fix! I simplified it a bit but used your check. Also, the del statement was not needed at the end of the method.

@mkrnr
mkrnr merged commit af499fb into opensteno:main Aug 27, 2026
18 checks passed
@Pandapip1
Pandapip1 deleted the fix-startup-crash-on-error branch August 27, 2026 05:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants