forked from AuroraMiddleware/gtk
1f58e0ed6b
Previously, the GDK backend for Wayland would deduce the logical size of the monitors from the wl_output size and scale. With the addition of fractional scaling which advertises a larger scale value and then scale down the client surface, the computed logical size of the monitors in GDK would be wrong and confuse applications which insist on using the monitor size and position (like Firefox). The xdg-output protocol aims at describing outputs in a way which is more in line with the concept of an output on desktop oriented systems by presenting the outputs using their logical size and position appropriately transformed. Add support for the optional xdg-output protocol so that the size and position of the monitors as reported by GDK is correct even when using fractional scaling. Fixes: https://gitlab.gnome.org/GNOME/gtk/issues/1828
110 lines
3.8 KiB
Meson
110 lines
3.8 KiB
Meson
gdk_wayland_sources = files([
|
|
'gdkapplaunchcontext-wayland.c',
|
|
'gdkcairocontext-wayland.c',
|
|
'gdkclipboard-wayland.c',
|
|
'gdkcursor-wayland.c',
|
|
'gdkdevice-wayland.c',
|
|
'gdkdisplay-wayland.c',
|
|
'gdkdrag-wayland.c',
|
|
'gdkdrop-wayland.c',
|
|
'gdkeventsource.c',
|
|
'gdkglcontext-wayland.c',
|
|
'gdkkeys-wayland.c',
|
|
'gdkmonitor-wayland.c',
|
|
'gdkprimary-wayland.c',
|
|
'gdkselection-wayland.c',
|
|
'gdkvulkancontext-wayland.c',
|
|
'gdksurface-wayland.c',
|
|
'wm-button-layout-translation.c',
|
|
])
|
|
|
|
gdk_wayland_public_headers = files([
|
|
'gdkwaylanddevice.h',
|
|
'gdkwaylanddisplay.h',
|
|
'gdkwaylandglcontext.h',
|
|
'gdkwaylandmonitor.h',
|
|
'gdkwaylandsurface.h'
|
|
])
|
|
|
|
install_headers(gdk_wayland_public_headers, subdir: 'gtk-4.0/gdk/wayland/')
|
|
install_headers('gdkwayland.h', subdir: 'gtk-4.0/gdk/')
|
|
|
|
gdk_wayland_deps = [
|
|
shmlib,
|
|
xkbdep,
|
|
wlclientdep,
|
|
wlprotocolsdep,
|
|
wlcursordep,
|
|
wlegldep,
|
|
]
|
|
|
|
# wayland protocols
|
|
proto_dir = dependency('wayland-protocols').get_pkgconfig_variable('pkgdatadir')
|
|
assert(proto_dir != '', 'Could not get pkgdatadir from wayland-protocols.pc')
|
|
|
|
wayland_scanner = find_program('wayland-scanner')
|
|
|
|
# Format:
|
|
# - protocol name
|
|
# - protocol stability ('private', 'stable' or 'unstable')
|
|
# - protocol version (if stability is 'unstable')
|
|
proto_sources = [
|
|
['gtk-shell', 'private', ],
|
|
['gtk-primary-selection', 'private', ],
|
|
['pointer-gestures', 'unstable', 'v1', ],
|
|
['xdg-shell', 'unstable', 'v6', ],
|
|
['xdg-shell', 'stable', ],
|
|
['xdg-foreign', 'unstable', 'v1', ],
|
|
['tablet', 'unstable', 'v2', ],
|
|
['keyboard-shortcuts-inhibit', 'unstable', 'v1', ],
|
|
['server-decoration', 'private' ],
|
|
['xdg-output', 'unstable', 'v1', ],
|
|
]
|
|
|
|
gdk_wayland_gen_headers = []
|
|
|
|
foreach p: proto_sources
|
|
proto_name = p.get(0)
|
|
proto_stability = p.get(1)
|
|
|
|
if proto_stability == 'stable'
|
|
output_base = proto_name
|
|
input = join_paths(proto_dir, '@0@/@1@/@2@.xml'.format(proto_stability, proto_name, output_base))
|
|
elif proto_stability == 'private'
|
|
output_base = proto_name
|
|
input = 'protocol/@0@.xml'.format(proto_name)
|
|
else
|
|
proto_version = p.get(2)
|
|
output_base = '@0@-@1@-@2@'.format(proto_name, proto_stability, proto_version)
|
|
input = join_paths(proto_dir, '@0@/@1@/@2@.xml'.format(proto_stability, proto_name, output_base))
|
|
endif
|
|
|
|
gdk_wayland_gen_headers += custom_target('@0@ client header'.format(output_base),
|
|
input: input,
|
|
output: '@0@-client-protocol.h'.format(output_base),
|
|
command: [
|
|
wayland_scanner,
|
|
'client-header',
|
|
'@INPUT@', '@OUTPUT@',
|
|
])
|
|
|
|
gdk_wayland_sources += custom_target('@0@ source'.format(output_base),
|
|
input: input,
|
|
output: '@0@-protocol.c'.format(output_base),
|
|
command: [
|
|
wayland_scanner,
|
|
'private-code',
|
|
'@INPUT@', '@OUTPUT@',
|
|
])
|
|
endforeach
|
|
|
|
libgdk_wayland = static_library('gdk-wayland',
|
|
gdk_wayland_sources, gdk_wayland_gen_headers, gdkconfig, gdkenum_h,
|
|
include_directories: [ confinc, gdkinc, ],
|
|
c_args: [
|
|
'-DGDK_COMPILATION',
|
|
'-DG_LOG_DOMAIN="Gdk"',
|
|
] + common_cflags,
|
|
link_args: common_ldflags,
|
|
dependencies: [ gdk_deps, gdk_wayland_deps, ])
|