Skip to content

Corner "shadow" in the terminal when maximizing window in GNOME wayland #7701

@vandalt

Description

@vandalt

Hi!

Describe the bug

When maximizing the kitty window on GNOME wayland, there is a small corner-like shadow in the terminal. It is more noticeable with a light background, but happens also with darker ones (though with black it's invisible). The position of the shadow changes with the initial size of the window (bigger -> shadow closer to the bottom right corner) but not its position. I tried both the latest release and the master branch, and the error occurred in both cases

It does not happen on Xorg nor with setting hide_window_decorations yes. Changing the wayland decoration color between background and system does not fix problem.

I do not have another wayland window manager or desktop environment installed so I don't know if this is GNOME-specific or not.

To Reproduce

  1. Open kitty with window decorations on GNOME wayland
  2. Maximize the window
  3. See error

Screenshots

kitty_screenshot

Environment details

The requested kitty environment info along with some debug logs using --debug-gl in case they are useful

Kitty environment info
kitty 0.35.2 (75d0dcab8d) created by Kovid Goyal
Linux yoga 6.10.3-arch1-1 #1 SMP PREEMPT_DYNAMIC Sun, 04 Aug 2024 05:11:32 +0000 x86_64
Arch Linux 6.10.3-arch1-1 (/dev/tty)

Running under: Wayland (GNOME Shell 46.4) missing: layer_shell
OpenGL: '4.6 (Core Profile) Mesa 24.1.5-arch1.1' Detected version: 4.6
Frozen: False
Fonts:
  medium: JetBrainsMonoNF-Regular: /usr/share/fonts/TTF/JetBrainsMonoNerdFont-Regular.ttf:0
  bold: JetBrainsMonoNF-SemiBold: /usr/share/fonts/TTF/JetBrainsMonoNerdFont-SemiBold.ttf:0
  italic: JetBrainsMonoNF-Italic: /usr/share/fonts/TTF/JetBrainsMonoNerdFont-Italic.ttf:0
  bi: JetBrainsMonoNF-SemiBoldItalic: /usr/share/fonts/TTF/JetBrainsMonoNerdFont-SemiBoldItalic.ttf:0
Paths:
  kitty: /usr/bin/kitty
  base dir: /usr/lib/kitty
  extensions dir: /usr/lib/kitty/kitty
  system shell: /usr/bin/zsh
Loaded config files:
  /home/vandal/.config/kitty/kitty.conf

Config options different from defaults:
allow_remote_control    yes
disable_ligatures       1
enable_audio_bell       False
font_family             JetBrainsMono Nerd Font
font_size               10.0
listen_on               unix:/tmp/mykitty
mouse_hide_wait         0.0
remember_window_size    False
shell_integration       frozenset({'no-cursor'})
Changed mouse actions:
	ctrl+shift+right press ungrabbed →  combine : mouse_select_command_output : kitty_scrollback_nvim --config ksb_builtin_last_visited_cmd_output
Added shortcuts:
	ctrl+alt+enter →  launch --cwd=current
	kitty_mod+alt+w →  set_window_title
	kitty_mod+m →  new_os_window_with_cwd
Changed shortcuts:
	kitty_mod+g →  kitty_scrollback_nvim --config ksb_builtin_last_cmd_output
	kitty_mod+h →  kitty_scrollback_nvim
Colors:
	active_border_color     #2e7de9   
	active_tab_background   #2e7de9   
	active_tab_foreground   #e9e9ec   
	background              #e1e2e7   
	color0                  #e9e9ed   
	color1                  #f52a65   
	color10                 #587539   
	color11                 #8c6c3e   
	color12                 #2e7de9   
	color13                 #9854f1   
	color14                 #007197   
	color15                 #3760bf   
	color16                 #b15c00   
	color17                 #c64343   
	color2                  #587539   
	color3                  #8c6c3e   
	color4                  #2e7de9   
	color5                  #9854f1   
	color6                  #007197   
	color7                  #6172b0   
	color8                  #a1a6c5   
	color9                  #f52a65   
	cursor                  #3760bf   
	cursor_text_color       #e1e2e7   
	foreground              #3760bf   
	inactive_border_color   #c4c8da   
	inactive_tab_background #c4c8da   
	inactive_tab_foreground #8990b3   
	selection_background    #b6bfe2   
	selection_foreground    #3760bf   
	url_color               #387068   
	wayland_titlebar_color  background

Important environment variables seen by the kitty process:
	PATH                                /home/vandal/.local/bin:/home/vandal/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/var/lib/flatpak/exports/bin:/opt/fv:/usr/lib/jvm/default/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl
	LANG                                en_CA.UTF-8
	EDITOR                              nvim
	SHELL                               /usr/bin/zsh
	DISPLAY                             :0
	WAYLAND_DISPLAY                     wayland-0
	USER                                vandal
	XDG_DATA_DIRS                       /home/vandal/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share/:/usr/share/
	XDG_RUNTIME_DIR                     /run/user/1000
	XDG_CURRENT_DESKTOP                 GNOME
	XDG_MENU_PREFIX                     gnome-
	XDG_SESSION_CLASS                   user
	XDG_SESSION_DESKTOP                 gnome
	XDG_SESSION_TYPE                    wayland

Debug log with Xorg (bug does not happen)
[0.188] OS Window created
[0.203] Child launched
[0.205] Got notification server capabilities: frozenset({'actions', 'body-markup', 'persistence', 'sound', 'body', 'icon-static'})
[2.272] SIGWINCH sent to child in window: 1 with size: (58, 240, 3840, 2088)
[3.758] SIGWINCH sent to child in window: 1 with size: (11, 40, 640, 396)
[0.154] GL version string: '4.6 (Core Profile) Mesa 24.1.5-arch1.1' Detected version: 4.6
Debug log with Wayland and decorations disabled (bug does not happen)
[0.045] Compositor missing capabilities: layer_shell
[0.060] Creating window 1 at size: 640x400 and scale 1
[0.076] CSD: old.size: 0x0 new.size: 640x400 needs_update: 1 shadow_changed: 1 size_changed: 1 state_changed: 0 buffer_destroyed: 0
[0.076] Created decoration buffers at scale: 1.000000
[0.083] Fractional scale requested: 180/120 = 1.50 for window 1
[0.083] Resizing framebuffer of window: 1 to: 960x600 window size: 640x400 at scale: 1.500
[0.083] Waiting for swap to commit Wayland surface for window: 1
[0.083] CSD: old.size: 640x400 new.size: 640x400 needs_update: 1 shadow_changed: 0 size_changed: 1 state_changed: 0 buffer_destroyed: 0
[0.084] Created decoration buffers at scale: 1.500000
[0.084] Preferred integer buffer scale changed to: 2 for window 1
[0.084] Compositor set top-level bounds of: 2560x1440 for window 1
[0.084] Compositor top-level capabilities: maximize=1 minimize=1 window_menu=1 fullscreen=1
[0.084] XDG top-level configure event for window 1: size: 0x0 states: 
[0.084] XDG surface configure event received and acknowledged for window 1
[0.084] Waiting for swap to commit Wayland surface for window: 1
[0.084] CSD: old.size: 640x400 new.size: 640x400 needs_update: 0 shadow_changed: 0 size_changed: 0 state_changed: 0 buffer_destroyed: 0
[0.084] Final window 1 content size: 640x400 resized: 0
[0.084] Setting window 1 "visible area" geometry in configure event: x=0 y=-24 640x424 viewport: 640x400
[0.084] Fractional scale requested: 240/120 = 2.00 for window 1
[0.084] Resizing framebuffer of window: 1 to: 1280x800 window size: 640x400 at scale: 2.000
[0.084] Waiting for swap to commit Wayland surface for window: 1
[0.084] CSD: old.size: 640x400 new.size: 640x400 needs_update: 1 shadow_changed: 0 size_changed: 1 state_changed: 0 buffer_destroyed: 0
[0.086] Created decoration buffers at scale: 2.000000
[0.104] CSD: old.size: 640x400 new.size: 640x400 needs_update: 0 shadow_changed: 0 size_changed: 0 state_changed: 0 buffer_destroyed: 0
[0.107] OS Window created
[0.122] Child launched
[0.122] CSD: old.size: 640x400 new.size: 640x400 needs_update: 0 shadow_changed: 0 size_changed: 0 state_changed: 0 buffer_destroyed: 0
[0.123] Window 1 swapped committing surface
[0.149] Calling wl_pointer_set_cursor in setCursorImage with surface: 0x5e33b27ef3f0 and serial: 0
[0.149] Got notification server capabilities: frozenset({'sound', 'body-markup', 'persistence', 'actions', 'icon-static', 'body'})
[0.149] Fractional scale requested: 180/120 = 1.50 for window 1
[0.149] Resizing framebuffer of window: 1 to: 960x600 window size: 640x400 at scale: 1.500
[0.149] Waiting for swap to commit Wayland surface for window: 1
[0.149] CSD: old.size: 640x400 new.size: 640x400 needs_update: 1 shadow_changed: 0 size_changed: 1 state_changed: 0 buffer_destroyed: 1
[0.152] Created decoration buffers at scale: 1.500000
[0.152] Compositor set top-level bounds of: 2560x1440 for window 1
[0.152] XDG top-level configure event for window 1: size: 640x424 states: TOPLEVEL_STATE_ACTIVATED 
[0.152] XDG surface configure event received and acknowledged for window 1
[0.152] CSD: old.size: 640x400 new.size: 640x400 needs_update: 1 shadow_changed: 0 size_changed: 0 state_changed: 1 buffer_destroyed: 0
[0.153] Final window 1 content size: 640x400 resized: 0
[0.153] Setting window 1 "visible area" geometry in configure event: x=0 y=-24 640x424 viewport: 640x400
[0.153] Window 1 swapped committing surface
[0.179] CSD: old.size: 640x400 new.size: 640x400 needs_update: 1 shadow_changed: 0 size_changed: 0 state_changed: 0 buffer_destroyed: 1
[0.181] Created decoration buffers at scale: 1.500000
[0.263] CSD: old.size: 640x400 new.size: 640x400 needs_update: 1 shadow_changed: 0 size_changed: 0 state_changed: 0 buffer_destroyed: 1
[0.264] Created decoration buffers at scale: 1.500000
[0.264] SIGWINCH sent to child in window: 1 with size: (22, 80, 960, 594)
[2.156] Compositor set top-level bounds of: 2560x1440 for window 1
[2.156] XDG top-level configure event for window 1: size: 2560x1440 states: TOPLEVEL_STATE_MAXIMIZED TOPLEVEL_STATE_ACTIVATED TOPLEVEL_STATE_TILED_TOP TOPLEVEL_STATE_TILED_RIGHT TOPLEVEL_STATE_TILED_BOTTOM TOPLEVEL_STATE_TILED_LEFT 
[2.157] XDG surface configure event received and acknowledged for window 1
[2.157] Resizing framebuffer of window: 1 to: 3840x2124 window size: 2560x1416 at scale: 1.500
[2.157] Waiting for swap to commit Wayland surface for window: 1
[2.157] CSD: old.size: 640x400 new.size: 2560x1416 needs_update: 1 shadow_changed: 1 size_changed: 1 state_changed: 1 buffer_destroyed: 1
[2.158] Created decoration buffers at scale: 1.500000
[2.158] Final window 1 content size: 2560x1416 resized: 1
[2.158] Setting window 1 "visible area" geometry in configure event: x=0 y=-24 2560x1440 viewport: 2560x1416
[2.164] Window 1 swapped committing surface
[2.209] Calling wl_pointer_set_cursor in setCursorImage with surface: 0x5e33b27ef3f0 and serial: 395
[2.259] SIGWINCH sent to child in window: 1 with size: (78, 320, 3840, 2106)
[2.261] Calling wl_pointer_set_cursor in setCursorImage with surface: 0x5e33b27ef3f0 and serial: 395
[3.282] Compositor set top-level bounds of: 2560x1440 for window 1
[3.282] XDG top-level configure event for window 1: size: 640x424 states: TOPLEVEL_STATE_ACTIVATED 
[3.282] XDG surface configure event received and acknowledged for window 1
[3.282] Calling wl_pointer_set_cursor in setCursorImage with surface: 0x5e33b27ef3f0 and serial: 395
[3.282] Resizing framebuffer of window: 1 to: 960x600 window size: 640x400 at scale: 1.500
[3.283] Waiting for swap to commit Wayland surface for window: 1
[3.283] CSD: old.size: 2560x1416 new.size: 640x400 needs_update: 1 shadow_changed: 1 size_changed: 1 state_changed: 1 buffer_destroyed: 1
[3.283] Created decoration buffers at scale: 1.500000
[3.283] Final window 1 content size: 640x400 resized: 1
[3.283] Setting window 1 "visible area" geometry in configure event: x=0 y=-24 640x424 viewport: 640x400
[3.285] Window 1 swapped committing surface
[3.333] Calling wl_pointer_set_cursor in setCursorImage with surface: 0x5e33b27ef3f0 and serial: 395
[3.385] SIGWINCH sent to child in window: 1 with size: (22, 80, 960, 594)
[0.076] GL version string: '4.6 (Core Profile) Mesa 24.1.5-arch1.1' Detected version: 4.6

Debug log with Xorg
[0.048] Compositor missing capabilities: layer_shell
[0.063] Creating window 1 at size: 640x400 and scale 1
[0.085] Fractional scale requested: 180/120 = 1.50 for window 1
[0.085] Resizing framebuffer of window: 1 to: 960x600 window size: 640x400 at scale: 1.500
[0.085] Waiting for swap to commit Wayland surface for window: 1
[0.085] Preferred integer buffer scale changed to: 2 for window 1
[0.085] Compositor set top-level bounds of: 2560x1440 for window 1
[0.085] Compositor top-level capabilities: maximize=1 minimize=1 window_menu=1 fullscreen=1
[0.085] XDG top-level configure event for window 1: size: 0x0 states: 
[0.085] XDG surface configure event received and acknowledged for window 1
[0.085] Waiting for swap to commit Wayland surface for window: 1
[0.085] Final window 1 content size: 640x400 resized: 0
[0.085] Setting window 1 "visible area" geometry in configure event: x=0 y=0 640x400 viewport: 640x400
[0.108] OS Window created
[0.122] Child launched
[0.123] Window 1 swapped committing surface
[0.150] Calling wl_pointer_set_cursor in setCursorImage with surface: 0x6453cacb13f0 and serial: 0
[0.150] Got notification server capabilities: frozenset({'persistence', 'body-markup', 'body', 'icon-static', 'actions', 'sound'})
[0.150] Fractional scale requested: 240/120 = 2.00 for window 1
[0.150] Resizing framebuffer of window: 1 to: 1280x800 window size: 640x400 at scale: 2.000
[0.150] Waiting for swap to commit Wayland surface for window: 1
[0.150] Fractional scale requested: 180/120 = 1.50 for window 1
[0.150] Resizing framebuffer of window: 1 to: 960x600 window size: 640x400 at scale: 1.500
[0.151] Waiting for swap to commit Wayland surface for window: 1
[0.151] Compositor set top-level bounds of: 2560x1440 for window 1
[0.151] XDG top-level configure event for window 1: size: 640x400 states: TOPLEVEL_STATE_ACTIVATED 
[0.151] XDG surface configure event received and acknowledged for window 1
[0.151] Final window 1 content size: 640x400 resized: 0
[0.151] Setting window 1 "visible area" geometry in configure event: x=0 y=0 640x400 viewport: 640x400
[0.152] Window 1 swapped committing surface
[1.166] Compositor set top-level bounds of: 2560x1440 for window 1
[1.167] XDG top-level configure event for window 1: size: 2560x1440 states: TOPLEVEL_STATE_MAXIMIZED TOPLEVEL_STATE_ACTIVATED TOPLEVEL_STATE_TILED_TOP TOPLEVEL_STATE_TILED_RIGHT TOPLEVEL_STATE_TILED_BOTTOM TOPLEVEL_STATE_TILED_LEFT 
[1.167] XDG surface configure event received and acknowledged for window 1
[1.167] Resizing framebuffer of window: 1 to: 3840x2160 window size: 2560x1440 at scale: 1.500
[1.167] Waiting for swap to commit Wayland surface for window: 1
[1.167] Final window 1 content size: 2560x1440 resized: 1
[1.167] Setting window 1 "visible area" geometry in configure event: x=0 y=0 2560x1440 viewport: 2560x1440
[1.174] Window 1 swapped committing surface
[1.236] Calling wl_pointer_set_cursor in setCursorImage with surface: 0x6453cacb13f0 and serial: 676
[1.269] SIGWINCH sent to child in window: 1 with size: (80, 320, 3840, 2160)
[1.286] Calling wl_pointer_set_cursor in setCursorImage with surface: 0x6453cacb13f0 and serial: 676
[2.234] Compositor set top-level bounds of: 2560x1440 for window 1
[2.235] XDG top-level configure event for window 1: size: 640x400 states: TOPLEVEL_STATE_ACTIVATED 
[2.235] XDG surface configure event received and acknowledged for window 1
[2.235] Calling wl_pointer_set_cursor in setCursorImage with surface: 0x6453cacb13f0 and serial: 676
[2.235] Resizing framebuffer of window: 1 to: 960x600 window size: 640x400 at scale: 1.500
[2.235] Waiting for swap to commit Wayland surface for window: 1
[2.235] Final window 1 content size: 640x400 resized: 1
[2.235] Setting window 1 "visible area" geometry in configure event: x=0 y=0 640x400 viewport: 640x400
[2.236] Window 1 swapped committing surface
[2.285] Calling wl_pointer_set_cursor in setCursorImage with surface: 0x6453cacb13f0 and serial: 676
[2.337] SIGWINCH sent to child in window: 1 with size: (22, 80, 960, 594)
[0.079] GL version string: '4.6 (Core Profile) Mesa 24.1.5-arch1.1' Detected version: 4.6

Additional context

This minimal config should be enough to reproduce the bug (on GNOME wayland at least).

hide_window_decorations no
foreground #000000
background #dddddd

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions