moverest / wl-kbptr

Control the mouse pointer with the keyboard on Wayland.
GNU General Public License v3.0
56 stars 7 forks source link

Blurry text when using scaling on Hyprland #14

Closed matejdro closed 2 months ago

matejdro commented 2 months ago

It appears that wl-kbptr does not properly support display scaling.

wl-kbptr on 200% scaling:

(click on the image as both images look the same when shrinked down here)

image

wl-kbptr on no scaling:

image

note that the only thing scaling does is make the fonts blurrier.

This is with

Hyprland, built from branch  at commit 918d8340afd652b011b937d29d5eea0be08467f5  (flake.lock: update).
Date: Tue Jun 25 12:06:02 2024
Tag: v0.41.2, commits: 4886

flags: (if any)

System Information:
System name: Linux
Node name: KOMP
Release: 6.9.7-arch1-1
Version: #1 SMP PREEMPT_DYNAMIC Fri, 28 Jun 2024 04:32:50 +0000

GPU information: 
28:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Navi 21 [Radeon RX 6950 XT] [1002:73a5] (rev c0) (prog-if 00 [VGA controller])

wl-kbptr v0.2.1
moverest commented 2 months ago

I've just tested with Hyprland 0.41.2 and dbe57ab3fbbdce315961d78b3fcd3cac0ab34bf0 and I've been able to reproduce indeed.

The issue is that the compositor reports a 1x scaling with the fractional-scale-v1 interface at first. It does report the correct value afterwards though — after pressing a key the blurriness is gone for me.

...
[2443324.788] {Default Queue}  -> wp_fractional_scale_manager_v1#8.get_fractional_scale(new id wp_fractional_scale_v1#18, wl_surface#15)
[2443324.795] {Default Queue}  -> wp_viewporter#7.get_viewport(new id wp_viewport#19, wl_surface#15)
[2443324.800] {Default Queue}  -> wl_surface#15.commit()
[2443325.065] {Default Queue} wp_fractional_scale_v1#18.preferred_scale(120)
[2443325.077] {Default Queue} zwlr_layer_surface_v1#17.configure(92, 1920, 1080)
...
[2443373.538] {Default Queue} wl_surface#15.enter(wl_output#13)
[2443373.541] {Default Queue} wl_keyboard#16.enter(95, wl_surface#15, array[0])
[2443373.545] {Default Queue} wl_keyboard#16.modifiers(96, 0, 0, 0, 0)
[2443373.554] {Default Queue} wp_fractional_scale_v1#18.preferred_scale(240)
[2443394.740] {Default Queue} wl_keyboard#16.key(98, 379192, 28, 0)
[2444563.314] {Default Queue} wl_keyboard#16.key(99, 380369, 58, 1)
Debug logs with Hyprland ``` [2443318.776] {Default Queue} -> wl_display#1.get_registry(new id wl_registry#2) [2443318.796] {Default Queue} -> wl_display#1.sync(new id wl_callback#3) [2443320.794] {Display Queue} wl_display#1.delete_id(3) [2443320.817] {Default Queue} wl_registry#2.global(1, "wl_seat", 9) [2443320.829] {Default Queue} -> wl_registry#2.bind(1, "wl_seat", 7, new id [unknown]#4) [2443320.893] {Default Queue} wl_registry#2.global(2, "wl_data_device_manager", 3) [2443320.900] {Default Queue} wl_registry#2.global(3, "wl_compositor", 6) [2443320.904] {Default Queue} -> wl_registry#2.bind(3, "wl_compositor", 4, new id [unknown]#5) [2443320.909] {Default Queue} wl_registry#2.global(4, "wl_subcompositor", 1) [2443320.913] {Default Queue} wl_registry#2.global(5, "wl_shm", 1) [2443320.917] {Default Queue} -> wl_registry#2.bind(5, "wl_shm", 1, new id [unknown]#6) [2443320.921] {Default Queue} wl_registry#2.global(6, "wp_viewporter", 1) [2443320.925] {Default Queue} -> wl_registry#2.bind(6, "wp_viewporter", 1, new id [unknown]#7) [2443320.929] {Default Queue} wl_registry#2.global(7, "wp_tearing_control_manager_v1", 1) [2443320.933] {Default Queue} wl_registry#2.global(8, "wp_fractional_scale_manager_v1", 1) [2443320.937] {Default Queue} -> wl_registry#2.bind(8, "wp_fractional_scale_manager_v1", 1, new id [unknown]#8) [2443320.943] {Default Queue} wl_registry#2.global(9, "zxdg_output_manager_v1", 3) [2443320.948] {Default Queue} -> wl_registry#2.bind(9, "zxdg_output_manager_v1", 2, new id [unknown]#9) [2443320.954] {Default Queue} wl_registry#2.global(10, "wp_cursor_shape_manager_v1", 1) [2443320.958] {Default Queue} wl_registry#2.global(11, "zwp_idle_inhibit_manager_v1", 1) [2443320.963] {Default Queue} wl_registry#2.global(12, "zwp_relative_pointer_manager_v1", 1) [2443320.968] {Default Queue} wl_registry#2.global(13, "zxdg_decoration_manager_v1", 1) [2443320.973] {Default Queue} wl_registry#2.global(14, "wp_alpha_modifier_v1", 1) [2443320.977] {Default Queue} wl_registry#2.global(15, "zwlr_gamma_control_manager_v1", 1) [2443320.982] {Default Queue} wl_registry#2.global(16, "ext_foreign_toplevel_list_v1", 1) [2443320.987] {Default Queue} wl_registry#2.global(17, "zwp_pointer_gestures_v1", 3) [2443320.992] {Default Queue} wl_registry#2.global(18, "zwlr_foreign_toplevel_manager_v1", 3) [2443320.996] {Default Queue} wl_registry#2.global(19, "zwp_keyboard_shortcuts_inhibit_manager_v1", 1) [2443321.001] {Default Queue} wl_registry#2.global(20, "zwp_text_input_manager_v3", 1) [2443321.006] {Default Queue} wl_registry#2.global(21, "zwp_pointer_constraints_v1", 1) [2443321.012] {Default Queue} wl_registry#2.global(22, "zwlr_output_power_manager_v1", 1) [2443321.018] {Default Queue} wl_registry#2.global(23, "xdg_activation_v1", 1) [2443321.023] {Default Queue} wl_registry#2.global(24, "ext_idle_notifier_v1", 1) [2443321.028] {Default Queue} wl_registry#2.global(25, "ext_session_lock_manager_v1", 1) [2443321.033] {Default Queue} wl_registry#2.global(26, "zwp_input_method_manager_v2", 1) [2443321.038] {Default Queue} wl_registry#2.global(27, "zwp_virtual_keyboard_manager_v1", 1) [2443321.043] {Default Queue} wl_registry#2.global(28, "zwlr_virtual_pointer_manager_v1", 2) [2443321.048] {Default Queue} -> wl_registry#2.bind(28, "zwlr_virtual_pointer_manager_v1", 2, new id [unknown]#10) [2443321.053] {Default Queue} wl_registry#2.global(29, "zwlr_output_manager_v1", 4) [2443321.058] {Default Queue} wl_registry#2.global(30, "org_kde_kwin_server_decoration_manager", 1) [2443321.063] {Default Queue} wl_registry#2.global(31, "hyprland_focus_grab_manager_v1", 1) [2443321.068] {Default Queue} wl_registry#2.global(32, "zwp_tablet_manager_v2", 1) [2443321.073] {Default Queue} wl_registry#2.global(33, "zwlr_layer_shell_v1", 5) [2443321.079] {Default Queue} -> wl_registry#2.bind(33, "zwlr_layer_shell_v1", 2, new id [unknown]#11) [2443321.084] {Default Queue} wl_registry#2.global(34, "wp_presentation", 1) [2443321.089] {Default Queue} wl_registry#2.global(35, "xdg_wm_base", 6) [2443321.094] {Default Queue} wl_registry#2.global(36, "zwlr_data_control_manager_v1", 2) [2443321.098] {Default Queue} wl_registry#2.global(37, "zwp_primary_selection_device_manager_v1", 1) [2443321.103] {Default Queue} wl_registry#2.global(38, "xwayland_shell_v1", 1) [2443321.107] {Default Queue} wl_registry#2.global(39, "wl_drm", 2) [2443321.111] {Default Queue} wl_registry#2.global(40, "zwp_linux_dmabuf_v1", 5) [2443321.116] {Default Queue} wl_registry#2.global(41, "hyprland_toplevel_export_manager_v1", 2) [2443321.121] {Default Queue} wl_registry#2.global(42, "zwp_text_input_manager_v1", 1) [2443321.127] {Default Queue} wl_registry#2.global(43, "hyprland_global_shortcuts_manager_v1", 1) [2443321.131] {Default Queue} wl_registry#2.global(44, "zwlr_screencopy_manager_v1", 3) [2443321.136] {Default Queue} wl_registry#2.global(45, "wp_drm_lease_device_v1", 1) [2443321.141] {Default Queue} wl_registry#2.global(46, "wl_output", 4) [2443321.149] {Default Queue} -> wl_registry#2.bind(46, "wl_output", 3, new id [unknown]#12) [2443321.154] {Default Queue} wl_registry#2.global(47, "wl_output", 4) [2443321.160] {Default Queue} -> wl_registry#2.bind(47, "wl_output", 3, new id [unknown]#13) [2443321.166] {Default Queue} wl_callback#3.done(91) [2443321.171] {Default Queue} -> zxdg_output_manager_v1#9.get_xdg_output(new id zxdg_output_v1#3, wl_output#13) [2443321.178] {Default Queue} -> zxdg_output_manager_v1#9.get_xdg_output(new id zxdg_output_v1#14, wl_output#12) [2443321.183] {Default Queue} -> wl_display#1.sync(new id wl_callback#15) [2443321.424] {Display Queue} wl_display#1.delete_id(15) [2443321.435] {Default Queue} wl_seat#4.name("Hyprland") [2443321.441] {Default Queue} wl_seat#4.capabilities(3) [2443321.452] {Default Queue} -> wl_seat#4.get_keyboard(new id wl_keyboard#16) [2443321.458] {Default Queue} discarded wl_shm#6.format(0) [2443321.462] {Default Queue} discarded wl_shm#6.format(1) [2443321.466] {Default Queue} discarded wl_shm#6.format(875709016) [2443321.470] {Default Queue} discarded wl_shm#6.format(875708993) [2443321.474] {Default Queue} discarded wl_shm#6.format(875710274) [2443321.478] {Default Queue} discarded wl_shm#6.format(842094674) [2443321.482] {Default Queue} discarded wl_shm#6.format(842088786) [2443321.486] {Default Queue} discarded wl_shm#6.format(892426322) [2443321.490] {Default Queue} discarded wl_shm#6.format(892420434) [2443321.494] {Default Queue} discarded wl_shm#6.format(909199186) [2443321.498] {Default Queue} discarded wl_shm#6.format(808665688) [2443321.501] {Default Queue} discarded wl_shm#6.format(808665665) [2443321.505] {Default Queue} discarded wl_shm#6.format(1211384408) [2443321.509] {Default Queue} discarded wl_shm#6.format(1211384385) [2443321.513] {Default Queue} discarded wl_shm#6.format(942948952) [2443321.519] {Default Queue} discarded wl_shm#6.format(942948929) [2443321.523] {Default Queue} wl_output#12.geometry(0, 0, 290, 170, 0, "Sharp Corporation", "0x1449", 0) [2443321.530] {Default Queue} wl_output#12.scale(2) [2443321.535] {Default Queue} wl_output#12.mode(3, 1920, 1080, 59933) [2443321.540] {Default Queue} wl_output#12.done() [2443321.545] {Default Queue} wl_output#13.geometry(0, 0, 520, 290, 0, "Ancor Communications Inc", "ASUS MG24U", 0) [2443321.551] {Default Queue} wl_output#13.scale(2) [2443321.555] {Default Queue} wl_output#13.mode(3, 3840, 2160, 59997) [2443321.561] {Default Queue} wl_output#13.done() [2443321.565] {Default Queue} zxdg_output_v1#3.name("DP-1") [2443321.569] {Default Queue} zxdg_output_v1#3.description("Ancor Communications Inc ASUS MG24U G7LMTF118973 (DP-1)") [2443321.574] {Default Queue} zxdg_output_v1#3.logical_position(1280, 0) [2443321.578] {Default Queue} zxdg_output_v1#3.logical_size(1920, 1080) [2443321.583] {Default Queue} zxdg_output_v1#3.done() [2443321.589] {Default Queue} zxdg_output_v1#14.name("eDP-1") [2443321.593] {Default Queue} zxdg_output_v1#14.description("Sharp Corporation 0x1449 (eDP-1)") [2443321.598] {Default Queue} zxdg_output_v1#14.logical_position(0, 0) [2443321.603] {Default Queue} zxdg_output_v1#14.logical_size(1280, 720) [2443321.641] {Default Queue} zxdg_output_v1#14.done() [2443321.646] {Default Queue} wl_callback#15.done(91) [2443321.652] {Default Queue} -> wl_display#1.sync(new id wl_callback#15) [2443321.807] {Display Queue} wl_display#1.delete_id(15) [2443321.818] {Default Queue} wl_keyboard#16.keymap(1, fd 4, 65547) [2443324.743] {Default Queue} wl_keyboard#16.repeat_info(25, 600) [2443324.754] {Default Queue} wl_callback#15.done(91) [2443324.762] {Default Queue} -> wl_compositor#5.create_surface(new id wl_surface#15) [2443324.768] {Default Queue} -> zwlr_layer_shell_v1#11.get_layer_surface(new id zwlr_layer_surface_v1#17, wl_surface#15, nil, 3, "wl-kbptr") [2443324.776] {Default Queue} -> zwlr_layer_surface_v1#17.set_exclusive_zone(-1) [2443324.780] {Default Queue} -> zwlr_layer_surface_v1#17.set_anchor(15) [2443324.784] {Default Queue} -> zwlr_layer_surface_v1#17.set_keyboard_interactivity(1) [2443324.788] {Default Queue} -> wp_fractional_scale_manager_v1#8.get_fractional_scale(new id wp_fractional_scale_v1#18, wl_surface#15) [2443324.795] {Default Queue} -> wp_viewporter#7.get_viewport(new id wp_viewport#19, wl_surface#15) [2443324.800] {Default Queue} -> wl_surface#15.commit() [2443325.065] {Default Queue} wp_fractional_scale_v1#18.preferred_scale(120) [2443325.077] {Default Queue} zwlr_layer_surface_v1#17.configure(92, 1920, 1080) [2443325.083] {Default Queue} -> zwlr_layer_surface_v1#17.ack_configure(92) [2443325.147] {Default Queue} -> wl_shm#6.create_pool(new id wl_shm_pool#20, fd 5, 8294400) [2443325.156] {Default Queue} -> wl_shm_pool#20.create_buffer(new id wl_buffer#21, 0, 1920, 1080, 7680, 0) [2443325.162] {Default Queue} -> wl_shm_pool#20.destroy() [2443363.112] {Default Queue} -> wl_surface#15.set_buffer_scale(1) [2443363.128] {Default Queue} -> wl_surface#15.attach(wl_buffer#21, 0, 0) [2443363.133] {Default Queue} -> wp_viewport#19.set_destination(1920, 1080) [2443363.137] {Default Queue} -> wl_surface#15.damage(0, 0, 1920, 1080) [2443363.141] {Default Queue} -> wl_surface#15.commit() [2443373.513] {Display Queue} wl_display#1.delete_id(20) [2443373.528] {Default Queue} wl_buffer#21.release() [2443373.538] {Default Queue} wl_surface#15.enter(wl_output#13) [2443373.541] {Default Queue} wl_keyboard#16.enter(95, wl_surface#15, array[0]) [2443373.545] {Default Queue} wl_keyboard#16.modifiers(96, 0, 0, 0, 0) [2443373.554] {Default Queue} wp_fractional_scale_v1#18.preferred_scale(240) [2443394.740] {Default Queue} wl_keyboard#16.key(98, 379192, 28, 0) [2444563.314] {Default Queue} wl_keyboard#16.key(99, 380369, 58, 1) [2444563.375] {Default Queue} -> zwlr_layer_surface_v1#17.destroy() [2444563.392] {Default Queue} -> wl_surface#15.destroy() [2444563.425] {Default Queue} -> wl_buffer#21.destroy() [2444564.511] {Default Queue} -> wl_display#1.sync(new id wl_callback#20) [2444568.830] {Display Queue} wl_display#1.delete_id(17) [2444568.851] {Display Queue} wl_display#1.delete_id(15) [2444568.860] {Display Queue} wl_display#1.delete_id(21) [2444568.864] {Display Queue} wl_display#1.delete_id(20) [2444568.872] {Default Queue} wl_keyboard#16.leave(100, nil) [2444568.881] {Default Queue} wl_callback#20.done(104) [2444569.060] {Default Queue} -> zxdg_output_v1#3.destroy() [2444569.073] {Default Queue} -> zxdg_output_v1#14.destroy() [2444569.083] {Default Queue} -> wp_fractional_scale_v1#18.destroy() [2444569.091] {Default Queue} -> wp_fractional_scale_manager_v1#8.destroy() [2444569.101] {Default Queue} -> wp_viewporter#7.destroy() [2444569.113] {Default Queue} -> zwlr_layer_shell_v1#11.destroy() ```

