hyprwm / Hyprland

Hyprland is an independent, highly customizable, dynamic tiling Wayland compositor that doesn't sacrifice on its looks.
https://hyprland.org
BSD 3-Clause "New" or "Revised" License
19.59k stars 826 forks source link

DBus Global Shortcuts with binde sends hundreds of activation signals per keypress #4827

Open pdf opened 6 months ago

pdf commented 6 months ago

Hyprland Version

System/Version info ```sh Hyprland, built from branch main at commit fbf5ba87ce57752653f3bebf6e2be090c702836e dirty (shaders: use highp for fragments). Date: Fri Feb 16 04:32:34 2024 Tag: v0.35.0-38-gfbf5ba87 flags: (if any) System Information: System name: Linux Node name: myhostname Release: 6.7.5-zen1-1-zen Version: #1 ZEN SMP PREEMPT_DYNAMIC Sat, 17 Feb 2024 14:02:21 +0000 GPU information: 00:02.0 VGA compatible controller [0300]: Intel Corporation TigerLake-H GT1 [UHD Graphics] [8086:9a60] (rev 01) (prog-if 00 [VGA controller]) 01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GA104M [GeForce RTX 3070 Mobile / Max-Q] [10de:249d] (rev a1) (prog-if 00 [VGA controller]) os-release: NAME="Arch Linux" PRETTY_NAME="Arch Linux" ID=arch BUILD_ID=rolling ANSI_COLOR="38;2;23;147;209" HOME_URL="https://archlinux.org/" DOCUMENTATION_URL="https://wiki.archlinux.org/" SUPPORT_URL="https://bbs.archlinux.org/" BUG_REPORT_URL="https://gitlab.archlinux.org/groups/archlinux/-/issues" PRIVACY_POLICY_URL="https://terms.archlinux.org/docs/privacy-policy/" LOGO=archlinux-logo plugins: ```

Bug or Regression?

Bug

Description

When assigning a binde using the global dispatcher, org.freedesktop.portal.GlobalShortcuts.Activated signals are fired hundreds of times even if the key is only pressed for a fraction of a second. The signals do not stop when the key is released.

When using bind instead everything works as expected, and the bind fires one org.freedesktop.portal.GlobalShortcuts.Activated on key down, and one org.freedesktop.portal.GlobalShortcuts.Deactivated on key up.

I suspect something is wonky with the key repeat logic, or that when using other dispatchers the repeat is debounced or something.

How to reproduce

Create a binde bind with a global dispatcher, e.g.:

binde = , XF86AudioRaiseVolume, global, coolApp:volUp

Monitor DBUS:

dbusmonitor --session

Tap the bound key once and witness the flood of org.freedesktop.portal.GlobalShortcuts.Activated signals.

Crash reports, logs, images, videos

No response

vaxerski commented 6 months ago

lol, probably e should be disabled for global as it makes no sense does it

pdf commented 6 months ago

Does it not make sense? Are all applications expected to implement internal key repeat logic? Yes may be a valid answer.

Also out of interest, where does the appId in hyprctl globalshortcuts come from? I tried to follow the code but got quickly confused.

vaxerski commented 6 months ago

the app itself thru dbus

pdf commented 6 months ago

the app itself thru dbus

Ah, I see there are differences between the Hyprland global shortcuts API and the upstream portal GlobalShortcuts API (the latter has no app_id field), so I guess portal-registered shortcuts will always show up without an app_id prefix from Hyprland's perspective?

vaxerski commented 6 months ago

it used to, portals suck. ugh.

also kinda sent via sessions.