hyprwm / Hyprland

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

mouse-grabbing widgets broken in some applications - again #6543

Open UltraBlackLinux opened 1 week ago

UltraBlackLinux commented 1 week ago

Bug or Regression?

Regression

System Info and Version

System/Version info ```sh Hyprland, built from branch at commit 9e781040d9067c2711ec2e9f5b47b76ef70762b3 (props: bump version to 0.41.1). Date: Thu Jun 13 09:54:06 2024 Tag: v0.41.1, commits: 4818 flags: (if any) System Information: System name: Linux Node name: lolcat Release: 6.6.33-1-lts Version: #1 SMP PREEMPT_DYNAMIC Thu, 13 Jun 2024 16:25:55 +0000 GPU information: 0a:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Navi 22 [Radeon RX 6700/6700 XT/6750 XT / 6800M/6850M XT] [1002:73df] (rev c5) (prog-if 00 [VGA controller]) os-release: NAME="EndeavourOS" PRETTY_NAME="EndeavourOS" ID="endeavouros" ID_LIKE="arch" BUILD_ID="2024.01.25" ANSI_COLOR="38;2;23;147;209" HOME_URL="https://endeavouros.com" DOCUMENTATION_URL="https://discovery.endeavouros.com" SUPPORT_URL="https://forum.endeavouros.com" BUG_REPORT_URL="https://forum.endeavouros.com/c/general-system/endeavouros-installation" PRIVACY_POLICY_URL="https://endeavouros.com/privacy-policy-2" LOGO="endeavouros" plugins: ======Config-Start====== Config File: /home/maus/.config/hypr/hyprland.conf: Read Succeeded # Useful links # https://www.cssportal.com/css-cubic-bezier-generator/ # https://easings.net/ env = ADW_DISABLE_PORTAL,1 #env = GTK_THEME,Adwita:dark # env = GDK_BACKEND,wayland,x11 # env = QT_QPA_PLATFORM,"wayland;xcb" # env = SDL_VIDEODRIVER,wayland # env = XDG_CURRENT_DESKTOP,Hyprland # env = XDG_SESSION_TYPE,wayland # env = XDG_SESSION_DESKTOP,Hyprland # env = QT_WAYLAND_DISABLE_WINDOWDECORATION,1 # exec-once = systemctl --user import-environment XDG_SESSION_TYPE XDG_CURRENT_DESKTOP QT_QPA_PLATFORMTHEME exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY DISPLAY XAUTHORITY XDG_CURRENT_DESKTOP=Hyprland XDG_SESSION_DESKTOP=Hyprland XDG_SESSION_TYPE=wayland QT_QPA_PLATFORM="wayland;xcb" QT_QPA_PLATFORMTHEME exec-once = gnome-keyring-daemon --start --components=secrets exec-once = /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 exec-once = systembus-notify exec-once = otd-daemon # # AUTOSTART ----------------------------------- exec-once = waybar exec-once = udiskie -t exec-once = blueman-applet exec-once = wlsunset -S 6:0 -s 18:0 -t 4000 -d 120 exec-once = scc-daemon start exec-once = sleep 3; openrgb --startminimized -p yes exec-once = floorp exec-once = mako exec-once = ~/.config/hypr/hyprland_event_listen.sh exec-once = wl-paste --watch cliphist -max-items 100 store --no-persist #exec-once = wl-paste -p -t text --watch clipman store -P --histpath="~/.local/share/clipman-primary.json" # # exec-once = wl-clip-persist --clipboard both # breaks gtk text selection # #exec-once = sleep 1; ~/Documents/Git/linux-wallpaperengine/deploy/wallengine 2995503379 --screen-root=DVI-D-1 --screen-root=HDMI-A-1 --fps=30 --silent --assets-dir ~/Documents/Git/linux-wallpaperengine/deploy/assets # # exec = ~/.config/hypr/wallpaper.sh exec-once = sleep 1; swww init; sleep 1; while true; do swww img /home/maus/Pictures/wallpapers/$(ls /home/maus/Pictures/wallpapers | shuf -n 1) --transition-fps 30 --transition-type=random --transition-bezier=0,0.84,1,1; sleep 600; done # HARDWARE ----------------------------------- monitor=HDMI-A-1, 1920x1080, 240x150, 1 # res -> preferred monitor=DP-3, 1920x1200, 1920x0, 1 input { kb_layout = de kb_variant = nodeadkeys kb_model = kb_options = compose: rwin-altgr kb_rules = evdev repeat_delay = 400 repeat_rate = 40 numlock_by_default = true follow_mouse = true } cursor { no_warps = true } # VISUALS ----------------------------------- general { gaps_in = 5 gaps_out = 7 border_size = 2 col.active_border = rgb(ff00a0) rgb(209f54) 90deg col.inactive_border = rgba(595959aa) #resize_on_border = true layout = dwindle } decoration { blur { enabled = yes size = 3 passes = 1 new_optimizations = on } rounding = 7 drop_shadow = yes shadow_range = 50 shadow_render_power = 100 col.shadow = rgba(1a1a1aee) } animations { # Some default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more enabled = yes bezier = overshoot, 0.35, 0, 0.9, 0.5 animation = windows, 1, 3, overshoot bezier = linear, 0.12, 0, 0.39, 0 animation = border, 1, 3, linear bezier = quickease, 0.76, 0, 0.24, 1 animation = borderangle, 1, 30, quickease, loop animation = windowsOut, 1, 7, default, popin #animation = border, 1, 10, default animation = fade, 1, 7, default animation = workspaces, 1, 6, default } dwindle { # See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more pseudotile = yes preserve_split = yes } misc { enable_swallow = true swallow_regex = ^Alacritty$ focus_on_activate = true new_window_takes_over_fullscreen = 2 } binds { scroll_event_delay = 10 } # WINDOW RULES ---------------------------------- # windowrulev2 = nomaximizerequest, class:.* # You'll probably like this. windowrulev2 = float,class:^(Floorp),title:Firefox — Sharing Indicator windowrulev2 = float,class:^(screenkey)$ windowrulev2 = nofocus,class:^(screenkey)$ windowrulev2 = noanim,class:^(screenkey)$ windowrulev2 = move 0% 90%,class:^(screenkey)$ windowrulev2 = size 100% 10%,class:^(screenkey)$ # BINDS ----------------------------------- $mainMod = SUPER bind = $mainMod, SPACE, exec, fuzzel bind = , F12, exec, alacritty bind = SHIFT, PRINT, exec, grim -g "$(slurp -d)" - | swappy -f - -o - bind = CONTROL SHIFT, PRINT, exec, grim -g "$(slurp -o)" - | swappy -f - -o - bind = $mainMod, Q, killactive bind = $mainMod SHIFT, Q, exec, kill -9 $(hyprctl activewindow | grep -Po "(?<=pid: )\d+") bind = $mainMod, F, togglefloating bind = $mainMod SHIFT, F, fullscreen bind = $mainMod, Tab, cyclenext # change focus to another window bind = $mainMod, Tab, bringactivetotop # bring it to the top bind = $mainMod, P, pseudo, # dwindle bind = $mainMod, S, togglesplit, # vertical or horizontal split # Switch workspaces with mainMod + [0-9] bind = $mainMod, 1, workspace, 1 bind = $mainMod, 2, workspace, 2 bind = $mainMod, 3, workspace, 3 bind = $mainMod, 4, workspace, 4 bind = $mainMod, 5, workspace, 5 bind = $mainMod, 6, workspace, 6 bind = $mainMod, 7, workspace, 7 bind = $mainMod, 8, workspace, 8 bind = $mainMod, 9, workspace, 9 bind = $mainMod, 0, workspace, 10 bind = $mainMod SHIFT, N, exec, /home/maus/.config/hypr/move_to_empty_workspace.sh # Move active window to a workspace with mainMod + SHIFT + [0-9] bind = $mainMod SHIFT, 1, movetoworkspace, 1 bind = $mainMod SHIFT, 2, movetoworkspace, 2 bind = $mainMod SHIFT, 3, movetoworkspace, 3 bind = $mainMod SHIFT, 4, movetoworkspace, 4 bind = $mainMod SHIFT, 5, movetoworkspace, 5 bind = $mainMod SHIFT, 6, movetoworkspace, 6 bind = $mainMod SHIFT, 7, movetoworkspace, 7 bind = $mainMod SHIFT, 8, movetoworkspace, 8 bind = $mainMod SHIFT, 9, movetoworkspace, 9 bind = $mainMod SHIFT, 0, movetoworkspace, 10 bind = $mainMod, mouse_down, workspace, m+1 bind = $mainMod, mouse_up, workspace, m-1 bind = $mainMod SHIFT, mouse_down, movetoworkspace, m+1 bind = $mainMod SHIFT, mouse_up, movetoworkspace, m-1 # Move/resize windows with mainMod + LMB/RMB and dragging bindm = $mainMod, mouse:273, movewindow bindm = $mainMod, mouse:272, resizewindow # bind = , mouse:274, exec, ; ======Config-End======== ```