On Sway it does report the correct value the first time.

[2984381.529] {Default Queue}  -> wp_fractional_scale_manager_v1#9.get_fractional_scale(new id wp_fractional_scale_v1#18, wl_surface#15)
[2984381.534] {Default Queue}  -> wp_viewporter#8.get_viewport(new id wp_viewport#19, wl_surface#15)
[2984381.537] {Default Queue}  -> wl_surface#15.commit()
[2984381.757] {Default Queue} wl_surface#15.enter(wl_output#13)
[2984381.768] {Default Queue} wp_fractional_scale_v1#18.preferred_scale(240)
[2984381.772] {Default Queue} zwlr_layer_surface_v1#17.configure(4543, 1920, 1080)
[2984381.779] {Default Queue}  -> zwlr_layer_surface_v1#17.ack_configure(4543)
[2984381.885] {Default Queue}  -> wl_shm#4.create_pool(new id wl_shm_pool#20, fd 5, 33177600)
Debug log with Sway ``` [2984365.892] {Default Queue} -> wl_display#1.get_registry(new id wl_registry#2) [2984365.912] {Default Queue} -> wl_display#1.sync(new id wl_callback#3) [2984377.828] {Display Queue} wl_display#1.delete_id(3) [2984377.853] {Default Queue} wl_registry#2.global(1, "wl_shm", 1) [2984377.865] {Default Queue} -> wl_registry#2.bind(1, "wl_shm", 1, new id [unknown]#4) [2984377.870] {Default Queue} wl_registry#2.global(2, "wl_drm", 2) [2984377.876] {Default Queue} wl_registry#2.global(3, "zwp_linux_dmabuf_v1", 4) [2984377.879] {Default Queue} wl_registry#2.global(4, "wl_compositor", 6) [2984377.882] {Default Queue} -> wl_registry#2.bind(4, "wl_compositor", 4, new id [unknown]#5) [2984377.885] {Default Queue} wl_registry#2.global(5, "wl_subcompositor", 1) [2984377.888] {Default Queue} wl_registry#2.global(6, "wl_data_device_manager", 3) [2984377.890] {Default Queue} wl_registry#2.global(7, "zwlr_gamma_control_manager_v1", 1) [2984377.893] {Default Queue} wl_registry#2.global(8, "zxdg_output_manager_v1", 3) [2984377.896] {Default Queue} -> wl_registry#2.bind(8, "zxdg_output_manager_v1", 2, new id [unknown]#6) [2984377.899] {Default Queue} wl_registry#2.global(9, "ext_idle_notifier_v1", 1) [2984377.903] {Default Queue} wl_registry#2.global(10, "zwp_idle_inhibit_manager_v1", 1) [2984377.906] {Default Queue} wl_registry#2.global(11, "zwlr_layer_shell_v1", 4) [2984377.912] {Default Queue} -> wl_registry#2.bind(11, "zwlr_layer_shell_v1", 2, new id [unknown]#7) [2984377.916] {Default Queue} wl_registry#2.global(12, "xdg_wm_base", 2) [2984377.919] {Default Queue} wl_registry#2.global(13, "zwp_tablet_manager_v2", 1) [2984377.922] {Default Queue} wl_registry#2.global(14, "org_kde_kwin_server_decoration_manager", 1) [2984377.925] {Default Queue} wl_registry#2.global(15, "zxdg_decoration_manager_v1", 1) [2984377.928] {Default Queue} wl_registry#2.global(16, "zwp_relative_pointer_manager_v1", 1) [2984377.931] {Default Queue} wl_registry#2.global(17, "zwp_pointer_constraints_v1", 1) [2984377.934] {Default Queue} wl_registry#2.global(18, "wp_presentation", 1) [2984377.938] {Default Queue} wl_registry#2.global(19, "zwlr_output_manager_v1", 4) [2984377.941] {Default Queue} wl_registry#2.global(20, "zwlr_output_power_manager_v1", 1) [2984377.944] {Default Queue} wl_registry#2.global(21, "zwp_input_method_manager_v2", 1) [2984377.947] {Default Queue} wl_registry#2.global(22, "zwp_text_input_manager_v3", 1) [2984377.950] {Default Queue} wl_registry#2.global(23, "zwlr_foreign_toplevel_manager_v1", 3) [2984377.953] {Default Queue} wl_registry#2.global(24, "ext_session_lock_manager_v1", 1) [2984377.955] {Default Queue} wl_registry#2.global(25, "wp_drm_lease_device_v1", 1) [2984377.958] {Default Queue} wl_registry#2.global(26, "zwlr_export_dmabuf_manager_v1", 1) [2984377.961] {Default Queue} wl_registry#2.global(27, "zwlr_screencopy_manager_v1", 3) [2984377.964] {Default Queue} wl_registry#2.global(28, "zwlr_data_control_manager_v1", 2) [2984377.967] {Default Queue} wl_registry#2.global(29, "wp_security_context_manager_v1", 1) [2984377.970] {Default Queue} wl_registry#2.global(30, "wp_viewporter", 1) [2984377.974] {Default Queue} -> wl_registry#2.bind(30, "wp_viewporter", 1, new id [unknown]#8) [2984377.978] {Default Queue} wl_registry#2.global(31, "wp_single_pixel_buffer_manager_v1", 1) [2984377.981] {Default Queue} wl_registry#2.global(32, "wp_content_type_manager_v1", 1) [2984377.983] {Default Queue} wl_registry#2.global(33, "wp_fractional_scale_manager_v1", 1) [2984377.987] {Default Queue} -> wl_registry#2.bind(33, "wp_fractional_scale_manager_v1", 1, new id [unknown]#9) [2984377.990] {Default Queue} wl_registry#2.global(34, "zxdg_exporter_v1", 1) [2984377.994] {Default Queue} wl_registry#2.global(35, "zxdg_importer_v1", 1) [2984377.997] {Default Queue} wl_registry#2.global(36, "zxdg_exporter_v2", 1) [2984378.000] {Default Queue} wl_registry#2.global(37, "zxdg_importer_v2", 1) [2984378.003] {Default Queue} wl_registry#2.global(38, "xdg_activation_v1", 1) [2984378.006] {Default Queue} wl_registry#2.global(39, "wp_cursor_shape_manager_v1", 1) [2984378.015] {Default Queue} wl_registry#2.global(40, "zwp_virtual_keyboard_manager_v1", 1) [2984378.018] {Default Queue} wl_registry#2.global(41, "zwlr_virtual_pointer_manager_v1", 2) [2984378.021] {Default Queue} -> wl_registry#2.bind(41, "zwlr_virtual_pointer_manager_v1", 2, new id [unknown]#10) [2984378.026] {Default Queue} wl_registry#2.global(42, "zwlr_input_inhibit_manager_v1", 1) [2984378.029] {Default Queue} wl_registry#2.global(43, "zwp_keyboard_shortcuts_inhibit_manager_v1", 1) [2984378.032] {Default Queue} wl_registry#2.global(44, "zwp_pointer_gestures_v1", 3) [2984378.035] {Default Queue} wl_registry#2.global(45, "wl_seat", 8) [2984378.042] {Default Queue} -> wl_registry#2.bind(45, "wl_seat", 7, new id [unknown]#11) [2984378.104] {Default Queue} wl_registry#2.global(47, "zwp_primary_selection_device_manager_v1", 1) [2984378.109] {Default Queue} wl_registry#2.global(48, "wl_output", 4) [2984378.115] {Default Queue} -> wl_registry#2.bind(48, "wl_output", 3, new id [unknown]#12) [2984378.120] {Default Queue} wl_registry#2.global(50, "wl_output", 4) [2984378.123] {Default Queue} -> wl_registry#2.bind(50, "wl_output", 3, new id [unknown]#13) [2984378.127] {Default Queue} wl_callback#3.done(4542) [2984378.132] {Default Queue} -> zxdg_output_manager_v1#6.get_xdg_output(new id zxdg_output_v1#3, wl_output#13) [2984378.136] {Default Queue} -> zxdg_output_manager_v1#6.get_xdg_output(new id zxdg_output_v1#14, wl_output#12) [2984378.140] {Default Queue} -> wl_display#1.sync(new id wl_callback#15) [2984378.370] {Display Queue} wl_display#1.delete_id(15) [2984378.389] {Default Queue} discarded wl_shm#4.format(0) [2984378.392] {Default Queue} discarded wl_shm#4.format(1) [2984378.394] {Default Queue} discarded wl_shm#4.format(875709016) [2984378.396] {Default Queue} discarded wl_shm#4.format(875708993) [2984378.399] {Default Queue} discarded wl_shm#4.format(875710274) [2984378.401] {Default Queue} discarded wl_shm#4.format(842094674) [2984378.403] {Default Queue} discarded wl_shm#4.format(842088786) [2984378.405] {Default Queue} discarded wl_shm#4.format(892426322) [2984378.407] {Default Queue} discarded wl_shm#4.format(892420434) [2984378.409] {Default Queue} discarded wl_shm#4.format(909199186) [2984378.411] {Default Queue} discarded wl_shm#4.format(808665688) [2984378.414] {Default Queue} discarded wl_shm#4.format(808665665) [2984378.416] {Default Queue} discarded wl_shm#4.format(1211384408) [2984378.418] {Default Queue} discarded wl_shm#4.format(1211384385) [2984378.420] {Default Queue} discarded wl_shm#4.format(942948952) [2984378.422] {Default Queue} discarded wl_shm#4.format(942948929) [2984378.424] {Default Queue} wl_seat#11.name("seat0") [2984378.428] {Default Queue} wl_seat#11.capabilities(3) [2984378.433] {Default Queue} -> wl_seat#11.get_keyboard(new id wl_keyboard#16) [2984378.437] {Default Queue} wl_output#12.geometry(0, 0, 290, 170, 0, "Sharp Corporation", "0x1449", 0) [2984378.442] {Default Queue} wl_output#12.mode(1, 1920, 1080, 59934) [2984378.445] {Default Queue} wl_output#12.scale(2) [2984378.448] {Default Queue} wl_output#12.done() [2984378.451] {Default Queue} wl_output#13.geometry(0, 0, 520, 290, 0, "Ancor Communications Inc", "ASUS MG24U", 0) [2984378.455] {Default Queue} wl_output#13.mode(1, 3840, 2160, 59997) [2984378.458] {Default Queue} wl_output#13.scale(2) [2984378.461] {Default Queue} wl_output#13.done() [2984378.463] {Default Queue} zxdg_output_v1#3.name("DP-1") [2984378.466] {Default Queue} zxdg_output_v1#3.description("Ancor Communications Inc ASUS MG24U G7LMTF118973 (DP-1)") [2984378.469] {Default Queue} zxdg_output_v1#3.logical_position(0, 0) [2984378.472] {Default Queue} zxdg_output_v1#3.logical_size(1920, 1080) [2984378.474] {Default Queue} zxdg_output_v1#3.done() [2984378.476] {Default Queue} zxdg_output_v1#14.name("eDP-1") [2984378.479] {Default Queue} zxdg_output_v1#14.description("Sharp Corporation 0x1449 (eDP-1)") [2984378.481] {Default Queue} zxdg_output_v1#14.logical_position(0, 1080) [2984378.484] {Default Queue} zxdg_output_v1#14.logical_size(1280, 720) [2984378.493] {Default Queue} zxdg_output_v1#14.done() [2984378.496] {Default Queue} wl_callback#15.done(4542) [2984378.500] {Default Queue} -> wl_display#1.sync(new id wl_callback#15) [2984378.650] {Display Queue} wl_display#1.delete_id(15) [2984378.662] {Default Queue} wl_keyboard#16.keymap(1, fd 4, 65547) [2984381.482] {Default Queue} wl_keyboard#16.repeat_info(25, 600) [2984381.498] {Default Queue} wl_callback#15.done(4542) [2984381.509] {Default Queue} -> wl_compositor#5.create_surface(new id wl_surface#15) [2984381.514] {Default Queue} -> zwlr_layer_shell_v1#7.get_layer_surface(new id zwlr_layer_surface_v1#17, wl_surface#15, nil, 3, "wl-kbptr") [2984381.520] {Default Queue} -> zwlr_layer_surface_v1#17.set_exclusive_zone(-1) [2984381.523] {Default Queue} -> zwlr_layer_surface_v1#17.set_anchor(15) [2984381.526] {Default Queue} -> zwlr_layer_surface_v1#17.set_keyboard_interactivity(1) [2984381.529] {Default Queue} -> wp_fractional_scale_manager_v1#9.get_fractional_scale(new id wp_fractional_scale_v1#18, wl_surface#15) [2984381.534] {Default Queue} -> wp_viewporter#8.get_viewport(new id wp_viewport#19, wl_surface#15) [2984381.537] {Default Queue} -> wl_surface#15.commit() [2984381.757] {Default Queue} wl_surface#15.enter(wl_output#13) [2984381.768] {Default Queue} wp_fractional_scale_v1#18.preferred_scale(240) [2984381.772] {Default Queue} zwlr_layer_surface_v1#17.configure(4543, 1920, 1080) [2984381.779] {Default Queue} -> zwlr_layer_surface_v1#17.ack_configure(4543) [2984381.885] {Default Queue} -> wl_shm#4.create_pool(new id wl_shm_pool#20, fd 5, 33177600) [2984381.891] {Default Queue} -> wl_shm_pool#20.create_buffer(new id wl_buffer#21, 0, 3840, 2160, 15360, 0) [2984381.896] {Default Queue} -> wl_shm_pool#20.destroy() [2984430.841] {Default Queue} -> wl_surface#15.set_buffer_scale(1) [2984430.858] {Default Queue} -> wl_surface#15.attach(wl_buffer#21, 0, 0) [2984430.861] {Default Queue} -> wp_viewport#19.set_destination(1920, 1080) [2984430.864] {Default Queue} -> wl_surface#15.damage(0, 0, 1920, 1080) [2984430.867] {Default Queue} -> wl_surface#15.commit() [2984430.871] {Default Queue} zwlr_layer_surface_v1#17.configure(4545, 1920, 1080) [2984430.875] {Default Queue} -> zwlr_layer_surface_v1#17.ack_configure(4545) [2984430.926] {Default Queue} -> wl_shm#4.create_pool(new id wl_shm_pool#22, fd 7, 33177600) [2984430.930] {Default Queue} -> wl_shm_pool#22.create_buffer(new id wl_buffer#23, 0, 3840, 2160, 15360, 0) [2984430.934] {Default Queue} -> wl_shm_pool#22.destroy() [2984456.754] {Default Queue} -> wl_surface#15.set_buffer_scale(1) [2984456.766] {Default Queue} -> wl_surface#15.attach(wl_buffer#23, 0, 0) [2984456.770] {Default Queue} -> wp_viewport#19.set_destination(1920, 1080) [2984456.772] {Default Queue} -> wl_surface#15.damage(0, 0, 1920, 1080) [2984456.774] {Default Queue} -> wl_surface#15.commit() [2984478.907] {Display Queue} wl_display#1.delete_id(20) [2984478.928] {Display Queue} wl_display#1.delete_id(22) [2984478.950] {Default Queue} zwlr_layer_surface_v1#17.configure(4551, 1920, 1080) [2984478.956] {Default Queue} -> zwlr_layer_surface_v1#17.ack_configure(4551) [2984478.968] {Default Queue} wl_keyboard#16.enter(4555, wl_surface#15, array[0]) [2984478.972] {Default Queue} wl_keyboard#16.modifiers(4556, 0, 0, 0, 0) [2984478.979] {Default Queue} wl_buffer#21.release() [2984478.982] {Default Queue} wl_buffer#23.release() [2988443.980] {Default Queue} wl_keyboard#16.key(4557, 924249, 33, 1) [2988452.530] {Default Queue} -> wl_surface#15.set_buffer_scale(1) [2988452.541] {Default Queue} -> wl_surface#15.attach(wl_buffer#21, 0, 0) [2988452.546] {Default Queue} -> wp_viewport#19.set_destination(1920, 1080) [2988452.550] {Default Queue} -> wl_surface#15.damage(0, 0, 1920, 1080) [2988452.554] {Default Queue} -> wl_surface#15.commit() [2988462.983] {Default Queue} wl_buffer#21.release() [2988578.597] {Default Queue} wl_keyboard#16.key(4558, 924384, 33, 0) [2990409.499] {Default Queue} wl_keyboard#16.key(4559, 926215, 58, 1) [2990409.568] {Default Queue} -> zwlr_layer_surface_v1#17.destroy() [2990409.584] {Default Queue} -> wl_surface#15.destroy() [2990409.658] {Default Queue} -> wl_buffer#21.destroy() [2990412.533] {Default Queue} -> wl_buffer#23.destroy() [2990414.766] {Default Queue} -> wl_display#1.sync(new id wl_callback#22) [2990419.059] {Display Queue} wl_display#1.delete_id(17) [2990419.076] {Display Queue} wl_display#1.delete_id(15) [2990419.082] {Display Queue} wl_display#1.delete_id(21) [2990419.087] {Display Queue} wl_display#1.delete_id(23) [2990419.092] {Display Queue} wl_display#1.delete_id(22) [2990419.097] {Default Queue} wl_keyboard#16.leave(4561, nil) [2990419.104] {Default Queue} wl_callback#22.done(4566) [2990419.412] {Default Queue} -> zxdg_output_v1#3.destroy() [2990419.423] {Default Queue} -> zxdg_output_v1#14.destroy() [2990419.429] {Default Queue} -> wp_fractional_scale_v1#18.destroy() [2990419.433] {Default Queue} -> wp_fractional_scale_manager_v1#9.destroy() [2990419.438] {Default Queue} -> wp_viewporter#8.destroy() [2990419.445] {Default Queue} -> zwlr_layer_shell_v1#7.destroy() ```
moverest commented 2 months ago

