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
21.09k stars 882 forks source link

4k monitor resize issue on some floating windows #7126

Closed alekgr closed 2 months ago

alekgr commented 2 months ago

Regression?

Yes

System Info and Version

System/Version info ```sh Hyprland, built from branch main at commit e989a0bcffac81092ed2a7e371f5225c113f689d (internal: refactor fullscreen states (7104)). Date: Wed Jul 31 12:55:52 2024 Tag: v0.41.2-145-ge989a0bc, commits: 5031 flags: (if any) System Information: System name: Linux Node name: rocket Release: 6.10.2-arch1-1 Version: #1 SMP PREEMPT_DYNAMIC Sat, 27 Jul 2024 16:49:55 +0000 GPU information: 00:02.0 VGA compatible controller [0300]: Intel Corporation TigerLake-LP GT2 [Iris Xe Graphics] [8086:9a49] (rev 01) (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: ======Config-Start====== Config File: /home/alek/.config/hypr/hyprland.conf: Read Succeeded # For a full list, see the wiki # #autogenerated = 1 # remove this line to remove the warning # See https://wiki.hyprland.org/Configuring/Monitors/ #monitor=,preferred,auto,1 monitor=HDMI-A-1, 3840x2160@60, 0x0, 1 monitor=eDP-1, 1920x1080@60, 3840x0, 1 #workspace workspace=HDMI-A-1,1 workspace=1, monitor:HDMI-A-1 workspace=2, monitor:HDMI-A-1 workspace=3, monitor:HDMI-A-1 workspace=4, monitor:HDMI-A-1 workspace=5, monitor:HDMI-A-1 workspace=6, monitor:HDMI-A-1 workspace=7, monitor:HDMI-A-1 workspace=8, monitor:eDP-1 workspace=9, monitor:eDP-1 # See https://wiki.hyprland.org/Configuring/Keywords/ for more # Execute your favorite apps at launch # exec-once = waybar & hyprpaper & firefox #exec-once = waypaper --restore exec-once = swaybg -i /usr/share/hyprland/wall2.png exec-once = waybar #exec-once = [workspace 6 silent] pypr exec-once = pypr --debug /tmp/pypr.log #exec-once = dunst exec-once = wl-paste --type text --watch cliphist store #Stores only text data exec-once = wl-paste --type image --watch cliphist store #Stores only image data #portal exec-once = portal.sh # Source a file (multi-file configs) # source = ~/.config/hypr/myColors.conf # Set programs that you use $terminal = kitty $fileManager = ranger $menu = tofi-drun --drun-launch=true $firefox = firefox $librewolf = librewolf $chromium = chromium $chat = weechat $nvim = nvim $graphics = gimp $graphics2 = blender $screenshot = grim $nwg-menu = nwg-bar $paste = wl-paste #$disable_mouse = /usr/local/bin/mouse_toggle.sh; sleep 10 # Some default env vars. env = XCURSOR_SIZE,24 env = QT_QPA_PLATFORMTHEME,qt5ct # change to qt6ct if you have that env = HYPRCURSOR_THEME,rose-pine-hyprcursor # For all categories, see https://wiki.hyprland.org/Configuring/Variables/ input { kb_layout = us kb_variant = kb_model = kb_options = caps:escape kb_rules = follow_mouse = 0 #scroll_method = no_scroll touchpad { natural_scroll = no disable_while_typing = true } sensitivity = 0 # -1.0 - 1.0, 0 means no modification. float_switch_override_focus = 0 scroll_method = no_scroll } general { # See https://wiki.hyprland.org/Configuring/Variables/ for more gaps_in = 5 gaps_out = 30 border_size = 4 col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg col.inactive_border = rgba(595959aa) layout = dwindle # Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on allow_tearing = false #no_cursor_warps = true } decoration { # See https://wiki.hyprland.org/Configuring/Variables/ for more rounding = 15 blur { enabled = true size = 20 passes = 1 xray = true } drop_shadow = yes shadow_range = 4 shadow_render_power = 3 col.shadow = rgba(1a1a1aee) layerrule = blur, notifications layerrule = ignorezero, notifications } animations { enabled = yes # Some default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more bezier = myBezier, 0.05, 0.9, 0.1, 1.05 animation = windows, 1, 7, myBezier animation = windowsOut, 1, 7, default, popin 80% animation = border, 1, 10, default animation = borderangle, 1, 8, default animation = fade, 1, 7, default animation = workspaces, 1, 6, default } dwindle { # See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more pseudotile = yes # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below preserve_split = yes # you probably want this } master { # See https://wiki.hyprland.org/Configuring/Master-Layout/ for more new_status = master } gestures { # See https://wiki.hyprland.org/Configuring/Variables/ for more workspace_swipe = off } misc { # See https://wiki.hyprland.org/Configuring/Variables/ for more force_default_wallpaper = 0 # Set to 0 to disable the anime mascot wallpapers disable_hyprland_logo = true enable_swallow = false } # Example per-device config # See https://wiki.hyprland.org/Configuring/Keywords/#executing for more device { name = epic-mouse-v1 sensitivity = -0.5 } # Example windowrule v1 # windowrule = float, ^(kitty)$ # Example windowrule v2 # windowrulev2 = float,class:^(kitty)$,title:^(kitty)$ # See https://wiki.hyprland.org/Configuring/Window-Rules/ for more windowrulev2 = float, class:^(Alacritty)$ windowrulev2 = center[1], class:^(Alacritty)$ windowrulev2 = pin, class:^(Alacritty)$ windowrulev2 = stayfocused, class:^(Alacritty)$ windowrulev2 = float,class:^(pavucontrol)$ windowrulev2 = center[1], class:^(Alacritty)$ windowrulev2 = pin,class:^(pavucontrol)$ windowrulev2 = stayfocused,class:^(pavucontrol)$ windowrulev2 = size 30% 40%,class:^(pavucontrol)$ #windowrulev2 = float, class:^(neomutt)$ #windowrulev2 = workspace 7, class:neomutt1 #browsers windowrulev2 = float,class:^(Chromium)$ windowrulev2 = float,class:^(org.qutebrowser.qutebrowser)$ #graphics windowrulev2 = workspace 8, class:^(Gimp-2.10)$ windowrulev2 = workspace 8, class:^(blender)$ #librewolf windowrulev2 = workspace 7, class:^(LibreWolf)$ #zathura windowrulev2 = float,class:^(org.pwmt.zathura)$ windowrulev2 = size 60% 60%, class:^(org.pwmt.zathura)$ #default windowrulev2 = suppressevent maximize, class:.* # You'll probably like this. # See https://wiki.hyprland.org/Configuring/Keywords/ for more $mainMod = SUPER $mainMod4 = CTRL $mainMod2 = ALT $mainMod24 = ALT+CTRL #common commands bind = $mainMod, C, killactive, bind = $mainMod SHIFT, E, exit, bind = $mainMod, Space, togglefloating, bind = $mainMod, D, exec, $menu bind = $mainMod, P, pseudo, # dwindle bind = $mainMod SHIFT, P, exec, $nwg-menu bind = $mainMod, S, togglesplit, # dwindle bind = $mainMod, F, exec, hyprctl dispatch fullscreen # my apps bind = $mainMod, Return, exec, $terminal bind = $mainMod, A, exec, $librewolf bind = $mainMod, W, exec, $terminal $chat #untilities bind = $mainMod, F1, exec, $screenshot -g "$(slurp)" - | wl-copy #copy the screenshot bind = $mainMod, F2, exec, cliphist list | tofi | cliphist decode | wl-copy #start tofi with cliphist to choose from bind = $mainMod2, h, exec, ~/commands/hyperland/reload.sh bind = $mainMod2, w, exec, killall -SIGUSR2 waybar bind = $mainMod, l, exec, hyprlock bind = $mainMod SHIFT, e, exec, hyprctl dispatch exit bind = $mainMod SHIFT, r, exec, systemctl reboot bind = $mainMod SHIFT, s, exec, systemctl -i poweroff #cycle through the list of windows in the workflow bind = $mainMod, Tab, cyclenext # 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 # 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 # Example special workspace (scratchpad) #bind = $mainMod, S, togglespecialworkspace, magic #bind = $mainMod SHIFT, S, movetoworkspace, special:magic #pypr scratchpad bind = $mainMod , N, exec, pypr toggle term bind = $mainMod, M, exec, pypr toggle neomutt1 bind = $mainMod, B, exec, pypr toggle ncmpcpp bind = $mainMod, v, exec, pypr toggle volume bind = $mainMod, z, exec, pypr zoom bind = $mainMod, E, exec, pypr toggle ranger # Scroll through existing workspaces with mainMod + scroll #bind = $mainMod, mouse_down, workspace, e+1 #bind = $mainMod, mouse_up, workspace, e-1 # Move/resize windows with mainMod + LMB/RMB and dragging bindm = $mainMod, mouse:272, movewindow bindm = $mainMod, mouse:273, resizewindow ======Config-End======== ```