Description

4186 is back.

All I know is that it worked fine on 0.40.0

This time with slightly different behaviour: Sometimes it does work, but only after triggering the widgets' keyboard input, and while that is active, you can sometimes drag the widget like normal. Other times the cursor jumps to the top left corner of the screen.

If you repeatedly click and drag on any widget it sometimes randomly works too, but more reliably so than with the keyboard input method.

After trying for like 15 seconds this managed to crash xwayland apparently. The bitwig window poofed and it's no longer able to find an x11 server...

How to reproduce

Drag any widget (slider or knob) in bitwig

Crash reports, logs, images, videos

No response

vaxerski commented 1 week ago

try git

UltraBlackLinux commented 1 week ago

now whenever I start bitwig dragging works for a few seconds/drags and then breaks again, but reproducibly so. Cursor continues to be put into the top left corner of the window from time to time.

it's also definitely related to mouse grabbing since widgets that don't grab the mouse work properly.

andrewathalye commented 1 week ago

Using commit 2031af82fa029aa098357339d502b53c371919d4, dragging in Helvum appears to work fine at first but then breaks.

UltraBlackLinux commented 1 week ago

@andrewathalye I cannot reproduce your issue and helvum also doesn't grab the cursor. I think you have a different problem.

andrewathalye commented 1 week ago