I've also checked with another Wayland program that uses the same interfaces, Fuzzel, and it does the same thing where it gets a 1x scaling then 2x, the right value. The difference is that it manages to get the correct value before the first user input.

By the looks of it, Hyprland is probably not behaving correctly.

matejdro commented 2 months ago

Thanks, will make a ticket for Hyprland.

However, shouldn't this program also scale? Like, larger font and less cells on scaled display? Or is that purely config based?

moverest commented 2 months ago

The number of cells is constant once the screen size allows to fit the maximum of 512 or less (83 as these are the number of possibilities with three character labels and there are other constraints to make a grid) of them. The text size is also proportional to the cell size after its minimum size limit is reached. This is why the unscaled version looks the same but sharp if that makes sense.

If run with a much smaller resolution — where it can't fit the maximum number of cells — it should display less cells on the scaled version as you are suggesting.

matejdro commented 2 months ago

Hm, how did you get the logs for fractional sceling?

I tried WAYLAND_DEBUG=1 wl-kbptr, but for some reason, I don't get any preferred_scale lines. Only line related to the fraction scaling is the init one (wl_registry).

Full logs ``` [1096550.001] {Default Queue} -> wl_display#1.get_registry(new id wl_registry#2) [1096550.012] {Default Queue} -> wl_display#1.sync(new id wl_callback#3) [1096550.102] {Display Queue} wl_display#1.delete_id(3) [1096550.111] {Default Queue} wl_registry#2.global(1, "wl_seat", 9) [1096550.118] {Default Queue} -> wl_registry#2.bind(1, "wl_seat", 7, new id [unknown]#4) [1096550.157] {Default Queue} wl_registry#2.global(2, "wl_data_device_manager", 3) [1096550.162] {Default Queue} wl_registry#2.global(3, "wl_compositor", 6) [1096550.168] {Default Queue} -> wl_registry#2.bind(3, "wl_compositor", 4, new id [unknown]#5) [1096550.173] {Default Queue} wl_registry#2.global(4, "wl_subcompositor", 1) [1096550.176] {Default Queue} wl_registry#2.global(5, "wl_shm", 1) [1096550.181] {Default Queue} -> wl_registry#2.bind(5, "wl_shm", 1, new id [unknown]#6) [1096550.186] {Default Queue} wl_registry#2.global(6, "wp_viewporter", 1) [1096550.190] {Default Queue} wl_registry#2.global(7, "wp_tearing_control_manager_v1", 1) [1096550.193] {Default Queue} wl_registry#2.global(8, "wp_fractional_scale_manager_v1", 1) [1096550.197] {Default Queue} wl_registry#2.global(9, "zxdg_output_manager_v1", 3) [1096550.203] {Default Queue} -> wl_registry#2.bind(9, "zxdg_output_manager_v1", 2, new id [unknown]#7) [1096550.207] {Default Queue} wl_registry#2.global(10, "wp_cursor_shape_manager_v1", 1) [1096550.211] {Default Queue} wl_registry#2.global(11, "zwp_idle_inhibit_manager_v1", 1) [1096550.215] {Default Queue} wl_registry#2.global(12, "zwp_relative_pointer_manager_v1", 1) [1096550.219] {Default Queue} wl_registry#2.global(13, "zxdg_decoration_manager_v1", 1) [1096550.225] {Default Queue} wl_registry#2.global(14, "wp_alpha_modifier_v1", 1) [1096550.231] {Default Queue} wl_registry#2.global(15, "zwlr_gamma_control_manager_v1", 1) [1096550.235] {Default Queue} wl_registry#2.global(16, "ext_foreign_toplevel_list_v1", 1) [1096550.239] {Default Queue} wl_registry#2.global(17, "zwp_pointer_gestures_v1", 3) [1096550.245] {Default Queue} wl_registry#2.global(18, "zwlr_foreign_toplevel_manager_v1", 3) [1096550.249] {Default Queue} wl_registry#2.global(19, "zwp_keyboard_shortcuts_inhibit_manager_v1", 1) [1096550.253] {Default Queue} wl_registry#2.global(20, "zwp_text_input_manager_v3", 1) [1096550.257] {Default Queue} wl_registry#2.global(21, "zwp_pointer_constraints_v1", 1) [1096550.261] {Default Queue} wl_registry#2.global(22, "zwlr_output_power_manager_v1", 1) [1096550.265] {Default Queue} wl_registry#2.global(23, "xdg_activation_v1", 1) [1096550.269] {Default Queue} wl_registry#2.global(24, "ext_idle_notifier_v1", 1) [1096550.273] {Default Queue} wl_registry#2.global(25, "ext_session_lock_manager_v1", 1) [1096550.277] {Default Queue} wl_registry#2.global(26, "zwp_input_method_manager_v2", 1) [1096550.281] {Default Queue} wl_registry#2.global(27, "zwp_virtual_keyboard_manager_v1", 1) [1096550.286] {Default Queue} wl_registry#2.global(28, "zwlr_virtual_pointer_manager_v1", 2) [1096550.290] {Default Queue} -> wl_registry#2.bind(28, "zwlr_virtual_pointer_manager_v1", 2, new id [unknown]#8) [1096550.296] {Default Queue} wl_registry#2.global(29, "zwlr_output_manager_v1", 4) [1096550.300] {Default Queue} wl_registry#2.global(30, "org_kde_kwin_server_decoration_manager", 1) [1096550.304] {Default Queue} wl_registry#2.global(31, "hyprland_focus_grab_manager_v1", 1) [1096550.309] {Default Queue} wl_registry#2.global(32, "zwp_tablet_manager_v2", 1) [1096550.313] {Default Queue} wl_registry#2.global(33, "zwlr_layer_shell_v1", 5) [1096550.317] {Default Queue} -> wl_registry#2.bind(33, "zwlr_layer_shell_v1", 2, new id [unknown]#9) [1096550.323] {Default Queue} wl_registry#2.global(34, "wp_presentation", 1) [1096550.327] {Default Queue} wl_registry#2.global(35, "xdg_wm_base", 6) [1096550.331] {Default Queue} wl_registry#2.global(36, "zwlr_data_control_manager_v1", 2) [1096550.335] {Default Queue} wl_registry#2.global(37, "zwp_primary_selection_device_manager_v1", 1) [1096550.339] {Default Queue} wl_registry#2.global(38, "xwayland_shell_v1", 1) [1096550.343] {Default Queue} wl_registry#2.global(39, "wl_drm", 2) [1096550.347] {Default Queue} wl_registry#2.global(40, "zwp_linux_dmabuf_v1", 5) [1096550.351] {Default Queue} wl_registry#2.global(41, "hyprland_toplevel_export_manager_v1", 2) [1096550.355] {Default Queue} wl_registry#2.global(42, "zwp_text_input_manager_v1", 1) [1096550.359] {Default Queue} wl_registry#2.global(43, "hyprland_global_shortcuts_manager_v1", 1) [1096550.364] {Default Queue} wl_registry#2.global(44, "zwlr_screencopy_manager_v1", 3) [1096550.368] {Default Queue} wl_registry#2.global(45, "wp_drm_lease_device_v1", 1) [1096550.372] {Default Queue} wl_registry#2.global(46, "wl_output", 4) [1096550.377] {Default Queue} -> wl_registry#2.bind(46, "wl_output", 3, new id [unknown]#10) [1096550.382] {Default Queue} wl_registry#2.global(47, "wl_output", 4) [1096550.385] {Default Queue} -> wl_registry#2.bind(47, "wl_output", 3, new id [unknown]#11) [1096550.390] {Default Queue} wl_callback#3.done(15308) [1096550.394] {Default Queue} -> zxdg_output_manager_v1#7.get_xdg_output(new id zxdg_output_v1#3, wl_output#11) [1096550.399] {Default Queue} -> zxdg_output_manager_v1#7.get_xdg_output(new id zxdg_output_v1#12, wl_output#10) [1096550.403] {Default Queue} -> wl_display#1.sync(new id wl_callback#13) [1096550.574] {Display Queue} wl_display#1.delete_id(13) [1096550.587] {Default Queue} wl_seat#4.name("Hyprland") [1096550.593] {Default Queue} wl_seat#4.capabilities(3) [1096550.598] {Default Queue} -> wl_seat#4.get_keyboard(new id wl_keyboard#14) [1096550.603] {Default Queue} discarded wl_shm#6.format(0) [1096550.607] {Default Queue} discarded wl_shm#6.format(1) [1096550.611] {Default Queue} discarded wl_shm#6.format(875709016) [1096550.617] {Default Queue} discarded wl_shm#6.format(875708993) [1096550.621] {Default Queue} discarded wl_shm#6.format(875710274) [1096550.625] {Default Queue} discarded wl_shm#6.format(842094674) [1096550.629] {Default Queue} discarded wl_shm#6.format(842088786) [1096550.634] {Default Queue} discarded wl_shm#6.format(892426322) [1096550.639] {Default Queue} discarded wl_shm#6.format(892420434) [1096550.643] {Default Queue} discarded wl_shm#6.format(909199186) [1096550.647] {Default Queue} discarded wl_shm#6.format(808665688) [1096550.651] {Default Queue} discarded wl_shm#6.format(808665665) [1096550.656] {Default Queue} discarded wl_shm#6.format(1211384408) [1096550.661] {Default Queue} discarded wl_shm#6.format(1211384385) [1096550.665] {Default Queue} discarded wl_shm#6.format(942948952) [1096550.670] {Default Queue} discarded wl_shm#6.format(942948929) [1096550.674] {Default Queue} wl_output#10.geometry(0, 0, 600, 340, 0, "Acer Technologies", "XV272U", 0) [1096550.681] {Default Queue} wl_output#10.scale(2) [1096550.686] {Default Queue} wl_output#10.mode(3, 2560, 1440, 143998) [1096550.692] {Default Queue} wl_output#10.done() [1096550.697] {Default Queue} wl_output#11.geometry(0, 0, 600, 340, 0, "Dell Inc.", "DELL U2715H", 0) [1096550.704] {Default Queue} wl_output#11.scale(1) [1096550.708] {Default Queue} wl_output#11.mode(3, 2560, 1440, 59951) [1096550.714] {Default Queue} wl_output#11.done() [1096550.718] {Default Queue} zxdg_output_v1#3.name("DP-4") [1096550.723] {Default Queue} zxdg_output_v1#3.description("Dell Inc. DELL U2715H GH85D6530DYS (DP-4)") [1096550.728] {Default Queue} zxdg_output_v1#3.logical_position(2048, -144) [1096550.733] {Default Queue} zxdg_output_v1#3.logical_size(2560, 1440) [1096550.739] {Default Queue} zxdg_output_v1#3.done() [1096550.743] {Default Queue} zxdg_output_v1#12.name("DP-2") [1096550.748] {Default Queue} zxdg_output_v1#12.description("Acer Technologies XV272U 0x105091DB (DP-2)") [1096550.753] {Default Queue} zxdg_output_v1#12.logical_position(0, 0) [1096550.758] {Default Queue} zxdg_output_v1#12.logical_size(2048, 1152) [1096550.763] {Default Queue} zxdg_output_v1#12.done() [1096550.768] {Default Queue} wl_callback#13.done(15308) [1096550.774] {Default Queue} -> wl_display#1.sync(new id wl_callback#13) [1096550.840] {Display Queue} wl_display#1.delete_id(13) [1096550.847] {Default Queue} wl_keyboard#14.keymap(1, fd 4, 66734) [1096552.664] {Default Queue} wl_keyboard#14.repeat_info(25, 600) [1096552.668] {Default Queue} wl_callback#13.done(15308) [1096552.671] {Default Queue} -> wl_compositor#5.create_surface(new id wl_surface#13) [1096552.674] {Default Queue} -> zwlr_layer_shell_v1#9.get_layer_surface(new id zwlr_layer_surface_v1#15, wl_surface#13, nil, 3, "wl-kbptr") [1096552.678] {Default Queue} -> zwlr_layer_surface_v1#15.set_anchor(15) [1096552.680] {Default Queue} -> zwlr_layer_surface_v1#15.set_keyboard_interactivity(1) [1096552.683] {Default Queue} -> wl_surface#13.commit() [1096553.234] {Default Queue} zwlr_layer_surface_v1#15.configure(15309, 2048, 1152) [1096553.240] {Default Queue} -> zwlr_layer_surface_v1#15.ack_configure(15309) [1096553.282] {Default Queue} -> wl_shm#6.create_pool(new id wl_shm_pool#16, fd 5, 9437184) [1096553.291] {Default Queue} -> wl_shm_pool#16.create_buffer(new id wl_buffer#17, 0, 2048, 1152, 8192, 0) [1096553.295] {Default Queue} -> wl_shm_pool#16.destroy() [1096579.038] {Default Queue} -> wl_surface#13.set_buffer_scale(1) [1096579.054] {Default Queue} -> wl_surface#13.attach(wl_buffer#17, 0, 0) [1096579.058] {Default Queue} -> wl_surface#13.damage(0, 0, 2048, 1152) [1096579.062] {Default Queue} -> wl_surface#13.commit() [1096651.074] {Display Queue} wl_display#1.delete_id(16) [1096651.087] {Default Queue} wl_buffer#17.release() [1096651.090] {Default Queue} wl_surface#13.enter(wl_output#10) [1096651.092] {Default Queue} wl_keyboard#14.enter(15313, wl_surface#13, array[0]) [1096651.095] {Default Queue} wl_keyboard#14.modifiers(15314, 0, 0, 16, 0) [1096665.423] {Default Queue} wl_keyboard#14.key(15316, 5346650, 28, 0) [1098333.480] {Default Queue} wl_keyboard#14.key(15317, 5348355, 16, 1) [1098436.993] {Default Queue} wl_keyboard#14.key(15318, 5348459, 16, 0) [1099085.374] {Default Queue} wl_keyboard#14.key(15319, 5349107, 58, 1) [1099085.404] {Default Queue} -> zwlr_layer_surface_v1#15.destroy() [1099085.411] {Default Queue} -> wl_surface#13.destroy() [1099085.422] {Default Queue} -> wl_buffer#17.destroy() [1099086.017] {Default Queue} -> wl_display#1.sync(new id wl_callback#16) [1099089.440] {Display Queue} wl_display#1.delete_id(15) [1099089.453] {Display Queue} wl_display#1.delete_id(13) [1099089.458] {Display Queue} wl_display#1.delete_id(17) [1099089.463] {Display Queue} wl_display#1.delete_id(16) [1099089.468] {Default Queue} wl_keyboard#14.leave(15320, nil) [1099089.474] {Default Queue} wl_callback#16.done(15324) [1099089.542] {Default Queue} -> zxdg_output_v1#3.destroy() [1099089.549] {Default Queue} -> zxdg_output_v1#12.destroy() [1099089.554] {Default Queue} -> zwlr_layer_shell_v1#9.destroy() ```
moverest commented 2 months ago

