Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Firefox Resizes When Switching Fullscreen Windows (Ugly Stretching Animation) as it tries to resize #9484

Open
2 of 6 tasks
pakosaan opened this issue Feb 25, 2025 · 1 comment
Labels
bug Something isn't working

Comments

@pakosaan
Copy link

Already reported ? *

  • I have searched the existing open and closed issues.

Regression?

I don't know, I started using Hyprland only recently

System Info and Hyprland Version

System/Version info
 Hyprland --version
Hyprland, built from branch  at commit 4520b30d498daca8079365bdb909a8dea38e8d55  (version: bump to 0.44.1).
Date: Wed Oct 9 12:54:39 2024
Tag: v0.44.1, commits: 5309
built against aquamarine 0.4.2

Description

When switching between two fullscreen windows within the same workspace, Firefox tries to resize itself, causing an ugly stretching animation. This issue does not occur when switching workspaces—Chrome and other applications do not resize themselves. The resizing behavior is inconsistent, making fullscreen window switching look jarring and unpleasant.

How to reproduce

Steps to Reproduce:

  1. Open two windows in the same workspace.
  2. Toggle fullscreen (SUPER + F) on Firefox.
  3. Use ALT + TAB to switch between the two fullscreen windows.
  4. Notice that Firefox resizes itself briefly before rendering properly.
    NOTE: i have a keybinding to toggle fullscreen and cyclenext to cycle between windows in same workspace

Attach not paste

  • I understand that all text files must be attached, and not pasted directly. If not respected, this issue will likely get closed as spam

Checklist of files to include below

  • Hyprland config - hyprctl systeminfo -c (always include)
  • Crash report (always include in case of crash)
  • Video (always include in case of a visual bug)
  • Logs (might contain useful info such as errors)

Additional info & File uploads

No response

@pakosaan pakosaan added the bug Something isn't working label Feb 25, 2025
@pakosaan
Copy link
Author

Hyprland, built from branch at commit 4520b30 (version: bump to 0.44.1).
Date: Wed Oct 9 12:54:39 2024
Tag: v0.44.1, commits: 5309
built against aquamarine 0.4.2

flags: (if any)

System Information:
System name: Linux
Node name: lenovo
Release: 6.12.15-200.fc41.x86_64
Version: #1 SMP PREEMPT_DYNAMIC Tue Feb 18 15:24:05 UTC 2025

GPU information:
03:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Lucienne [1002:164c] (rev c2) (prog-if 00 [VGA controller])

os-release: NAME="Fedora Linux"
VERSION="41 (Workstation Edition)"
RELEASE_TYPE=stable
ID=fedora
VERSION_ID=41
VERSION_CODENAME=""
PLATFORM_ID="platform:f41"
PRETTY_NAME="Fedora Linux 41 (Workstation Edition)"
ANSI_COLOR="0;38;2;60;110;180"
LOGO=fedora-logo-icon
CPE_NAME="cpe:/o:fedoraproject:fedora:41"
DEFAULT_HOSTNAME="fedora"
HOME_URL="https://fedoraproject.org/"
DOCUMENTATION_URL="https://docs.fedoraproject.org/en-US/fedora/f41/system-administrators-guide/"
SUPPORT_URL="https://ask.fedoraproject.org/"
BUG_REPORT_URL="https://bugzilla.redhat.com/"
REDHAT_BUGZILLA_PRODUCT="Fedora"
REDHAT_BUGZILLA_PRODUCT_VERSION=41
REDHAT_SUPPORT_PRODUCT="Fedora"
REDHAT_SUPPORT_PRODUCT_VERSION=41
SUPPORT_END=2025-12-15
VARIANT="Workstation Edition"
VARIANT_ID=workstation

plugins:

======Config-Start======

Config File: /home/pakosaan/.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.

autogenerated = 1 # remove this line to remove the warning

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

source =/.config/hypr/hyprland/env.conf
source =
/.config/hypr/hyprland/autostart.conf
source =/.config/hypr/hyprland/general.conf
source =
/.config/hypr/hyprland/rules.conf
source =~/.config/hypr/hyprland/keymaps.conf