What kind of data should I collect to pinpoint my issue? Just Wayland debug logs?

It's the same thing with versions: worked 0.40.0 broke 0.41.0

andrewathalye commented 1 week ago
[1412545.224] wl_pointer@25.frame()
[1412545.539]  -> wl_compositor@5.create_surface(new id wl_surface@43)
[1412545.552]  -> wp_fractional_scale_manager_v1@9.get_fractional_scale(new id wp_fractional_scale_v1@51, wl_surface@43)
[1412545.559]  -> wp_viewporter@8.get_viewport(new id wp_viewport@55, wl_surface@43)
[1412545.571]  -> wl_data_device_manager@4.create_data_source(new id wl_data_source@49)
[1412545.610]  -> wl_data_source@49.offer("application/x-gtk-local-dnd")
[1412545.616]  -> wl_data_source@49.set_actions(1)
[1412545.622]  -> wl_data_device@28.start_drag(wl_data_source@49, wl_surface@34, wl_surface@43, 7033)
[1412545.787]  -> wl_shm_pool@3.create_buffer(new id wl_buffer@46, 4608, 24, 24, 96, 0)
[1412545.795]  -> wl_pointer@25.set_cursor(7021, wl_surface@29, 3, 1)
[1412545.802]  -> wl_surface@29.attach(wl_buffer@46, 0, 0)
[1412545.807]  -> wl_surface@29.set_buffer_scale(1)
[1412545.812]  -> wl_surface@29.damage(0, 0, 24, 24)
[1412545.817]  -> wl_surface@29.commit()
[1412545.823]  -> wl_pointer@25.set_cursor(7021, wl_surface@29, 3, 1)
[1412545.828]  -> wl_surface@29.attach(wl_buffer@46, 0, 0)
[1412545.833]  -> wl_surface@29.set_buffer_scale(1)
[1412545.838]  -> wl_surface@29.damage(0, 0, 24, 24)
[1412545.842]  -> wl_surface@29.commit()

