hyprwm / xdg-desktop-portal-hyprland

xdg-desktop-portal backend for Hyprland
BSD 3-Clause "New" or "Revised" License
273 stars 47 forks source link

Crashes when registering a taken global shortcut id #236

Closed DerpDays closed 2 months ago

DerpDays commented 2 months ago

Instead of just failing to register the shortcut, xdph crashes when a shortcut that is already taken is registered again.

[LOG] XDG_CURRENT_DESKTOP set to Hyprland
[LOG] Gathering exported interfaces
[LOG]  | Got interface: wl_seat (ver 9)
[LOG]  | Got interface: wl_data_device_manager (ver 3)
[LOG]  | Got interface: wl_compositor (ver 6)
[LOG]  | Got interface: wl_subcompositor (ver 1)
[LOG]  | Got interface: wl_shm (ver 1)
[LOG]  | Got interface: wp_viewporter (ver 1)
[LOG]  | Got interface: wp_tearing_control_manager_v1 (ver 1)
[LOG]  | Got interface: wp_fractional_scale_manager_v1 (ver 1)
[LOG]  | Got interface: zxdg_output_manager_v1 (ver 3)
[LOG]  | Got interface: wp_cursor_shape_manager_v1 (ver 1)
[LOG]  | Got interface: zwp_idle_inhibit_manager_v1 (ver 1)
[LOG]  | Got interface: zwp_relative_pointer_manager_v1 (ver 1)
[LOG]  | Got interface: zxdg_decoration_manager_v1 (ver 1)
[LOG]  | Got interface: wp_alpha_modifier_v1 (ver 1)
[LOG]  | Got interface: zwlr_gamma_control_manager_v1 (ver 1)
[LOG]  | Got interface: ext_foreign_toplevel_list_v1 (ver 1)
[LOG]  | Got interface: zwp_pointer_gestures_v1 (ver 3)
[LOG]  | Got interface: zwlr_foreign_toplevel_manager_v1 (ver 3)
[LOG] [toplevel] (activate) locks: 1
[LOG]  | Got interface: zwp_keyboard_shortcuts_inhibit_manager_v1 (ver 1)
[LOG]  | Got interface: zwp_text_input_manager_v3 (ver 1)
[LOG]  | Got interface: zwp_pointer_constraints_v1 (ver 1)
[LOG]  | Got interface: zwlr_output_power_manager_v1 (ver 1)
[LOG]  | Got interface: xdg_activation_v1 (ver 1)
[LOG]  | Got interface: ext_idle_notifier_v1 (ver 1)
[LOG]  | Got interface: ext_session_lock_manager_v1 (ver 1)
[LOG]  | Got interface: zwp_input_method_manager_v2 (ver 1)
[LOG]  | Got interface: zwp_virtual_keyboard_manager_v1 (ver 1)
[LOG]  | Got interface: zwlr_virtual_pointer_manager_v1 (ver 2)
[LOG]  | Got interface: zwlr_output_manager_v1 (ver 4)
[LOG]  | Got interface: org_kde_kwin_server_decoration_manager (ver 1)
[LOG]  | Got interface: hyprland_focus_grab_manager_v1 (ver 1)
[LOG]  | Got interface: zwp_tablet_manager_v2 (ver 1)
[LOG]  | Got interface: zwlr_layer_shell_v1 (ver 5)
[LOG]  | Got interface: wp_presentation (ver 1)
[LOG]  | Got interface: xdg_wm_base (ver 6)
[LOG]  | Got interface: zwlr_data_control_manager_v1 (ver 2)
[LOG]  | Got interface: zwp_primary_selection_device_manager_v1 (ver 1)
[LOG]  | Got interface: xwayland_shell_v1 (ver 1)
[LOG]  | Got interface: wl_drm (ver 2)
[LOG]  | Got interface: zwp_linux_dmabuf_v1 (ver 5)
[LOG]  | Got interface: hyprland_toplevel_export_manager_v1 (ver 2)
[LOG]  | Got interface: zwp_text_input_manager_v1 (ver 1)
[LOG]  | Got interface: hyprland_global_shortcuts_manager_v1 (ver 1)
[LOG] [globalshortcuts] registered
[LOG]  | Got interface: zwlr_screencopy_manager_v1 (ver 3)
[LOG] [pipewire] connected
[LOG] [screencopy] init successful
[LOG]  | Got interface: wp_drm_lease_device_v1 (ver 1)
[LOG]  | Got interface: wl_output (ver 4)
[LOG] [core] dmabufFeedbackMainDevice
[LOG] Found output name eDP-1
[LOG] [toplevel] Activated, bound to 55f5517f35a0, toplevels: 6
[LOG] [screencopy] Registered for toplevel export
[LOG] [screenshot] init successful
[LOG] [globalshortcuts] New session:
[LOG] [globalshortcuts]  | /org/freedesktop/portal/desktop/request/1_84/crash_KvTdjPNNbC
[LOG] [globalshortcuts]  | /org/freedesktop/portal/desktop/session/1_84/crash_lvbVLj6FZZ
[LOG] [globalshortcuts]  | appid: 
[LOG] [globalshortcuts] Bind keys:
[LOG] [globalshortcuts]  | /org/freedesktop/portal/desktop/session/1_84/crash_lvbVLj6FZZ
[LOG] [globalshortcuts] registered 1 shortcuts
[LOG] [globalshortcuts] New session:
[LOG] [globalshortcuts]  | /org/freedesktop/portal/desktop/request/1_85/crash_z6Sznwf2gJ
[LOG] [globalshortcuts]  | /org/freedesktop/portal/desktop/session/1_85/crash_hDRKFgzubO
[LOG] [globalshortcuts]  | appid: 
[LOG] [globalshortcuts] Bind keys:
[LOG] [globalshortcuts]  | /org/freedesktop/portal/desktop/session/1_85/crash_hDRKFgzubO
[LOG] [globalshortcuts] registered 1 shortcuts
hyprland_global_shortcuts_manager_v1@10: error 0: Combination is taken
[CRITICAL] [core] Disconnected from pollfd id 1
[ERR] [core] Terminated
fish: Job 1, '/usr/libexec/xdg-desktop-portal…' terminated by signal SIGSEGV (Address boundary error)
dec05eba commented 2 months ago

I also see this crash everytime in my own application, so I tried to fix it myself in the desktop portal but im not that familiar with wayland error handling. Hyprland sends error with wl_resource_post_error (combination taken) which then disconnects the desktop portal from hyprland (is wl_resource_post_error fatal?). But that can also happen in ScreenCopy portal and I dont see any error handling there either, so it doesn't appear that this is an issue specifically to global shortcuts but the whole desktop portal when an error happens?

vaxerski commented 2 months ago

xdph is at fault, it shouldn't allow re-registering

dec05eba commented 2 months ago

Is the proper solution for the desktop portal to keep track of the registered shortcuts itself and ignore already registered shortcuts? if so I can implement that and test it, I have a real application that uses global shortcuts that I can test against.

vaxerski commented 2 months ago

sounds like a reasonable solution to me