Config File: /home/pakosaan/.config/hypr/hyprland/env.conf: Read Succeeded
#############################

ENVIRONMENT VARIABLES

#############################

See https://wiki.hyprland.org/Configuring/Environment-variables/

#env = GTK_IM_MODULE,ibus
#env = QT_IM_MODULE,ibus
#env = XMODIFIERS,@im=ibus
env = XCURSOR_SIZE,24
env = HYPRCURSOR_SIZE,24

env = GDK_BACKEND,wayland,x11,*
env = SDL_VIDEODRIVER,wayland
env = CLUTTER_BACKEND,wayland

env = XDG_CURRENT_DESKTOP,Hyprland
env = XDG_SESSION_TYPE,wayland
env = XDG_SESSION_DESKTOP,Hyprland

env = QT_QPA_PLATFORM,wayland;xcb
env = QT_QPA_PLATFORMTHEME,qt5ct
env = QT_QPA_PLATFORMTHEME,qt6ct
env = QT_WAYLAND_DISABLE_WINDOWDECORATION,1
env = QT_AUTO_SCREEN_SCALE_FACTOR,1

hyprland-qt-support

env = QT_QUICK_CONTROLS_STYLE,org.hyprland.style
env = MOZ_ENABLE_WAYLAND,1
env = ELECTRON_OZONE_PLATFORM_HINT,auto

KVM Environment

env = WLR_RENDERER_ALLOW_SOFTWARE, 1

env = LIBGL_ALWAYS_SOFTWARE,1

Config File: /home/pakosaan/.config/hypr/hyprland/autostart.conf: Read Succeeded
#################

AUTOSTART

#################

Autostart necessary processes (like notifications daemons, status bars, etc.)

Or execute your favorite apps at launch like this:

exec-once = $terminal

exec-once = ~/.local/bin/scripts/xdg-portal-start.sh
exec-once = /usr/bin/gnome-keyring-daemon --start --components=secrets &

exec-once = swaync
exec-once = clipse -listen

exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP
exec-once = systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP
exec-once = waybar &
exec-once = hypridle &
exec-once = hyprpaper &

exec-once = dropbox start

Clipboard: history

exec-once = wl-paste --watch cliphist store &

exec-once = wl-paste --type text --watch ~/go/bin/cliphist store

exec-once = wl-paste --type image --watch ~/go/bin/cliphist store

Config File: /home/pakosaan/.config/hypr/hyprland/general.conf: Read Succeeded
################

MONITORS

################

See https://wiki.hyprland.org/Configuring/Monitors/

monitor=,preferred,auto,1.25

#############

INPUT

#############

https://wiki.hyprland.org/Configuring/Variables/#input

input {
kb_layout = us,np
kb_variant =
kb_model =
kb_options = grp:win_space_toggle
kb_rules =

follow_mouse = 1

sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
numlock_by_default = true


touchpad {
disable_while_typing = true
natural_scroll = false
clickfinger_behavior = false
middle_button_emulation = true
tap-to-click = true
drag_lock = false
}

}

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
}

#####################

LOOK AND FEEL

#####################

Refer to https://wiki.hyprland.org/Configuring/Variables/

https://wiki.hyprland.org/Configuring/Variables/#general

general {
gaps_in = 2
gaps_out = 1

border_size = 1

# https://wiki.hyprland.org/Configuring/Variables/#variable-types for info about colors
col.active_border = rgba(ff9900ee) rgba(ffcc00ee) 45deg
col.inactive_border = rgba(606060aa)

# Set to true enable resizing windows by clicking and dragging on borders and gaps
resize_on_border = true

# Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on
allow_tearing = false

layout = dwindle

}

https://wiki.hyprland.org/Configuring/Variables/#decoration

