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.97k stars 913 forks source link

[Bug] new_window_takes_over_fullscreen=1 and maximise (fullscreen dispatcher mode 1) interaction: second window has focus, but is spawned behind first window #6812

Closed nktnet1 closed 4 months ago

nktnet1 commented 4 months ago

Regression?

No

System Info and Version

System/Version info ```sh Hyprland, built from branch main at commit 22138ac259b2f4253be29311f6b60fbd675074b4 (workspaces: don't try to reopen special workspaces (6802)). Date: Mon Jul 8 05:27:18 2024 Tag: v0.41.2-25-g22138ac2, commits: 4911 flags: (if any) System Information: System name: Linux Node name: Tam Release: 6.9.7-arch1-1 Version: #1 SMP PREEMPT_DYNAMIC Fri, 28 Jun 2024 04:32:50 +0000 GPU information: 0000:00:02.0 VGA compatible controller [0300]: Intel Corporation Raptor Lake-S UHD Graphics [8086:a788] (rev 04) (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: hyprsplit by shezdy ver 1.0 ======Config-Start====== Config File: /home/nktnet/.config/hypr/hyprland.conf: Read Succeeded # ####################################################################################### # AUTOGENERATED HYPR CONFIG. # PLEASE USE THE CONFIG PROVIDED IN THE GIT REPO /examples/hypr.conf AND EDIT IT, # OR EDIT THIS ONE ACCORDING TO THE WIKI INSTRUCTIONS. # ####################################################################################### # This is an example Hyprland config file. # Refer to the wiki for more information. # https://wiki.hyprland.org/Configuring/Configuring-Hyprland/ # Please note not all available settings / options are set here. # For a full list, see the wiki # You can split this configuration into multiple files # Create your files separately and then link them to this file like this: # source = ~/.config/hypr/myColors.conf ################ ### MONITORS ### ################ # See https://wiki.hyprland.org/Configuring/Monitors/ monitor=desc:BOE 0x0A2C,2560x1600@60,0x0,1.6 monitor=desc:LG Electronics LG FULL HD 0x01010101,1920x1080@60,1600x0, 1 # 2560 / 1.6 = 2600 monitor=desc:Hewlett Packard HP LA2206 CNC1320BJL,1920x1080@60,-1920x0, 1 # 2560 / 1.6 = 2600 #monitor=name,disable #monitor=eDP-1,2560x1600@60,0x0,1.6 #monitor=DVI-I-1,preferred, auto, 1 # 2560 / 1.6 = 2600 #monitor=DVI-I-2,preferred, auto, 1 # 2560 / 1.6 = 2600 ################### ### MY PROGRAMS ### ################### # See https://wiki.hyprland.org/Configuring/Keywords/ ################# ### AUTOSTART ### ################# # Autostart necessary processes (like notifications daemons, status bars, etc.) # Or execute your favorite apps at launch like this: exec-once = dbus-update-activation-environment --systemd DISPLAY WAYLAND_DISPLAY exec-once = hyprpm reload && hyprctl reload exec-once = hypridle exec-once = waybar exec-once = solaar -w hide 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 ############################# ### ENVIRONMENT VARIABLES ### ############################# # See https://wiki.hyprland.org/Configuring/Environment-variables/ env = XCURSOR_SIZE,24 env = GTK_USE_PORTAL,0 env = HYPRCURSOR_SIZE,24 env = GTK_THEME,Breeze:dark #env = LIBVA_DRIVER_NAME,nvidia #env = XDG_SESSION_TYPE,wayland #env = GBM_BACKEND,nvidia-drm #env = __GLX_VENDOR_LIBRARY_NAME,nvidia #env = WLR_DRM_DEVICES,$HOME/.config/hypr/cards/nvidiacard #env = WLR_DRM_DEVICES,$HOME/.config/hypr/cards/nvidiacard:$HOME/.config/hypr/cards/intelcard #env = WLR_DRM_DEVICES,$HOME/.config/hypr/cards/intelcard:$HOME/.config/hypr/cards/nvidiacard #env = WLR_DRM_DEVICES,$HOME/.config/hypr/cards/intelcard:$HOME/.config/hypr/cards/platform-evdi.0-card:$HOME/.config/hypr/cards/platform-evdi.1-card env = GDK_SCALE,2 #xwayland { # force_zero_scaling = true #} cursor { no_hardware_cursors = true hide_on_key_press = true inactive_timeout = 1000 } ##################### ### LOOK AND FEEL ### ##################### # Refer to https://wiki.hyprland.org/Configuring/Variables/ # https://wiki.hyprland.org/Configuring/Variables/#general general { gaps_in = 1 gaps_out = 1 border_size = 1 # https://wiki.hyprland.org/Configuring/Variables/#variable-types for info about colors col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg col.inactive_border = rgba(595959aa) # Set to true enable resizing windows by clicking and dragging on borders and gaps resize_on_border = false # Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on allow_tearing = false layout = master } # https://wiki.hyprland.org/Configuring/Variables/#decoration decoration { rounding = 0 # Change transparency of focused and unfocused windows active_opacity = 1.0 inactive_opacity = 1.0 drop_shadow = false shadow_range = 4 shadow_render_power = 3 col.shadow = rgba(1a1a1aee) # https://wiki.hyprland.org/Configuring/Variables/#blur blur { enabled = false size = 3 passes = 1 vibrancy = 0.1696 } } # https://wiki.hyprland.org/Configuring/Variables/#animations animations { enabled = false # 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 } # See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more dwindle { pseudotile = true # Master switch for pseudotiling. Enabling is bound to modkey + P in the keybinds section below preserve_split = true # You probably want this } # See https://wiki.hyprland.org/Configuring/Master-Layout/ for more master { new_status = slave no_gaps_when_only = 1 inherit_fullscreen = true } # https://wiki.hyprland.org/Configuring/Variables/#misc misc { force_default_wallpaper = 0 disable_hyprland_logo = true new_window_takes_over_fullscreen = 1 vfr = true } ############# ### INPUT ### ############# # https://wiki.hyprland.org/Configuring/Variables/#input input { kb_layout = us kb_variant = kb_model = kb_options = kb_rules = follow_mouse = 1 sensitivity = 0 # -1.0 - 1.0, 0 means no modification. kb_options = altwin:menu_win touchpad { natural_scroll = false tap-to-click = true } } # https://wiki.hyprland.org/Configuring/Variables/#gestures gestures { workspace_swipe = false } # Example per-device config # See https://wiki.hyprland.org/Configuring/Keywords/#per-device-input-configs for more device { name = epic-mouse-v1 sensitivity = -0.5 } debug { disable_logs = false disable_time = false enable_stdout_logs = true } #################### ### KEYBINDINGSS ### #################### source = $HOME/.config/hypr/config/keybindings.conf ############################## ### WINDOWS AND WORKSPACES ### ############################## # See https://wiki.hyprland.org/Configuring/Window-Rules/ for more # See https://wiki.hyprland.org/Configuring/Workspace-Rules/ for workspace rules # Example windowrule v1 # windowrule = float, ^(kitty)$ # Example windowrule v2 # windowrulev2 = float,class:^(kitty)$,title:^(kitty)$ #windowrule = fakefullscreen, title:.* windowrulev2 = float,title:(Floating Window - Show Me The Key) windowrulev2 = pin,title:(Floating Window - Show Me The Key) windowrulev2 = move 100%-w-20, 100%-h-20,title:(Floating Window - Show Me The Key) #windowrule = fakefullscreen, title:ente_auth windowrulev2 = suppressevent maximize, class:.* # You'll probably like this. ################ ### PLUGINS ### ################ source = $HOME/.config/hypr/plugins/hyprsplit.conf Config File: /home/nktnet/.config/hypr/config/keybindings.conf: Read Succeeded # See https://wiki.hyprland.org/Configuring/Keywords/ # Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more # Modifiers $modkey = ALT $winkey = SUPER # Insert submap bindings bind = $modkey, I, submap, insert submap = insert bind = $modkey, I, submap, reset submap = reset # Programs $mfa = ente_auth $terminal = kitty $fileManager = thunar $menu = wofi --show drun # Direct functionalities bind = , PRINT, exec, hyprshot --freeze --mode region bind = , XF86PowerOff, exec, wlogout # Application launchers bind = $winkey, 2, exec, $mfa bind = $winkey, E, exec, $fileManager bind = $winkey, F, exec, firefox bind = $winkey, G, exec, google-chrome-stable bind = $winkey, L, exec, hyprlock bind = $winkey, P, exec, hyprpicker --autocopy --no-fancy bind = $winkey, Q, exec, $terminal bind = $winkey, Return, exec, $terminal bind = $winkey, T, exec, gtk-launch chrome-cifhbcnohmdccbgoicgdjpfamggdegmo-Default.desktop # MS Teams bind = $winkey, U, exec, emote bind = $winkey, V, exec, pavucontrol bind = $winkey, B, exec, pidof waybar || waybar bind = $winkey, S, exec, killall showmethekey-gtk || showmethekey-gtk bind = $modkey SHIFT, Return, exec, $terminal bind = $modkey, P, exec, $menu bind = $modkey, B, exec, killall -SIGUSR1 waybar bind = $modkey SHIFT, B, exec, killall -SIGUSR2 waybar bind = $modkey SHIFT, C, killactive, bind = $modkey SHIFT, Q, exec, killall -9 Hyprland bind = $modkey, F, togglefloating, bind = $modkey, R, fullscreen, 0 bind = $modkey, T, fullscreen, 1 bind = $modkey, M, fullscreen, 1 bind = $modkey, V, exec, cliphist list | wofi --dmenu | cliphist decode | wl-copy # Move Focus bind = $modkey, J, layoutmsg, cyclenext bind = $modkey, K, layoutmsg, cycleprev # Move active window bind = $modkey SHIFT, J, layoutmsg, swapnext bind = $modkey SHIFT, K, layoutmsg, swapprev bind = $modkey SHIFT, H, resizeactive, -50 0 bind = $modkey SHIFT, L, resizeactive, 50 0 # Resize active window bind = $modkey SHIFT, left, resizeactive, -50 0 bind = $modkey SHIFT, right, resizeactive, 50 0 bind = $modkey SHIFT, up, resizeactive, 0 -50 bind = $modkey SHIFT, down, resizeactive, 0 50 # Example special workspace (scratchpad) #bind = $modkey, S, togglespecialworkspace, magic #bind = $modkey SHIFT, S, movetoworkspace, special:magic # Scroll through existing workspaces with modkey + scroll bind = $modkey, mouse_down, workspace, e+1 bind = $modkey, mouse_up, workspace, e-1 # Move/resize windows with modkey + LMB/RMB and dragging bindm = $modkey, mouse:272, movewindow bindm = $modkey, mouse:273, resizewindow # Volume binde =, XF86AudioRaiseVolume, exec, wpctl set-volume -l 1.4 @DEFAULT_AUDIO_SINK@ 5%+ binde =, XF86AudioLowerVolume, exec, wpctl set-volume -l 1.4 @DEFAULT_AUDIO_SINK@ 5%- bind =, XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle # Brightness binde =, XF86MonBrightnessUp, exec, brightnessctl set +5%+ binde =, XF86MonBrightnessDown, exec, brightnessctl set 5%- # Move windows to next/prev monitors bind = $modkey, COMMA, movefocus, -1 bind = $modkey, PERIOD, movefocus, +1 # Move focus to next/prev monitors bind = $modkey, COMMA, focusmonitor, -1 bind = $modkey, PERIOD, focusmonitor, +1 # ============================================================================ # # This was replaced by the hyprsplit plugin # https://github.com/shezdy/hyprsplit # See ~/.config/hypr/plugins/hyprsplit.conf ## Switch workspaces with modkey + [0-9] #bind = $modkey, 1, workspace, 1 #bind = $modkey, 2, workspace, 2 #bind = $modkey, 3, workspace, 3 #bind = $modkey, 4, workspace, 4 #bind = $modkey, 5, workspace, 5 #bind = $modkey, 6, workspace, 6 #bind = $modkey, 7, workspace, 7 #bind = $modkey, 8, workspace, 8 #bind = $modkey, 9, workspace, 9 #bind = $modkey, 0, workspace, 10 ## Move active window to a workspace with modkey + SHIFT + [0-9] #bind = $modkey SHIFT, 1, movetoworkspace, 1 #bind = $modkey SHIFT, 2, movetoworkspace, 2 #bind = $modkey SHIFT, 3, movetoworkspace, 3 #bind = $modkey SHIFT, 4, movetoworkspace, 4 #bind = $modkey SHIFT, 5, movetoworkspace, 5 #bind = $modkey SHIFT, 6, movetoworkspace, 6 #bind = $modkey SHIFT, 7, movetoworkspace, 7 #bind = $modkey SHIFT, 8, movetoworkspace, 8 #bind = $modkey SHIFT, 9, movetoworkspace, 9 #bind = $modkey SHIFT, 0, movetoworkspace, 10 Config File: /home/nktnet/.config/hypr/plugins/hyprsplit.conf: Read Succeeded plugin { hyprsplit { num_workspaces = 10 } } bind = $modkey, 1, split:workspace, 1 bind = $modkey, 2, split:workspace, 2 bind = $modkey, 3, split:workspace, 3 bind = $modkey, 4, split:workspace, 4 bind = $modkey, 5, split:workspace, 5 bind = $modkey, 6, split:workspace, 6 bind = $modkey, 7, split:workspace, 7 bind = $modkey, 8, split:workspace, 8 bind = $modkey, 9, split:workspace, 9 bind = $modkey, 0, split:workspace, 10 bind = $modkey SHIFT, 1, split:movetoworkspacesilent, 1 bind = $modkey SHIFT, 2, split:movetoworkspacesilent, 2 bind = $modkey SHIFT, 3, split:movetoworkspacesilent, 3 bind = $modkey SHIFT, 4, split:movetoworkspacesilent, 4 bind = $modkey SHIFT, 5, split:movetoworkspacesilent, 5 bind = $modkey SHIFT, 6, split:movetoworkspacesilent, 6 bind = $modkey SHIFT, 7, split:movetoworkspacesilent, 7 bind = $modkey SHIFT, 8, split:movetoworkspacesilent, 8 bind = $modkey SHIFT, 9, split:movetoworkspacesilent, 9 bind = $modkey SHIFT, 0, split:movetoworkspacesilent, 10 bind = $modkey, GRAVE, split:swapactiveworkspaces, current +1 bind = $modkey, G, split:grabroguewindows bind = $modkey SHIFT, COMMA, movewindow, mon:-1 bind = $modkey SHIFT, PERIOD, movewindow, mon:+1 ======Config-End======== ```