However there is no end_drag...

This is the Flake I was testing with:

{
   inputs = {
      nixpkgs = {
         url = "github:NixOS/nixpkgs?rev=cc54fb41d13736e92229c21627ea4f22199fee6b";
      };
      nixpkgs-unstable = {
         url = "github:NixOS/nixpkgs?rev=e9ee548d90ff586a6471b4ae80ae9cfcbceb3420";
      };
      hyprland = {
         type = "git";
         url = "https://github.com/hyprwm/Hyprland?rev=2031af82fa029aa098357339d502b53c371919d4";
         submodules = true;
         inputs.nixpkgs.follows = "nixpkgs-unstable";
      };
    };
   outputs = { self, nixpkgs, nixpkgs-unstable, hyprland }:
   let
      pkgs = nixpkgs.legacyPackages.x86_64-linux;
      pkgs-unstable = nixpkgs-unstable.legacyPackages.x86_64-linux;
      hyprpkg = hyprland.packages.x86_64-linux.hyprland;
   in
   {
      devShells.x86_64-linux.default = import ./shell.nix {pkgs = pkgs; pkgs-unstable = pkgs-unstable; hyprland = hyprpkg;}; 
   };
}

Here is shell.nix

{ pkgs
, pkgs-unstable
, hyprland
}:

let
   wlroots-p1 = pkgs-unstable.wlroots.override { xwayland = pkgs.xwayland; mesa = pkgs.mesa; };
   wlroots-patched = wlroots-p1.overrideAttrs (prev: {nativeBuildInputs = prev.nativeBuildInputs ++ [ pkgs-unstable.libdrm ];});
   hyprland-p1 = hyprland.override {mesa = pkgs.mesa; libdrm = pkgs-unstable.libdrm; wlroots = wlroots-patched;};
   hyprland-patched = hyprland-p1.overrideAttrs (prev: {nativeBuildInputs = prev.nativeBuildInputs ++ [ pkgs-unstable.libdrm ];});
in
pkgs.mkShell {
 nativeBuildInputs = [ hyprland-patched ];
}
andrewathalye commented 1 week ago

Also it has broken Firefox drag-and-drop

vaxerski commented 1 week ago

try noiw

UltraBlackLinux commented 1 week ago

same behaviour still unfortunately.

I do have a drag and drop issue too though, but that seems like a different issue as well: If I drag a tab onto a different screen than firefox is on, the drop operation is ignored and firefox gets ultra confused. I can't click on the X for any active tab, nor can I drag a selected tab anymore.

vaxerski commented 1 week ago

idk all work for me: firefox, chromium, helvum, etc

UltraBlackLinux commented 1 week ago

ah. I see. It's an issue with xwayland too. If I drag a tab onto an xwayland application exactly that happens.

vaxerski commented 1 week ago

xwayland dnd is not supported

UltraBlackLinux commented 1 week ago

I'm not saying drag and drop within xwayland. This causes the drag and drop issue: firefox (wayland) -(drag tab, drop onto)> anything xwayland tab vanishes instead of opening a new window, glitches out firefox

vaxerski commented 1 week ago

ah, gotcha.

vaxerski commented 1 week ago

fixed

nice issue # btw, 6543

UltraBlackLinux commented 1 week ago

yup that's working. I guess I'll try bisecting my widgets problem then.

UltraBlackLinux commented 1 week ago

hm I've hit kind of a roadblock, and I'm unsure what I'm supposed to do. I've literally just done the first bisection step, and the widgets are working exactly like in the latest commit, but instead of then stopping to work, hyprland crashes. Is that a good or a bad commit?

vaxerski commented 1 week ago

maybe

you can always bisect twice

UltraBlackLinux commented 1 week ago