decoration {
rounding = 0

# Change transparency of focused and unfocused windows
active_opacity = 1.0
inactive_opacity = 0.8

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 {
bezier = myBezier, 0.05, 0.9, 0.1, 1.0
enabled = false
animation = windows, 0.2, 1, default
animation = border,0.2, 1, default
animation = workspaces, 0.2, 1, default
animation = fade, 1, 2, default
}

See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more

dwindle {
no_gaps_when_only = 1
pseudotile = true # Master switch for pseudotiling. Enabling is bound to mainMod + 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 = master
}

unscale XWayland

xwayland {
enabled = true
force_zero_scaling=true

}

https://wiki.hyprland.org/Configuring/Variables/#misc

misc {
disable_splash_rendering = true
force_default_wallpaper = 0 # Set to 0 or 1 to disable the anime mascot wallpapers
disable_hyprland_logo = true # If true disables the random hyprland logo / anime girl background. :(
vfr = true #since it’ll lower the amount of sent frames when nothing is happening on-screen.
vrr = 2
mouse_move_enables_dpms = true
focus_on_activate = false
initial_workspace_tracking = 0
middle_click_paste = false
enable_swallow = true
swallow_regex = ^(Alacritty|kitty|footclient|ghosttty)$
}

Config File: /home/pakosaan/.config/hypr/hyprland/rules.conf: Read Succeeded
##############################

WINDOWS AND WORKSPACES

##############################

See https://wiki.hyprland.org/Configuring/Window-Rules/ for more

See https://wiki.hyprland.org/Configuring/Workspace-Rules/ for workspace rules

workspace = special:music, on-created-empty:hide

Example windowrule v1

windowrule = float, ^(kitty)$

Example windowrule v2

windowrulev2 = float,class:^(kitty)$,title:^(kitty)$

Ignore maximize requests from apps. You'll probably like this.

#Take control over fullscreen status
windowrulev2 = suppressevent maximize, class:.*
windowrulev2 = suppressevent fullscreen, class:.*

Fix some dragging issues with XWayland

windowrulev2 = nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0
windowrulev2 = workspace 1, class:^(kitty)$
windowrulev2 = workspace 1, class:^(code)$
windowrulev2 = workspace 1,title:(foot),class:^(foot)$
windowrulev2 = workspace 1,class:^(com.mitchellh.ghostty)$
windowrulev2 = workspace 2, class:^(org.mozilla.firefox)$
windowrulev2 = workspace 2, class:^(google-chrome)$
windowrulev2 = workspace 3, class:^(org.gnome.Nautilus)$
windowrulev2 = workspace 3, class:^(thunar)$
windowrulev2 = workspace 4,class:^(mpv)$
windowrulev2 = workspace 4,class:^(org.kde.haruna)$
windowrulev2 = workspace 4,class:^(vlc)$
windowrulev2 = workspace 5, class:^(com.github.johnfactotum.Foliate)$
windowrulev2 = workspace 5, class:^(info.febvre.Komikku)$
windowrulev2 = workspace 6,class:^(io.gitlab.liferooter.TextPieces)$
windowrulev2 = workspace 6,class:^(org.gnome.Meld)$
windowrulev2 = workspace 6,class:^(libreoffice-calc)$
windowrulev2 = workspace 6,class:^(libreoffice-startcenter)$
windowrulev2 = workspace 6,class:^(libreoffice-writer)$
windowrulev2 = workspace 6,class:^(libreoffice-impress)$
windowrulev2 = workspace 6, class:^(obsidian)$
windowrulev2 = workspace 7, class:^(org.kde.kdenlive)$
windowrulev2 = workspace 7, class:^(sqlitebrowser)$
windowrulev2 = workspace 7, class:^(net.lutris.Lutris)$
windowrulev2 = workspace 8,class:^(Gimp-2.10)$
windowrulev2 = workspace 9, class:^(com.obsproject.Studio)$
windowrulev2 = workspace 9, class:^(org.telegram.desktop)$
windowrulev2 = workspace 9,class:^(wihotspot)$
windowrulev2 = float, class:^(wev)$
windowrulev2 = float,title:(clipse) # ensure you have a floating window class set if you want this behavior
windowrulev2 = float,title:(nmtui) # ensure you have a floating window class set if you want this behavior
windowrulev2 = size 40% 60%,title:(nmtui) # set the size of the window as necessary
windowrulev2 = center,title:(nmtui)
windowrulev2 = size 622 652,title:(clipse) # set the size of the window as necessary
windowrulev2 = center,title:(clipse)
windowrulev2 = float, class:^(file-roller)$
windowrulev2 = float, class:^(org.gnome.Loupe)$
windowrulev2 = size 90% 90%,class:^(xdg-desktop-portal-gtk)$
windowrulev2 = float,class:^(xdg-desktop-portal-gtk)$
windowrulev2 = float,class:^(org.pulseaudio.pavucontrol)$
windowrulev2 = float,class:^(org.gnome.Calculator)$
windowrulev2 = float,class:^(blueman-manager)$
windowrulev2 = float,class:^(xdm-app)$
windowrulev2 = float,class:^(nm-connection-editor)$
windowrulev2 = float,class:^(qalculate-gtk)$
windowrulev2 = float,class:^(io.ente.auth)$
windowrulev2 = size 30% 80%, class:^(io.ente.auth)$
windowrulev2 = center, class:^(io.ente.auth)$
windowrulev2 = float,class:^(org.gnome.FileRoller)$

Browser Picture in Picture

windowrulev2 = float, title:^(Picture-in-Picture)$
windowrulev2 = pin, title:^(Picture-in-Picture)$
windowrulev2 = move 69.5% 4%, title:^(Picture-in-Picture)$

#specialworkspace
windowrulev2 = workspace special:music, class:^(spotify)$
windowrulev2 = float, class:^(spotify)$
windowrulev2 = size 90% 90%, class:^(spotify)$
windowrulev2 = center, class:^(spotify)$
windowrulev2 = workspace special:effect, class:^(com.github.wwmm.easyeffects)$
windowrulev2 = float, class:^(com.github.wwmm.easyeffects)$
windowrulev2 = size 90% 90%, class:^(com.github.wwmm.easyeffects)$
windowrulev2 = center, class:^(com.github.wwmm.easyeffects)$
windowrulev2 = workspace special:music, class:^(com.github.neithern.g4music)$
windowrulev2 = float, class:^(com.github.neithern.g4music)$
windowrulev2 = size 90% 90%, class:^(com.github.neithern.g4music)$
windowrulev2 = center, class:^(com.github.neithern.g4music)$

xwayland windowsharing https://wiki.hyprland.org/Useful-Utilities/Screen-Sharing/

windowrulev2 = opacity 0.0 override, class:^(xwaylandvideobridge)$
windowrulev2 = noanim, class:^(xwaylandvideobridge)$
windowrulev2 = noinitialfocus, class:^(xwaylandvideobridge)$
windowrulev2 = maxsize 1 1, class:^(xwaylandvideobridge)$
windowrulev2 = noblur, class:^(xwaylandvideobridge)$
windowrulev2 = nofocus, class:^(xwaylandvideobridge)$

Config File: /home/pakosaan/.config/hypr/hyprland/keymaps.conf: Read Succeeded
###################

MY PROGRAMS

###################

See https://wiki.hyprland.org/Configuring/Keywords/

Set programs that you use

$terminal = ghostty # kitty is using huge ram
$fileManager = nautilus
#$menu = wofi --show drun
$menu = fuzzel -b 000000ff
$toggle_calc = pidof gnome-calculator >/dev/null && killall gnome-calculator || gnome-calculator # toogle the waybar
$toggle_waybar = killall -SIGUSR1 waybar # toogle the waybar
$reload_waybar = killall -SIGUSR2 waybar # reload the waybar
#$kbd_layout=~/.local/bin/scripts/kbd-layout.sh

###################

KEYBINDINGS

###################

See https://wiki.hyprland.org/Configuring/Keywords/

$mainMod = SUPER # Sets "Windows" key as main modifier

Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more

bind = CTRL ALT, T, exec, $terminal
bind = $mainMod SHIFT, C, killactive,
bind = $mainMod SHIFT, X, exit,
bind = $mainMod, E, exec, $fileManager
bind = $mainMod, V, togglefloating,
bind = ALT, Space, exec, $menu
bind = $mainMod, P, pseudo, # dwindle
bind = $mainMod SHIFT, J, togglesplit, # dwindle
bind = $mainMod,B, exec, $toggle_waybar # toogle the waybar
bind = $mainMod SHIFT,R, exec, $reload_waybar # reload the waybar

bind = $mainMod SHIFT,V,exec,pkill fuzzel || ~/go/bin/cliphist list | fuzzel --dmenu | ~/go/bin/cliphist decode | wl-copy

bind = $mainMod SHIFT,P,exec,~/go/bin/cliphist list | sed -n '2p' | ~/go/bin/cliphist decode | wl-copy

bind = $mainMod SHIFT, V, exec, foot --title="clipse" -e 'clipse'

#bind = $mainMod,Space,exec,$kbd_layout
bind = $mainMod CTRL, K, exec, ~/.local/bin/scripts/keybindings.sh # Show keybindings

to switch between windows in a floating workspace

bind = ALT, Tab, cyclenext # change focus to another window

bind = ALT, Tab, bringactivetotop

bind = $mainMod , Tab, workspace, e+1 # [hidden]
bind = $mainMod SHIFT, Tab, workspace, e-1 # [hidden]

Maximize

bind = $mainMod, F, fullscreen,1
bind = $mainMod SHIFT, F, fullscreen,0

Move focus with mainMod + hjkl keys

bind = $mainMod, H, movefocus, l
bind = $mainMod, J, movefocus, d
bind = $mainMod, K, movefocus, u
bind = $mainMod, L, movefocus, r

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

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, M, togglespecialworkspace, special

#bind = $mainMod SHIFT, M, movetoworkspace, special:magic

bind = ALT, 1, togglespecialworkspace, music

SUPER + G for Game Workspace

bind = ALT, 2, togglespecialworkspace, effect
bind = ALT SHIFT, 1, movetoworkspace, special:music
bind = ALT SHIFT, 2, movetoworkspace, special:effect

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

Laptop multimedia keys for volume and LCD brightness

bindel = ,XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 3%+
bindel = ,XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 3%-
bindel = ,XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
bindel = ,XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle
bindel = ,XF86MonBrightnessUp, exec, brightnessctl s 2%+
bindel = ,XF86MonBrightnessDown, exec, brightnessctl s 2%-
bindel = ,XF86Calculator, exec, $toggle_calc

Requires playerctl

bindl = , XF86AudioNext, exec, playerctl next
bindl = , XF86AudioPause, exec, playerctl play-pause
bindl = , XF86AudioPlay, exec, playerctl play-pause
bindl = , XF86AudioPrev, exec, playerctl previous
bindl = , XF86AudioStop, exec, playerctl stop

SCREENSHOT

bind = , Print , exec,~/.local/bin/scripts/hyprshot -m window -o /Dropbox/Screenshots/Fedora/
bind =SHIFT,Print,exec,
/.local/bin/scripts/hyprshot -m region -o ~/Dropbox/Screenshots/Fedora/

#hyprlock
bind = $mainMod SHIFT,l,exec,hyprlock
bind = ,XF86PowerOff,exec,hyprlock & systemctl suspend
bindl=,switch:on:Lid Switch, exec, hyprctl dispatch dpms off && hyprctl dispatch exec hyprlock
bindl=,switch:off:Lid Switch, exec, hyprctl dispatch dpms on

Keybinding to toggle gnome-system-monitor

bind = CTRL, Escape, exec, [float;size 80% 80%;center] gnome-system-monitor
bind = $mainMod,period,exec,~/.local/bin/scripts/fuzzel-emoji.sh
bind = $mainMod,i,exec,XDG_CURRENT_DESKTOP="gnome" gnome-control-center # Launch GNOME Settings

Window split ratio

#/# binde = Super, +/-,, # Window: split ratio +/- 0.1
binde = $mainMod, Minus, splitratio, -0.1 # [hidden]
binde = $mainMod, Equal, splitratio, +0.1 # [hidden]
binde = $mainMod, Semicolon, splitratio, -0.1 # [hidden]
binde = $mainMod, Apostrophe, splitratio, +0.1 # [hidden]
bind = $mainMod SHIFT, Escape, exec, hyprctl kill # Pick and kill a window
bind = $mainMod SHIFT, Q, exec, hyprpicker -a # Pick color (Hex) >> clipboard

======Config-End========

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

1 participant