Description

After setting the misc option new_window_takes_over_fullscreen to 1:

Name Description Type Default
new_window_takes_over_fullscreen If there is a fullscreen window, whether a new tiled window opened should replace the fullscreen one or stay behind. 0 - behind, 1 - takes over, 2 - unfullscreen the current fullscreen window [0/1/2] int 0

and opening a window with "maximise" (dispatcher fullscreen mode 1):

1 - maximize (keeps gaps and bar(s))

When trying to spawn a NEW window, the NEW window does take "focus", but is spawned behind the CURRENT window. I had expected it to spawn in front and be visible in full screen mode 1 (similar to the "Monocle" layout in DWM).

How to reproduce

  1. Set the option misc:new_window_takes_over_fullscreen=1
  2. Open a window in full screen mode 1
  3. Open another window - the second window has focus, but is invisible behind the first window

Crash reports, logs, images, videos

Reproduction Video:

https://github.com/hyprwm/Hyprland/assets/86177399/cd7c21fa-1427-40b6-ad13-addad7b0fc5e

Found someone with the same issue dating back in 2024-02-20 on Discord (message link):

image

And also Reddit (link) from 2024-01-11:

image

nktnet1 commented 4 months ago

After running the debugger and messing with the code for a bit:

https://github.com/hyprwm/Hyprland/blob/45c48984236d7a682a1941b147f8ae489ac9a1e6/src/events/Windows.cpp#L463-L471

Changing lines 468-469 to:

        else if (PWINDOW->m_pWorkspace->m_efFullscreenMode == FULLSCREEN_MAXIMIZED) {
            requestsMaximize = true;
            if (*PNEWTAKESOVERFS == 1)
                overridingNoMaximize = true;

Fixed the issue.


Turns out it was a problem with this line in the default configuration: https://github.com/hyprwm/Hyprland/blob/45c48984236d7a682a1941b147f8ae489ac9a1e6/example/hyprland.conf#L245

Not sure why this was here by default, but it lead to the odd behaviour (bug?) as shown in the video above.

Perhaps this line in the default config can be better documented for new users instead of simply:

# You'll probably like this.

Alternatively, the changes above can be applied to ignore this specific case.