Description

when login to hyprland, starting my pypr floating windows the first time the window doesn't show correctly and I have to open the floating ok and then it works great.

This does not happen on my laptop screen. It is only happening on my 4k monitor

This issue started about month ago. I been using current git version arch.

How to reproduce

please see my screenshot I will provide logs shortly

Uploading testing.mov…

Crash reports, logs, images, videos

No response

alekgr commented 2 months ago

adding video

alekgr commented 2 months ago

testing.webm

alekgr commented 2 months ago

testing.log

MightyPlaza commented 2 months ago

what terminal is that?

alekgr commented 2 months ago

what terminal is that?

Kitty

alekgr commented 2 months ago

@MightyPlaza so any ideas?

MightyPlaza commented 2 months ago

i have no idea what pypr does, you could try finding out how to reproduce this using only hyprland dispatchers that seems like just a special workspace with a window opening silently on it

alekgr commented 2 months ago

yea, I'll try to see if can run it via dispatcher to see if it just a pypr or hyprland issue

alekgr commented 2 months ago

well I opened a bug with pyprland https://github.com/hyprland-community/pyprland/issues/131

fdev31 commented 2 months ago

I experience the same issue when I use a second monitor which is both rotated and scaled.

Note: It can also show "Zoomed in" (and cropped) instead of zoomed out as in the video.