I assume you are running the here latest release (v0.2.1) which doesn't have fractional scaling implemented.

The way scaling is implemented is a bit different but it suffers from the same issue. Instead, of the surface receiving an event with the scaling factor, an enter event is sent to the surface with the output it's displayed on. From the output we can determine the scaling factor to use.

On Sway, the enter event right is received right after the surface is committed:

[3658310.983] {Default Queue}  -> wl_compositor#5.create_surface(new id wl_surface#11)
[3658310.987] {Default Queue}  -> zwlr_layer_shell_v1#7.get_layer_surface(new id zwlr_layer_surface_v1#13, wl_surface#11, nil, 3, "wl-kbptr")
[3658310.993] {Default Queue}  -> zwlr_layer_surface_v1#13.set_anchor(15)
[3658310.995] {Default Queue}  -> zwlr_layer_surface_v1#13.set_keyboard_interactivity(1)
[3658310.998] {Default Queue}  -> wl_surface#11.commit() 📍
[3658311.112] {Default Queue} wl_surface#11.enter(wl_output#10) 👈
[3658311.117] {Default Queue} zwlr_layer_surface_v1#13.configure(374, 960, 540)
[3658311.120] {Default Queue}  -> zwlr_layer_surface_v1#13.ack_configure(374)
[3658311.173] {Default Queue}  -> wl_shm#4.create_pool(new id wl_shm_pool#14, fd 5, 8294400)
[3658311.178] {Default Queue}  -> wl_shm_pool#14.create_buffer(new id wl_buffer#15, 0, 1920, 1080, 7680, 0)
[3658311.182] {Default Queue}  -> wl_shm_pool#14.destroy()
[3658337.753] {Default Queue}  -> wl_surface#11.set_buffer_scale(2) 🟢
[3658337.767] {Default Queue}  -> wl_surface#11.attach(wl_buffer#15, 0, 0)
[3658337.771] {Default Queue}  -> wl_surface#11.damage(0, 0, 960, 540)
[3658337.774] {Default Queue}  -> wl_surface#11.commit()
Full Sway logs ``` [3658308.054] {Default Queue} -> wl_display#1.get_registry(new id wl_registry#2) [3658308.063] {Default Queue} -> wl_display#1.sync(new id wl_callback#3) [3658308.196] {Display Queue} wl_display#1.delete_id(3) [3658308.205] {Default Queue} wl_registry#2.global(1, "wl_shm", 1) [3658308.210] {Default Queue} -> wl_registry#2.bind(1, "wl_shm", 1, new id [unknown]#4) [3658308.214] {Default Queue} wl_registry#2.global(2, "wl_drm", 2) [3658308.217] {Default Queue} wl_registry#2.global(3, "zwp_linux_dmabuf_v1", 4) [3658308.220] {Default Queue} wl_registry#2.global(4, "wl_compositor", 6) [3658308.222] {Default Queue} -> wl_registry#2.bind(4, "wl_compositor", 4, new id [unknown]#5) [3658308.225] {Default Queue} wl_registry#2.global(5, "wl_subcompositor", 1) [3658308.227] {Default Queue} wl_registry#2.global(6, "wl_data_device_manager", 3) [3658308.230] {Default Queue} wl_registry#2.global(7, "zwlr_gamma_control_manager_v1", 1) [3658308.232] {Default Queue} wl_registry#2.global(8, "zxdg_output_manager_v1", 3) [3658308.235] {Default Queue} -> wl_registry#2.bind(8, "zxdg_output_manager_v1", 2, new id [unknown]#6) [3658308.237] {Default Queue} wl_registry#2.global(9, "ext_idle_notifier_v1", 1) [3658308.240] {Default Queue} wl_registry#2.global(10, "zwp_idle_inhibit_manager_v1", 1) [3658308.242] {Default Queue} wl_registry#2.global(11, "zwlr_layer_shell_v1", 4) [3658308.245] {Default Queue} -> wl_registry#2.bind(11, "zwlr_layer_shell_v1", 2, new id [unknown]#7) [3658308.248] {Default Queue} wl_registry#2.global(12, "xdg_wm_base", 2) [3658308.250] {Default Queue} wl_registry#2.global(13, "zwp_tablet_manager_v2", 1) [3658308.253] {Default Queue} wl_registry#2.global(14, "org_kde_kwin_server_decoration_manager", 1) [3658308.258] {Default Queue} wl_registry#2.global(15, "zxdg_decoration_manager_v1", 1) [3658308.260] {Default Queue} wl_registry#2.global(16, "zwp_relative_pointer_manager_v1", 1) [3658308.263] {Default Queue} wl_registry#2.global(17, "zwp_pointer_constraints_v1", 1) [3658308.265] {Default Queue} wl_registry#2.global(18, "wp_presentation", 1) [3658308.268] {Default Queue} wl_registry#2.global(19, "zwlr_output_manager_v1", 4) [3658308.270] {Default Queue} wl_registry#2.global(20, "zwlr_output_power_manager_v1", 1) [3658308.273] {Default Queue} wl_registry#2.global(21, "zwp_input_method_manager_v2", 1) [3658308.275] {Default Queue} wl_registry#2.global(22, "zwp_text_input_manager_v3", 1) [3658308.278] {Default Queue} wl_registry#2.global(23, "zwlr_foreign_toplevel_manager_v1", 3) [3658308.280] {Default Queue} wl_registry#2.global(24, "ext_session_lock_manager_v1", 1) [3658308.282] {Default Queue} wl_registry#2.global(25, "wp_drm_lease_device_v1", 1) [3658308.285] {Default Queue} wl_registry#2.global(26, "zwlr_export_dmabuf_manager_v1", 1) [3658308.287] {Default Queue} wl_registry#2.global(27, "zwlr_screencopy_manager_v1", 3) [3658308.290] {Default Queue} wl_registry#2.global(28, "zwlr_data_control_manager_v1", 2) [3658308.292] {Default Queue} wl_registry#2.global(29, "wp_security_context_manager_v1", 1) [3658308.295] {Default Queue} wl_registry#2.global(30, "wp_viewporter", 1) [3658308.297] {Default Queue} wl_registry#2.global(31, "wp_single_pixel_buffer_manager_v1", 1) [3658308.300] {Default Queue} wl_registry#2.global(32, "wp_content_type_manager_v1", 1) [3658308.302] {Default Queue} wl_registry#2.global(33, "wp_fractional_scale_manager_v1", 1) [3658308.305] {Default Queue} wl_registry#2.global(34, "zxdg_exporter_v1", 1) [3658308.307] {Default Queue} wl_registry#2.global(35, "zxdg_importer_v1", 1) [3658308.310] {Default Queue} wl_registry#2.global(36, "zxdg_exporter_v2", 1) [3658308.312] {Default Queue} wl_registry#2.global(37, "zxdg_importer_v2", 1) [3658308.314] {Default Queue} wl_registry#2.global(38, "xdg_activation_v1", 1) [3658308.317] {Default Queue} wl_registry#2.global(39, "wp_cursor_shape_manager_v1", 1) [3658308.319] {Default Queue} wl_registry#2.global(40, "zwp_virtual_keyboard_manager_v1", 1) [3658308.322] {Default Queue} wl_registry#2.global(41, "zwlr_virtual_pointer_manager_v1", 2) [3658308.328] {Default Queue} -> wl_registry#2.bind(41, "zwlr_virtual_pointer_manager_v1", 2, new id [unknown]#8) [3658308.331] {Default Queue} wl_registry#2.global(42, "zwlr_input_inhibit_manager_v1", 1) [3658308.333] {Default Queue} wl_registry#2.global(43, "zwp_keyboard_shortcuts_inhibit_manager_v1", 1) [3658308.336] {Default Queue} wl_registry#2.global(44, "zwp_pointer_gestures_v1", 3) [3658308.338] {Default Queue} wl_registry#2.global(45, "wl_seat", 8) [3658308.342] {Default Queue} -> wl_registry#2.bind(45, "wl_seat", 7, new id [unknown]#9) [3658308.381] {Default Queue} wl_registry#2.global(47, "zwp_primary_selection_device_manager_v1", 1) [3658308.383] {Default Queue} wl_registry#2.global(48, "wl_output", 4) [3658308.386] {Default Queue} -> wl_registry#2.bind(48, "wl_output", 3, new id [unknown]#10) [3658308.389] {Default Queue} wl_callback#3.done(373) [3658308.393] {Default Queue} -> zxdg_output_manager_v1#6.get_xdg_output(new id zxdg_output_v1#3, wl_output#10) [3658308.396] {Default Queue} -> wl_display#1.sync(new id wl_callback#11) [3658308.534] {Display Queue} wl_display#1.delete_id(11) [3658308.541] {Default Queue} discarded wl_shm#4.format(0) [3658308.543] {Default Queue} discarded wl_shm#4.format(1) [3658308.559] {Default Queue} discarded wl_shm#4.format(875709016) [3658308.562] {Default Queue} discarded wl_shm#4.format(875708993) [3658308.564] {Default Queue} discarded wl_shm#4.format(875710274) [3658308.566] {Default Queue} discarded wl_shm#4.format(842094674) [3658308.568] {Default Queue} discarded wl_shm#4.format(842088786) [3658308.571] {Default Queue} discarded wl_shm#4.format(892426322) [3658308.573] {Default Queue} discarded wl_shm#4.format(892420434) [3658308.575] {Default Queue} discarded wl_shm#4.format(909199186) [3658308.577] {Default Queue} discarded wl_shm#4.format(808665688) [3658308.579] {Default Queue} discarded wl_shm#4.format(808665665) [3658308.581] {Default Queue} discarded wl_shm#4.format(1211384408) [3658308.583] {Default Queue} discarded wl_shm#4.format(1211384385) [3658308.585] {Default Queue} discarded wl_shm#4.format(942948952) [3658308.587] {Default Queue} discarded wl_shm#4.format(942948929) [3658308.590] {Default Queue} wl_seat#9.name("seat0") [3658308.592] {Default Queue} wl_seat#9.capabilities(3) [3658308.596] {Default Queue} -> wl_seat#9.get_keyboard(new id wl_keyboard#12) [3658308.600] {Default Queue} wl_output#10.geometry(0, 0, 290, 170, 0, "Sharp Corporation", "0x1449", 0) [3658308.604] {Default Queue} wl_output#10.mode(1, 1920, 1080, 59934) [3658308.607] {Default Queue} wl_output#10.scale(2) [3658308.610] {Default Queue} wl_output#10.done() [3658308.613] {Default Queue} zxdg_output_v1#3.name("eDP-1") [3658308.617] {Default Queue} zxdg_output_v1#3.description("Sharp Corporation 0x1449 (eDP-1)") [3658308.619] {Default Queue} zxdg_output_v1#3.logical_position(0, 1080) [3658308.622] {Default Queue} zxdg_output_v1#3.logical_size(960, 540) [3658308.625] {Default Queue} zxdg_output_v1#3.done() [3658308.627] {Default Queue} wl_callback#11.done(373) [3658308.631] {Default Queue} -> wl_display#1.sync(new id wl_callback#11) [3658308.754] {Display Queue} wl_display#1.delete_id(11) [3658308.762] {Default Queue} wl_keyboard#12.keymap(1, fd 4, 65547) [3658310.970] {Default Queue} wl_keyboard#12.repeat_info(25, 600) [3658310.977] {Default Queue} wl_callback#11.done(373) [3658310.983] {Default Queue} -> wl_compositor#5.create_surface(new id wl_surface#11) [3658310.987] {Default Queue} -> zwlr_layer_shell_v1#7.get_layer_surface(new id zwlr_layer_surface_v1#13, wl_surface#11, nil, 3, "wl-kbptr") [3658310.993] {Default Queue} -> zwlr_layer_surface_v1#13.set_anchor(15) [3658310.995] {Default Queue} -> zwlr_layer_surface_v1#13.set_keyboard_interactivity(1) [3658310.998] {Default Queue} -> wl_surface#11.commit() [3658311.112] {Default Queue} wl_surface#11.enter(wl_output#10) [3658311.117] {Default Queue} zwlr_layer_surface_v1#13.configure(374, 960, 540) [3658311.120] {Default Queue} -> zwlr_layer_surface_v1#13.ack_configure(374) [3658311.173] {Default Queue} -> wl_shm#4.create_pool(new id wl_shm_pool#14, fd 5, 8294400) [3658311.178] {Default Queue} -> wl_shm_pool#14.create_buffer(new id wl_buffer#15, 0, 1920, 1080, 7680, 0) [3658311.182] {Default Queue} -> wl_shm_pool#14.destroy() [3658337.753] {Default Queue} -> wl_surface#11.set_buffer_scale(2) [3658337.767] {Default Queue} -> wl_surface#11.attach(wl_buffer#15, 0, 0) [3658337.771] {Default Queue} -> wl_surface#11.damage(0, 0, 960, 540) [3658337.774] {Default Queue} -> wl_surface#11.commit() [3658337.778] {Default Queue} zwlr_layer_surface_v1#13.configure(376, 960, 540) [3658337.783] {Default Queue} -> zwlr_layer_surface_v1#13.ack_configure(376) [3658337.824] {Default Queue} -> wl_shm#4.create_pool(new id wl_shm_pool#16, fd 7, 8294400) [3658337.829] {Default Queue} -> wl_shm_pool#16.create_buffer(new id wl_buffer#17, 0, 1920, 1080, 7680, 0) [3658337.832] {Default Queue} -> wl_shm_pool#16.destroy() [3658346.475] {Default Queue} -> wl_surface#11.set_buffer_scale(2) [3658346.489] {Default Queue} -> wl_surface#11.attach(wl_buffer#17, 0, 0) [3658346.502] {Default Queue} -> wl_surface#11.damage(0, 0, 960, 540) [3658346.516] {Default Queue} -> wl_surface#11.commit() [3658353.080] {Display Queue} wl_display#1.delete_id(14) [3658353.101] {Display Queue} wl_display#1.delete_id(16) [3658353.105] {Default Queue} zwlr_layer_surface_v1#13.configure(380, 960, 540) [3658353.110] {Default Queue} -> zwlr_layer_surface_v1#13.ack_configure(380) [3658353.121] {Default Queue} wl_keyboard#12.enter(384, wl_surface#11, array[4]) [3658353.126] {Default Queue} wl_keyboard#12.modifiers(385, 0, 0, 0, 0) [3658353.135] {Default Queue} wl_buffer#15.release() [3658353.137] {Default Queue} wl_buffer#17.release() [3658388.588] {Default Queue} wl_keyboard#12.key(386, 433681, 28, 0) [3659336.589] {Default Queue} wl_keyboard#12.key(387, 434629, 30, 1) [3659341.142] {Default Queue} -> wl_surface#11.set_buffer_scale(2) [3659341.169] {Default Queue} -> wl_surface#11.attach(wl_buffer#15, 0, 0) [3659341.182] {Default Queue} -> wl_surface#11.damage(0, 0, 960, 540) [3659341.192] {Default Queue} -> wl_surface#11.commit() [3659344.230] {Default Queue} wl_buffer#15.release() [3659461.183] {Default Queue} wl_keyboard#12.key(388, 434753, 30, 0) [3660661.622] {Default Queue} wl_keyboard#12.key(389, 435954, 38, 1) [3660663.779] {Default Queue} -> wl_surface#11.set_buffer_scale(2) [3660663.806] {Default Queue} -> wl_surface#11.attach(wl_buffer#15, 0, 0) [3660663.819] {Default Queue} -> wl_surface#11.damage(0, 0, 960, 540) [3660663.829] {Default Queue} -> wl_surface#11.commit() [3660667.417] {Default Queue} wl_buffer#15.release() [3660753.790] {Default Queue} wl_keyboard#12.key(390, 436046, 38, 0) [3660887.884] {Default Queue} wl_keyboard#12.key(391, 436180, 32, 1) [3660890.780] {Default Queue} -> wl_surface#11.set_buffer_scale(2) [3660890.810] {Default Queue} -> wl_surface#11.attach(wl_buffer#15, 0, 0) [3660890.824] {Default Queue} -> wl_surface#11.damage(0, 0, 960, 540) [3660890.834] {Default Queue} -> wl_surface#11.commit() [3660893.843] {Default Queue} wl_buffer#15.release() [3660984.695] {Default Queue} wl_keyboard#12.key(392, 436277, 32, 0) [3661790.774] {Default Queue} wl_keyboard#12.key(393, 437083, 58, 1) [3661790.822] {Default Queue} -> zwlr_layer_surface_v1#13.destroy() [3661790.833] {Default Queue} -> wl_surface#11.destroy() [3661790.864] {Default Queue} -> wl_buffer#15.destroy() [3661791.598] {Default Queue} -> wl_buffer#17.destroy() [3661792.218] {Default Queue} -> wl_display#1.sync(new id wl_callback#16) [3661795.366] {Display Queue} wl_display#1.delete_id(13) [3661795.392] {Display Queue} wl_display#1.delete_id(11) [3661795.401] {Display Queue} wl_display#1.delete_id(15) [3661795.409] {Display Queue} wl_display#1.delete_id(17) [3661795.416] {Display Queue} wl_display#1.delete_id(16) [3661795.423] {Default Queue} wl_keyboard#12.leave(395, nil) [3661795.433] {Default Queue} wl_callback#16.done(400) [3661795.733] {Default Queue} -> zxdg_output_v1#3.destroy() [3661795.768] {Default Queue} -> zwlr_layer_shell_v1#7.destroy() ```