oh that's neat. Sadly I had already started marking them as bad, oh well. That run sent me to https://github.com/hyprwm/Hyprland/commit/b9c58b6e75f7d0141d8ba88fb3f6f022fed0877a

I'll try another bisect marking them as good now

vaxerski commented 1 week ago

maybe was a joke.

UltraBlackLinux commented 1 week ago

bruh

also I have the sneaking suspicion that I'm currently bisecting the commit where you fixed the crash that I'm getting in place of the instant-unfocus... I sure hope there was at least one commit where this was working or I jus wasted like 20 minutes

UltraBlackLinux commented 1 week ago

finally. First (could've had a working system, but crashed: https://github.com/hyprwm/Hyprland/commit/b9c58b6e75f7d0141d8ba88fb3f6f022fed0877a Second (if the system was actually working, this would've introduced the currently broken behaviour while also fixing the crash): addd3e7f1aeb670dd91d26005aaeccce3efb1ae7

vaxerski commented 1 week ago

how to repro the crash tho?

UltraBlackLinux commented 1 week ago

take for example the per-track volume sliders in bitwig. You need to repeatedly move and let go of a slider and then it either crashes or the focus breaks and it's immediately ungrabbing the mouse, only moving the slider by like one pixel.

it seems to be related to time. It doesn't crash after X cycles but rather after X seconds after the slider was touched the first time

Edit: The time thing doesn't have a huge window either I just noticed. Maybe round about five to ten seconds.

Edit 2: hmm, the sliders in the sidebar don't seem affected, only the sliders in the track view or in the plugins view at the bottom... Very peculiar

Memoframe commented 1 week ago

I'm on Hyprland version from Arch repo, iirc 0.41.1-1. There is an issue for me in Chrome (but not in Firefox) with click-drag elements on the page, for example if I click on someones nickname here and drag it, window will stuck on grab animation, it's still able to move but no clicks will be registred even after page reload but will work fine on other pages. Is this issue related to my problem?

UltraBlackLinux commented 1 week ago
  1. Maybe use a less terrible browser? There's so many browsers on linux and you decide to install vanilla chrome from the AUR?
  2. Check that your chrome is running on wayland natively
  3. Problem unrelated because it doesn't grab the mouse
Memoframe commented 1 week ago
  1. Maybe use a less terrible browser? There's so many browsers on linux and you decide to install vanilla chrome from the AUR?

It's still a problem and if it's Hyprland problem (which idk) it should be fixed if we want it to be serious project. I would gladly rant about what to use or not to use but it become old long time ago.

  1. Check that your chrome is running on wayland natively

hyprctl says xwayland:0 but I'll check chrome flags when back at home.

  1. Problem unrelated because it doesn't grab the mouse

thx!

UltraBlackLinux commented 4 days ago

I just noticed that a somewhat reliable way to have the widgets work is to click and hold for a second or two and then drag

Unless that's all just flukes - no idea

proudhon commented 1 day ago

take for example the per-track volume sliders in bitwig. You need to repeatedly move and let go of a slider and then it either crashes or the focus breaks and it's immediately ungrabbing the mouse, only moving the slider by like one pixel.

it seems to be related to time. It doesn't crash after X cycles but rather after X seconds after the slider was touched the first time

Edit: The time thing doesn't have a huge window either I just noticed. Maybe round about five to ten seconds.

Edit 2: hmm, the sliders in the sidebar don't seem affected, only the sliders in the track view or in the plugins view at the bottom... Very peculiar

Always taking bitwig as an example:

Switching to the AUR hyprland-git package (v0.41.1-60-ge09addf8) solved xwayland crashing when changing volume on the mixer's sliders. On the other hand most of the knobs inside the built-in plugins will require multiple dragging attempts to move just a few ticks. While doing so the window loses focus (video in attachments. you can tell by the window border flickering, looks like https://github.com/hyprwm/Hyprland/issues/2257#issuecomment-1544031163). Interestingly enough this doesn't happen on the generic ui for 3rd party plugins.

https://github.com/hyprwm/Hyprland/assets/94576412/2f3163e4-0649-455f-9c24-e6a305b1476e