fdev31 commented 2 months ago

It's basically moving a window from a special workspace to the active one and moving it. @alekgr in the logs there are "ipc" log lines containing the commands which are used...

alekgr commented 2 months ago

ok so its my just me lol. Good to hear. So its more a hyprland issue right?

fdev31 commented 2 months ago

I think so and I don't think the commands issued by Pyprland have anything special here, but providing the "ipc" log would allow to make a script that reproduces the issue and can be convenient for debugging.

EDIT: I suspect the timing is important here, and pyprland triggers the issue because the IPC commands are close for each other.

alekgr commented 2 months ago

what is enteresting this issue started about month ago

fdev31 commented 2 months ago

I experience it since a very long time, more than this, but only when I combine rotation + scaling factor on a second monitor... so I just dropped the scaling factor which I wasn't very happy with anyway and ignored it. So there is a chance it's two different problems, or a second condition for the same problem.

EDIT: recently, the issue get fixed if I hide and show again, but it looks like there are two problems happening there, one being random and the one you show seems to be more deterministic and auto-fixes on the second time we show the window.

alekgr commented 2 months ago

oh I see. yea, here is my monitor config `alek@rocket  ~  hyprctl monitors -j [{ "id": 0, "name": "eDP-1", "description": "Chimei Innolux Corporation 0x14F5", "make": "Chimei Innolux Corporation", "model": "0x14F5", "serial": "", "width": 1920, "height": 1080, "refreshRate": 60.00800, "x": 3840, "y": 0, "activeWorkspace": { "id": 8, "name": "8" }, "specialWorkspace": { "id": 0, "name": "" }, "reserved": [0, 0, 0, 0], "scale": 1.00, "transform": 0, "focused": true, "dpmsStatus": true, "vrr": false, "activelyTearing": false, "disabled": false, "currentFormat": "XRGB8888", "availableModes": ["1920x1080@60.01Hz"] },{ "id": 1, "name": "HDMI-A-1", "description": "Samsung Electric Company U32J59x HCJR804069", "make": "Samsung Electric Company", "model": "U32J59x", "serial": "HCJR804069", "width": 3840, "height": 2160, "refreshRate": 60.00000, "x": 0, "y": 0, "activeWorkspace": { "id": 1, "name": "1" }, "specialWorkspace": { "id": 0,

fdev31 commented 2 months ago

Can you run pypr using pypr --debug /tmp/pypr.log (after exiting the current daemon) and paste the /tmp/pypr.log file it here, try to ONLY reproduce the bug (once or twice), I'll isolate the commands of interest.

alekgr commented 2 months ago

I actually already have it forgot to post. It is a little big but may help

short-pypr.log

alekgr commented 2 months ago

@fdev31 looks like lastest commit 83d88fa56467a2b749fb2320e1595281107bd326 of hyprland fixed this issue.