However, on Hyprland, we get the enter event only after the surface has been displayed on the screen:

[3403146.805] {Default Queue}  -> wl_compositor#5.create_surface(new id wl_surface#11)
[3403146.810] {Default Queue}  -> zwlr_layer_shell_v1#9.get_layer_surface(new id zwlr_layer_surface_v1#13, wl_surface#11, nil, 3, "wl-kbptr")
[3403146.817] {Default Queue}  -> zwlr_layer_surface_v1#13.set_anchor(15)
[3403146.820] {Default Queue}  -> zwlr_layer_surface_v1#13.set_keyboard_interactivity(1)
[3403146.823] {Default Queue}  -> wl_surface#11.commit() 📍
[3403147.063] {Default Queue} zwlr_layer_surface_v1#13.configure(576, 960, 540)
[3403147.069] {Default Queue}  -> zwlr_layer_surface_v1#13.ack_configure(576)
[3403147.141] {Default Queue}  -> wl_shm#6.create_pool(new id wl_shm_pool#14, fd 5, 2073600)
[3403147.147] {Default Queue}  -> wl_shm_pool#14.create_buffer(new id wl_buffer#15, 0, 960, 540, 3840, 0)
[3403147.156] {Default Queue}  -> wl_shm_pool#14.destroy()
[3403168.404] {Default Queue}  -> wl_surface#11.set_buffer_scale(1) 🔴
[3403168.417] {Default Queue}  -> wl_surface#11.attach(wl_buffer#15, 0, 0)
[3403168.421] {Default Queue}  -> wl_surface#11.damage(0, 0, 960, 540)
[3403168.424] {Default Queue}  -> wl_surface#11.commit()
[3403171.678] {Display Queue} wl_display#1.delete_id(14)
[3403171.690] {Default Queue} wl_buffer#15.release()
[3403171.694] {Default Queue} wl_surface#11.enter(wl_output#10) 👈
[3403171.700] {Default Queue} wl_keyboard#12.enter(579, wl_surface#11, array[0])
[3403171.707] {Default Queue} wl_keyboard#12.modifiers(580, 0, 0, 0, 0)
[3403222.854] {Default Queue} wl_keyboard#12.key(582, 178515, 28, 0)
[3404574.476] {Default Queue} wl_keyboard#12.key(583, 179866, 37, 1)
[3404574.556] {Default Queue}  -> wl_buffer#15.destroy()
[3404574.937] {Default Queue}  -> wl_shm#6.create_pool(new id wl_shm_pool#14, fd 6, 8294400)
[3404574.962] {Default Queue}  -> wl_shm_pool#14.create_buffer(new id wl_buffer#16, 0, 1920, 1080, 7680, 0)
[3404574.977] {Default Queue}  -> wl_shm_pool#14.destroy()
[3404584.560] {Default Queue}  -> wl_surface#11.set_buffer_scale(2) 🟢
[3404584.571] {Default Queue}  -> wl_surface#11.attach(wl_buffer#16, 0, 0)
[3404584.576] {Default Queue}  -> wl_surface#11.damage(0, 0, 960, 540)
[3404584.580] {Default Queue}  -> wl_surface#11.commit()
Full Hyprland logs ``` [3403136.733] {Default Queue} -> wl_display#1.get_registry(new id wl_registry#2) [3403136.746] {Default Queue} -> wl_display#1.sync(new id wl_callback#3) [3403143.404] {Display Queue} wl_display#1.delete_id(3) [3403143.423] {Default Queue} wl_registry#2.global(1, "wl_seat", 9) [3403143.433] {Default Queue} -> wl_registry#2.bind(1, "wl_seat", 7, new id [unknown]#4) [3403143.482] {Default Queue} wl_registry#2.global(2, "wl_data_device_manager", 3) [3403143.486] {Default Queue} wl_registry#2.global(3, "wl_compositor", 6) [3403143.493] {Default Queue} -> wl_registry#2.bind(3, "wl_compositor", 4, new id [unknown]#5) [3403143.497] {Default Queue} wl_registry#2.global(4, "wl_subcompositor", 1) [3403143.500] {Default Queue} wl_registry#2.global(5, "wl_shm", 1) [3403143.503] {Default Queue} -> wl_registry#2.bind(5, "wl_shm", 1, new id [unknown]#6) [3403143.506] {Default Queue} wl_registry#2.global(6, "wp_viewporter", 1) [3403143.509] {Default Queue} wl_registry#2.global(7, "wp_tearing_control_manager_v1", 1) [3403143.512] {Default Queue} wl_registry#2.global(8, "wp_fractional_scale_manager_v1", 1) [3403143.515] {Default Queue} wl_registry#2.global(9, "zxdg_output_manager_v1", 3) [3403143.519] {Default Queue} -> wl_registry#2.bind(9, "zxdg_output_manager_v1", 2, new id [unknown]#7) [3403143.522] {Default Queue} wl_registry#2.global(10, "wp_cursor_shape_manager_v1", 1) [3403143.525] {Default Queue} wl_registry#2.global(11, "zwp_idle_inhibit_manager_v1", 1) [3403143.528] {Default Queue} wl_registry#2.global(12, "zwp_relative_pointer_manager_v1", 1) [3403143.532] {Default Queue} wl_registry#2.global(13, "zxdg_decoration_manager_v1", 1) [3403143.535] {Default Queue} wl_registry#2.global(14, "wp_alpha_modifier_v1", 1) [3403143.538] {Default Queue} wl_registry#2.global(15, "zwlr_gamma_control_manager_v1", 1) [3403143.542] {Default Queue} wl_registry#2.global(16, "ext_foreign_toplevel_list_v1", 1) [3403143.545] {Default Queue} wl_registry#2.global(17, "zwp_pointer_gestures_v1", 3) [3403143.548] {Default Queue} wl_registry#2.global(18, "zwlr_foreign_toplevel_manager_v1", 3) [3403143.551] {Default Queue} wl_registry#2.global(19, "zwp_keyboard_shortcuts_inhibit_manager_v1", 1) [3403143.554] {Default Queue} wl_registry#2.global(20, "zwp_text_input_manager_v3", 1) [3403143.557] {Default Queue} wl_registry#2.global(21, "zwp_pointer_constraints_v1", 1) [3403143.560] {Default Queue} wl_registry#2.global(22, "zwlr_output_power_manager_v1", 1) [3403143.564] {Default Queue} wl_registry#2.global(23, "xdg_activation_v1", 1) [3403143.567] {Default Queue} wl_registry#2.global(24, "ext_idle_notifier_v1", 1) [3403143.570] {Default Queue} wl_registry#2.global(25, "ext_session_lock_manager_v1", 1) [3403143.573] {Default Queue} wl_registry#2.global(26, "zwp_input_method_manager_v2", 1) [3403143.576] {Default Queue} wl_registry#2.global(27, "zwp_virtual_keyboard_manager_v1", 1) [3403143.579] {Default Queue} wl_registry#2.global(28, "zwlr_virtual_pointer_manager_v1", 2) [3403143.583] {Default Queue} -> wl_registry#2.bind(28, "zwlr_virtual_pointer_manager_v1", 2, new id [unknown]#8) [3403143.586] {Default Queue} wl_registry#2.global(29, "zwlr_output_manager_v1", 4) [3403143.590] {Default Queue} wl_registry#2.global(30, "org_kde_kwin_server_decoration_manager", 1) [3403143.593] {Default Queue} wl_registry#2.global(31, "hyprland_focus_grab_manager_v1", 1) [3403143.596] {Default Queue} wl_registry#2.global(32, "zwp_tablet_manager_v2", 1) [3403143.599] {Default Queue} wl_registry#2.global(33, "zwlr_layer_shell_v1", 5) [3403143.602] {Default Queue} -> wl_registry#2.bind(33, "zwlr_layer_shell_v1", 2, new id [unknown]#9) [3403143.606] {Default Queue} wl_registry#2.global(34, "wp_presentation", 1) [3403143.609] {Default Queue} wl_registry#2.global(35, "xdg_wm_base", 6) [3403143.612] {Default Queue} wl_registry#2.global(36, "zwlr_data_control_manager_v1", 2) [3403143.615] {Default Queue} wl_registry#2.global(37, "zwp_primary_selection_device_manager_v1", 1) [3403143.618] {Default Queue} wl_registry#2.global(38, "xwayland_shell_v1", 1) [3403143.627] {Default Queue} wl_registry#2.global(39, "wl_drm", 2) [3403143.630] {Default Queue} wl_registry#2.global(40, "zwp_linux_dmabuf_v1", 5) [3403143.633] {Default Queue} wl_registry#2.global(41, "hyprland_toplevel_export_manager_v1", 2) [3403143.636] {Default Queue} wl_registry#2.global(42, "zwp_text_input_manager_v1", 1) [3403143.639] {Default Queue} wl_registry#2.global(43, "hyprland_global_shortcuts_manager_v1", 1) [3403143.643] {Default Queue} wl_registry#2.global(44, "zwlr_screencopy_manager_v1", 3) [3403143.646] {Default Queue} wl_registry#2.global(45, "wp_drm_lease_device_v1", 1) [3403143.649] {Default Queue} wl_registry#2.global(46, "wl_output", 4) [3403143.653] {Default Queue} -> wl_registry#2.bind(46, "wl_output", 3, new id [unknown]#10) [3403143.656] {Default Queue} wl_callback#3.done(575) [3403143.661] {Default Queue} -> zxdg_output_manager_v1#7.get_xdg_output(new id zxdg_output_v1#3, wl_output#10) [3403143.665] {Default Queue} -> wl_display#1.sync(new id wl_callback#11) [3403143.898] {Display Queue} wl_display#1.delete_id(11) [3403143.912] {Default Queue} wl_seat#4.name("Hyprland") [3403143.916] {Default Queue} wl_seat#4.capabilities(3) [3403143.920] {Default Queue} -> wl_seat#4.get_keyboard(new id wl_keyboard#12) [3403143.924] {Default Queue} discarded wl_shm#6.format(0) [3403143.926] {Default Queue} discarded wl_shm#6.format(1) [3403143.929] {Default Queue} discarded wl_shm#6.format(875709016) [3403143.931] {Default Queue} discarded wl_shm#6.format(875708993) [3403143.934] {Default Queue} discarded wl_shm#6.format(875710274) [3403143.936] {Default Queue} discarded wl_shm#6.format(842094674) [3403143.939] {Default Queue} discarded wl_shm#6.format(842088786) [3403143.941] {Default Queue} discarded wl_shm#6.format(892426322) [3403143.944] {Default Queue} discarded wl_shm#6.format(892420434) [3403143.946] {Default Queue} discarded wl_shm#6.format(909199186) [3403143.949] {Default Queue} discarded wl_shm#6.format(808665688) [3403143.951] {Default Queue} discarded wl_shm#6.format(808665665) [3403143.954] {Default Queue} discarded wl_shm#6.format(1211384408) [3403143.956] {Default Queue} discarded wl_shm#6.format(1211384385) [3403143.958] {Default Queue} discarded wl_shm#6.format(942948952) [3403143.961] {Default Queue} discarded wl_shm#6.format(942948929) [3403143.964] {Default Queue} wl_output#10.geometry(0, 0, 290, 170, 0, "Sharp Corporation", "0x1449", 0) [3403143.969] {Default Queue} wl_output#10.scale(2) [3403143.972] {Default Queue} wl_output#10.mode(3, 1920, 1080, 59933) [3403143.976] {Default Queue} wl_output#10.done() [3403143.979] {Default Queue} zxdg_output_v1#3.name("eDP-1") [3403143.984] {Default Queue} zxdg_output_v1#3.description("Sharp Corporation 0x1449 (eDP-1)") [3403143.987] {Default Queue} zxdg_output_v1#3.logical_position(0, 0) [3403143.990] {Default Queue} zxdg_output_v1#3.logical_size(960, 540) [3403143.993] {Default Queue} zxdg_output_v1#3.done() [3403143.996] {Default Queue} wl_callback#11.done(575) [3403144.000] {Default Queue} -> wl_display#1.sync(new id wl_callback#11) [3403144.117] {Display Queue} wl_display#1.delete_id(11) [3403144.126] {Default Queue} wl_keyboard#12.keymap(1, fd 4, 65547) [3403146.789] {Default Queue} wl_keyboard#12.repeat_info(25, 600) [3403146.798] {Default Queue} wl_callback#11.done(575) [3403146.805] {Default Queue} -> wl_compositor#5.create_surface(new id wl_surface#11) [3403146.810] {Default Queue} -> zwlr_layer_shell_v1#9.get_layer_surface(new id zwlr_layer_surface_v1#13, wl_surface#11, nil, 3, "wl-kbptr") [3403146.817] {Default Queue} -> zwlr_layer_surface_v1#13.set_anchor(15) [3403146.820] {Default Queue} -> zwlr_layer_surface_v1#13.set_keyboard_interactivity(1) [3403146.823] {Default Queue} -> wl_surface#11.commit() [3403147.063] {Default Queue} zwlr_layer_surface_v1#13.configure(576, 960, 540) [3403147.069] {Default Queue} -> zwlr_layer_surface_v1#13.ack_configure(576) [3403147.141] {Default Queue} -> wl_shm#6.create_pool(new id wl_shm_pool#14, fd 5, 2073600) [3403147.147] {Default Queue} -> wl_shm_pool#14.create_buffer(new id wl_buffer#15, 0, 960, 540, 3840, 0) [3403147.156] {Default Queue} -> wl_shm_pool#14.destroy() [3403168.404] {Default Queue} -> wl_surface#11.set_buffer_scale(1) [3403168.417] {Default Queue} -> wl_surface#11.attach(wl_buffer#15, 0, 0) [3403168.421] {Default Queue} -> wl_surface#11.damage(0, 0, 960, 540) [3403168.424] {Default Queue} -> wl_surface#11.commit() [3403171.678] {Display Queue} wl_display#1.delete_id(14) [3403171.690] {Default Queue} wl_buffer#15.release() [3403171.694] {Default Queue} wl_surface#11.enter(wl_output#10) [3403171.700] {Default Queue} wl_keyboard#12.enter(579, wl_surface#11, array[0]) [3403171.707] {Default Queue} wl_keyboard#12.modifiers(580, 0, 0, 0, 0) [3403222.854] {Default Queue} wl_keyboard#12.key(582, 178515, 28, 0) [3404574.476] {Default Queue} wl_keyboard#12.key(583, 179866, 37, 1) [3404574.556] {Default Queue} -> wl_buffer#15.destroy() [3404574.937] {Default Queue} -> wl_shm#6.create_pool(new id wl_shm_pool#14, fd 6, 8294400) [3404574.962] {Default Queue} -> wl_shm_pool#14.create_buffer(new id wl_buffer#16, 0, 1920, 1080, 7680, 0) [3404574.977] {Default Queue} -> wl_shm_pool#14.destroy() [3404584.560] {Default Queue} -> wl_surface#11.set_buffer_scale(2) [3404584.571] {Default Queue} -> wl_surface#11.attach(wl_buffer#16, 0, 0) [3404584.576] {Default Queue} -> wl_surface#11.damage(0, 0, 960, 540) [3404584.580] {Default Queue} -> wl_surface#11.commit() [3404588.263] {Display Queue} wl_display#1.delete_id(14) [3404588.277] {Display Queue} wl_display#1.delete_id(15) [3404588.281] {Default Queue} wl_buffer#16.release() [3404686.394] {Default Queue} wl_keyboard#12.key(584, 179978, 37, 0) [3406173.344] {Default Queue} wl_keyboard#12.key(585, 181465, 58, 1) [3406173.396] {Default Queue} -> zwlr_layer_surface_v1#13.destroy() [3406173.409] {Default Queue} -> wl_surface#11.destroy() [3406173.430] {Default Queue} -> wl_buffer#16.destroy() [3406174.074] {Default Queue} -> wl_display#1.sync(new id wl_callback#15) [3406181.566] {Display Queue} wl_display#1.delete_id(13) [3406181.591] {Display Queue} wl_display#1.delete_id(11) [3406181.597] {Display Queue} wl_display#1.delete_id(16) [3406181.600] {Display Queue} wl_display#1.delete_id(15) [3406181.604] {Default Queue} wl_keyboard#12.leave(586, nil) [3406181.612] {Default Queue} wl_callback#15.done(590) [3406181.719] {Default Queue} -> zxdg_output_v1#3.destroy() [3406181.725] {Default Queue} -> zwlr_layer_shell_v1#9.destroy() ```
matejdro commented 2 months ago

Thank you! I have managed to get the logs with the git version and have created a Hyprland issue (linked above this comment).

matejdro commented 2 months ago

Hyprland author said that this is still within the spec of the protocol, so it should be fixed by the program: https://github.com/hyprwm/Hyprland/issues/6869#issuecomment-2227325669

moverest commented 2 months ago

I've just pushed 666d85d3ed2e0cfe4aa95a31c055d569d6931d4c which should re-render when it receives a new scaling factor. Please tell me if this works on your machine.

matejdro commented 2 months ago

Can confirm that this works! Thanks!