Details
-
Bug
-
Resolution: Done
-
P2: Important
-
5.12.0
-
None
-
Arch Linux with qt5-base, qt5-wayland, weston, wayland, gnome-shell installed (+dependencies) and Intel integrated HD Graphics 5300 graphics card running at 1920x1080. Compiled via qmake -> make using g++ 8.2.1 20181127 and Qt 5.12.0.
-
-
d0063d0972b29e9a2d4bdff837e3d4c23ac2e6cc (qt/qtwayland/dev)
Description
Setting QT_SCALE_FACTOR environment variable to a value other than 1 breaks the client side decorations under Wayland.
The content of the widget seems to scale correctly, but the decorations don't, leading to the content "spilling" out of the decorations frame.
With QT_SCALE_FACTOR=1, the decorations behave as expected:
This was tested with Qt 5.12.0 on Arch Linux in a fairly clean environment under Weston, as well as under (Wayland) Gnome-Shell with -platform wayland flag.
The source code [main.cpp] used for testing (also attached):
#include <Qt> #include <QApplication> #include <QLabel> int main(int argc, char **argv) { QApplication::setAttribute(Qt::AA_EnableHighDpiScaling); QApplication app (argc, argv); QLabel label ("weston --scale=1\nQT_SCALE_FACTOR=2"); label.setWindowTitle("qt_wayland_test"); label.setStyleSheet("border: 1px solid red;"); label.show(); label.resize(300,200); return app.exec(); }
Project file (also attached):
TEMPLATE = app TARGET = wayland_qt_csd_scale QT = core widgets SOURCES += main.cpp
Compile and run with:
cd /path/to/download/folder qmake make WAYLAND_DEBUG=1 QT_SCALE_FACTOR=2 ./wayland_qt_csd_scale -platform wayland
Wayland debug log:
$ WAYLAND_DEBUG=1 QT_SCALE_FACTOR=2 ./wayland_qt_csd_scale -platform wayland [2351403.103] -> wl_display@1.get_registry(new id wl_registry@2) [2351403.157] -> wl_display@1.sync(new id wl_callback@3) [2351403.287] wl_display@1.delete_id(3) [2351403.313] wl_registry@2.global(1, "wl_drm", 2) [2351403.348] wl_registry@2.global(2, "wl_compositor", 4) [2351403.369] -> wl_registry@2.bind(2, "wl_compositor", 3, new id [unknown]@4) [2351403.406] wl_registry@2.global(3, "wl_shm", 1) [2351403.434] -> wl_registry@2.bind(3, "wl_shm", 1, new id [unknown]@5) [2351403.468] wl_registry@2.global(4, "wl_output", 2) [2351403.496] -> wl_registry@2.bind(4, "wl_output", 2, new id [unknown]@6) [2351403.532] -> wl_display@1.sync(new id wl_callback@7) [2351403.549] wl_registry@2.global(5, "zxdg_output_manager_v1", 1) [2351403.576] -> wl_registry@2.bind(5, "zxdg_output_manager_v1", 1, new id [unknown]@8) [2351403.612] -> zxdg_output_manager_v1@8.get_xdg_output(new id zxdg_output_v1@9, wl_output@6) [2351403.634] -> wl_display@1.sync(new id wl_callback@10) [2351403.651] wl_registry@2.global(6, "wl_data_device_manager", 3) [2351403.678] -> wl_registry@2.bind(6, "wl_data_device_manager", 1, new id [unknown]@11) [2351403.710] wl_registry@2.global(7, "gtk_primary_selection_device_manager", 1) [2351403.735] wl_registry@2.global(8, "wl_subcompositor", 1) [2351403.756] -> wl_registry@2.bind(8, "wl_subcompositor", 1, new id [unknown]@12) [2351403.786] wl_registry@2.global(9, "xdg_wm_base", 1) [2351403.821] wl_registry@2.global(10, "zxdg_shell_v6", 1) [2351403.839] wl_registry@2.global(11, "wl_shell", 1) [2351403.856] wl_registry@2.global(12, "gtk_shell1", 2) [2351403.879] wl_registry@2.global(13, "zwp_pointer_gestures_v1", 1) [2351403.906] wl_registry@2.global(14, "zwp_tablet_manager_v2", 1) [2351403.932] wl_registry@2.global(15, "wl_seat", 5) [2351403.955] -> wl_registry@2.bind(15, "wl_seat", 4, new id [unknown]@13) [2351403.990] -> wl_data_device_manager@11.get_data_device(new id wl_data_device@14, wl_seat@13) [2351404.014] wl_registry@2.global(16, "zwp_relative_pointer_manager_v1", 1) [2351404.041] wl_registry@2.global(17, "zwp_pointer_constraints_v1", 1) [2351404.068] wl_registry@2.global(18, "zxdg_exporter_v1", 1) [2351404.094] wl_registry@2.global(19, "zxdg_importer_v1", 1) [2351404.117] wl_registry@2.global(20, "zwp_linux_dmabuf_v1", 3) [2351404.138] wl_registry@2.global(21, "zwp_keyboard_shortcuts_inhibit_manager_v1", 1) [2351404.162] wl_registry@2.global(22, "zwp_text_input_manager_v3", 1) [2351404.181] wl_registry@2.global(23, "gtk_text_input_manager", 1) [2351404.203] wl_callback@3.done(9627) [2351404.307] wl_display@1.delete_id(7) [2351404.320] wl_display@1.delete_id(10) [2351404.331] wl_shm@5.format(0) [2351404.346] wl_shm@5.format(1) [2351404.360] wl_output@6.geometry(0, 0, 260, 140, 0, "CMN", "0x1137", 0) [2351404.414] wl_output@6.mode(3, 1920, 1080, 60001) [2351404.441] wl_output@6.scale(1) [2351404.450] wl_output@6.done() [2351404.461] wl_callback@7.done(9627) [2351404.472] zxdg_output_v1@9.logical_position(0, 0) [2351404.489] zxdg_output_v1@9.logical_size(1920, 1080) [2351404.503] zxdg_output_v1@9.done() [2351404.515] wl_callback@10.done(9627) [2351404.527] wl_seat@13.capabilities(7) [2351404.547] -> wl_seat@13.get_keyboard(new id wl_keyboard@10) [2351404.564] -> wl_seat@13.get_pointer(new id wl_pointer@7) [2351404.582] -> wl_compositor@4.create_surface(new id wl_surface@3) [2351404.598] -> wl_seat@13.get_touch(new id wl_touch@15) [2351404.620] wl_seat@13.name("seat0") QSocketNotifier: Can only be used with threads started with QThread Using Wayland-EGL [2351416.434] -> wl_display@1.get_registry(new id wl_registry@16) [2351416.462] -> wl_display@1.sync(new id wl_callback@17) [2351416.593] wl_display@1.delete_id(17) [2351416.606] wl_registry@16.global(1, "wl_drm", 2) [2351416.640] -> wl_registry@16.bind(1, "wl_drm", 2, new id [unknown]@18) [2351416.676] wl_registry@16.global(2, "wl_compositor", 4) [2351416.701] wl_registry@16.global(3, "wl_shm", 1) [2351416.719] wl_registry@16.global(4, "wl_output", 2) [2351416.745] wl_registry@16.global(5, "zxdg_output_manager_v1", 1) [2351416.770] wl_registry@16.global(6, "wl_data_device_manager", 3) [2351416.797] wl_registry@16.global(7, "gtk_primary_selection_device_manager", 1) [2351416.817] wl_registry@16.global(8, "wl_subcompositor", 1) [2351416.841] wl_registry@16.global(9, "xdg_wm_base", 1) [2351416.870] wl_registry@16.global(10, "zxdg_shell_v6", 1) [2351416.897] wl_registry@16.global(11, "wl_shell", 1) [2351416.922] wl_registry@16.global(12, "gtk_shell1", 2) [2351416.947] wl_registry@16.global(13, "zwp_pointer_gestures_v1", 1) [2351416.972] wl_registry@16.global(14, "zwp_tablet_manager_v2", 1) [2351416.997] wl_registry@16.global(15, "wl_seat", 5) [2351417.024] wl_registry@16.global(16, "zwp_relative_pointer_manager_v1", 1) [2351417.047] wl_registry@16.global(17, "zwp_pointer_constraints_v1", 1) [2351417.071] wl_registry@16.global(18, "zxdg_exporter_v1", 1) [2351417.092] wl_registry@16.global(19, "zxdg_importer_v1", 1) [2351417.114] wl_registry@16.global(20, "zwp_linux_dmabuf_v1", 3) [2351417.152] -> wl_registry@16.bind(20, "zwp_linux_dmabuf_v1", 3, new id [unknown]@19) [2351417.189] wl_registry@16.global(21, "zwp_keyboard_shortcuts_inhibit_manager_v1", 1) [2351417.214] wl_registry@16.global(22, "zwp_text_input_manager_v3", 1) [2351417.236] wl_registry@16.global(23, "gtk_text_input_manager", 1) [2351417.257] wl_callback@17.done(9627) [2351417.269] -> wl_display@1.sync(new id wl_callback@17) [2351417.384] wl_display@1.delete_id(17) [2351417.396] wl_drm@18.device("/dev/dri/card0") [2351417.464] -> wl_drm@18.authenticate(10) [2351417.476] wl_drm@18.format(808669761) [2351417.489] wl_drm@18.format(808669784) [2351417.503] wl_drm@18.format(875713089) [2351417.515] wl_drm@18.format(875713112) [2351417.531] wl_drm@18.format(909199186) [2351417.542] wl_drm@18.format(961959257) [2351417.552] wl_drm@18.format(825316697) [2351417.560] wl_drm@18.format(842093913) [2351417.575] wl_drm@18.format(909202777) [2351417.590] wl_drm@18.format(875713881) [2351417.600] wl_drm@18.format(842094158) [2351417.614] wl_drm@18.format(909203022) [2351417.626] wl_drm@18.format(1448695129) [2351417.637] wl_drm@18.capabilities(1) [2351417.651] zwp_linux_dmabuf_v1@19.format(875713089) [2351417.662] zwp_linux_dmabuf_v1@19.modifier(875713089, 0, 0) [2351417.691] zwp_linux_dmabuf_v1@19.modifier(875713089, 16777216, 1) [2351417.712] zwp_linux_dmabuf_v1@19.modifier(875713089, 16777216, 2) [2351417.736] zwp_linux_dmabuf_v1@19.format(875713112) [2351417.747] zwp_linux_dmabuf_v1@19.modifier(875713112, 0, 0) [2351417.775] zwp_linux_dmabuf_v1@19.modifier(875713112, 16777216, 1) [2351417.801] zwp_linux_dmabuf_v1@19.modifier(875713112, 16777216, 2) [2351417.827] zwp_linux_dmabuf_v1@19.format(808669761) [2351417.842] zwp_linux_dmabuf_v1@19.modifier(808669761, 0, 0) [2351417.868] zwp_linux_dmabuf_v1@19.modifier(808669761, 16777216, 1) [2351417.891] zwp_linux_dmabuf_v1@19.modifier(808669761, 16777216, 2) [2351417.920] zwp_linux_dmabuf_v1@19.format(909199186) [2351417.931] zwp_linux_dmabuf_v1@19.modifier(909199186, 0, 0) [2351417.959] zwp_linux_dmabuf_v1@19.modifier(909199186, 16777216, 1) [2351417.981] zwp_linux_dmabuf_v1@19.modifier(909199186, 16777216, 2) [2351418.005] wl_callback@17.done(9627) [2351418.018] -> wl_display@1.sync(new id wl_callback@17) [2351418.111] wl_display@1.delete_id(17) [2351418.127] wl_drm@18.authenticated() [2351418.134] wl_callback@17.done(9627) [2351427.266] -> wl_compositor@4.create_surface(new id wl_surface@17) [2351454.116] -> wl_shm@5.create_pool(new id wl_shm_pool@20, fd 11, 4096) [2351454.416] -> wl_shm_pool@20.resize(12288) [2351457.613] -> wl_shm_pool@20.resize(28672) [2351457.656] -> wl_shm_pool@20.resize(61440) [2351457.720] -> wl_shm_pool@20.resize(126976) [2351457.807] -> wl_shm_pool@20.resize(258048) [2351458.057] -> wl_shm_pool@20.resize(520192) [2351461.709] -> wl_shm_pool@20.resize(1044480) [2351469.961] -> wl_shm_pool@20.resize(2093056) [2351510.075] -> wl_shm_pool@20.create_buffer(new id wl_buffer@21, 1409024, 32, 32, 128, 0) [2351510.115] -> wl_pointer@7.set_cursor(0, wl_surface@3, 3, 3) [2351510.167] -> wl_surface@3.attach(wl_buffer@21, 0, 0) [2351510.198] -> wl_surface@3.set_buffer_scale(2) [2351510.214] -> wl_surface@3.damage(0, 0, 16, 16) [2351510.251] -> wl_surface@3.commit() [2351511.217] -> wl_registry@2.bind(9, "xdg_wm_base", 1, new id [unknown]@22) Using the 'xdg-shell' shell integration [2351511.259] -> xdg_wm_base@22.get_xdg_surface(new id xdg_surface@23, wl_surface@17) [2351511.286] -> xdg_surface@23.get_toplevel(new id xdg_toplevel@24) [2351511.304] -> xdg_toplevel@24.set_title("qt_wayland_test") [2351511.320] -> xdg_toplevel@24.set_app_id("wayland_qt_csd_scale") [2351511.337] -> wl_surface@17.set_buffer_scale(1) [2351511.913] -> wl_surface@17.set_buffer_transform(0) [2351511.933] -> wl_surface@17.commit() [2351511.945] wl_keyboard@10.keymap(1, fd 8, 53717) [2351522.840] wl_keyboard@10.repeat_info(33, 500) [2351530.569] xdg_toplevel@24.configure(0, 0, array) [2351530.630] xdg_surface@23.configure(9629) [2351530.673] -> xdg_surface@23.set_window_geometry(0, 0, 150, 108) [2351530.711] -> xdg_surface@23.ack_configure(9629) [2351530.837] -> wl_shm@5.create_pool(new id wl_shm_pool@25, fd 11, 262136) [2351530.876] -> wl_shm_pool@25.create_buffer(new id wl_buffer@26, 0, 302, 217, 1208, 0) [2351536.901] -> wl_surface@17.damage(0, 0, 150, 15) [2351536.973] -> wl_surface@17.damage(151, 0, 1, 15) [2351536.995] -> wl_surface@17.damage(0, 15, 1, 93) [2351537.026] -> wl_surface@17.damage(151, 15, 1, 93) [2351537.053] -> wl_surface@17.damage(0, 123, 150, 1) [2351537.160] -> wl_surface@17.frame(new id wl_callback@27) [2351537.182] -> wl_surface@17.attach(wl_buffer@26, 0, 0) [2351537.206] -> wl_surface@17.damage(3, 30, 296, 184) [2351537.238] -> wl_surface@17.commit() [2351545.159] wl_surface@17.enter(wl_output@6) [2351545.195] wl_buffer@26.release() [2351582.852] xdg_toplevel@24.configure(150, 108, array) [2351582.899] xdg_surface@23.configure(9631) [2351582.941] wl_keyboard@10.modifiers(9633, 0, 0, 0, 0) [2351582.971] wl_keyboard@10.enter(9633, wl_surface@17, array) [2351583.002] wl_data_device@14.data_offer(new id wl_data_offer@1805814672) [2351583.026] wl_data_offer@4278190080.offer("UTF8_STRING") [2351583.042] wl_data_offer@4278190080.offer("COMPOUND_TEXT") [2351583.055] wl_data_offer@4278190080.offer("TEXT") [2351583.070] wl_data_offer@4278190080.offer("STRING") [2351583.086] wl_data_offer@4278190080.offer("text/plain;charset=utf-8") [2351583.103] wl_data_offer@4278190080.offer("text/plain") [2351583.119] wl_data_offer@4278190080.offer("SAVE_TARGETS") [2351583.136] wl_data_device@14.selection(wl_data_offer@4278190080) [2351583.188] -> wl_display@1.sync(new id wl_callback@28) [2351583.224] -> xdg_surface@23.set_window_geometry(0, 0, 74, 54) [2351583.278] -> xdg_surface@23.ack_configure(9631) [2351583.397] -> wl_shm_pool@25.destroy() [2351583.426] -> wl_buffer@26.destroy() [2351583.524] -> wl_shm@5.create_pool(new id wl_shm_pool@29, fd 11, 65400) [2351583.554] -> wl_shm_pool@29.create_buffer(new id wl_buffer@30, 0, 150, 109, 600, 0) [2351584.273] -> wl_surface@17.damage(0, 0, 74, 15) [2351584.330] -> wl_surface@17.damage(75, 0, 1, 15) [2351584.357] -> wl_surface@17.damage(0, 15, 1, 39) [2351584.384] -> wl_surface@17.damage(75, 15, 1, 39) [2351584.409] -> wl_surface@17.damage(0, 69, 74, 1) [2351584.483] -> wl_surface@17.frame(new id wl_callback@31) [2351584.500] -> wl_surface@17.attach(wl_buffer@30, 0, 0) [2351584.529] -> wl_surface@17.damage(3, 30, 144, 76) [2351584.562] -> wl_surface@17.commit() [2351585.393] wl_display@1.delete_id(28) [2351585.420] wl_display@1.delete_id(25) [2351585.431] wl_display@1.delete_id(26) [2351585.440] wl_callback@28.done(9633) [2351585.465] wl_buffer@30.release() [2351600.425] wl_display@1.delete_id(31) [2351600.525] wl_display@1.delete_id(27) [2351600.539] wl_callback@31.done(29805802) [2355662.142] wl_keyboard@10.key(9634, 29809856, 56, 1) [2355662.308] wl_keyboard@10.modifiers(9635, 262152, 0, 0, 0) [2355662.405] xdg_toplevel@24.close() [2355662.500] -> wl_display@1.sync(new id wl_callback@27) [2355662.530] -> xdg_toplevel@24.destroy() [2355662.544] -> xdg_surface@23.destroy() [2355662.565] -> wl_surface@17.destroy() [2355662.639] xdg_wm_base@22.ping(29809858) [2355662.663] -> xdg_wm_base@22.pong(29809858) [2355662.685] wl_keyboard@10.key(9636, 29809862, 62, 0) [2355662.960] -> wl_shm_pool@29.destroy() [2355663.012] -> wl_buffer@30.destroy() [2355677.230] -> xdg_wm_base@22.destroy() [2355678.108] -> zwp_linux_dmabuf_v1@19.destroy() [2355678.143] -> wl_pointer@7.release() [2355678.275] -> wl_keyboard@10.release() [2355678.295] -> wl_touch@15.release() [2355678.308] -> zxdg_output_v1@9.destroy() [2355678.366] -> wl_buffer@21.destroy() [2355678.457] -> wl_shm_pool@20.destroy()