
Windows only: The libSDL2 Windows message loop needs the libSDL2 Windows low level keyboard hook procedure to grab the left and right Windows keys correctly. Reenable the SDL2 Windows keyboard hook procedure. Since SDL2 2.30.4 the SDL2 keyboard hook procedure also filters out the special left Control key event for every Alt Gr key event on keyboards with an international layout. This means the QEMU low level keyboard hook procedure is no longer needed. Remove the QEMU Windows keyboard hook procedure. Resolves: https://gitlab.com/qemu-project/qemu/-/issues/2139 Resolves: https://gitlab.com/qemu-project/qemu/-/issues/2323 Signed-off-by: Volker Rümelin <vr_qemu@t-online.de> Link: https://lore.kernel.org/r/20241231115950.6732-1-vr_qemu@t-online.de Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> (cherry picked from commit 4dafba778aa3e5f5fd3b2c6333afd7650dcf54e2) Signed-off-by: Michael Tokarev <mjt@tls.msk.ru> (Mjt: context fix in ui/sdl2.c (includes))
194 lines
5.6 KiB
Meson
194 lines
5.6 KiB
Meson
system_ss.add(pixman)
|
|
specific_ss.add(when: ['CONFIG_SYSTEM_ONLY'], if_true: pixman) # for the include path
|
|
specific_ss.add(when: ['CONFIG_SYSTEM_ONLY'], if_true: opengl) # for the include path
|
|
|
|
system_ss.add(png)
|
|
system_ss.add(files(
|
|
'clipboard.c',
|
|
'console.c',
|
|
'cursor.c',
|
|
'dmabuf.c',
|
|
'input-keymap.c',
|
|
'input-legacy.c',
|
|
'input-barrier.c',
|
|
'input.c',
|
|
'kbd-state.c',
|
|
'keymaps.c',
|
|
'qemu-pixman.c',
|
|
'ui-hmp-cmds.c',
|
|
'ui-qmp-cmds.c',
|
|
'util.c',
|
|
))
|
|
system_ss.add(when: pixman, if_true: files('console-vc.c'), if_false: files('console-vc-stubs.c'))
|
|
if dbus_display
|
|
system_ss.add(files('dbus-module.c'))
|
|
endif
|
|
system_ss.add([spice_headers, files('spice-module.c')])
|
|
system_ss.add(when: spice_protocol, if_true: files('vdagent.c'))
|
|
|
|
if host_os == 'linux'
|
|
system_ss.add(files('input-linux.c', 'udmabuf.c'))
|
|
endif
|
|
system_ss.add(when: cocoa, if_true: files('cocoa.m'))
|
|
|
|
vnc_ss = ss.source_set()
|
|
vnc_ss.add(files(
|
|
'vnc.c',
|
|
'vnc-enc-zlib.c',
|
|
'vnc-enc-hextile.c',
|
|
'vnc-enc-tight.c',
|
|
'vnc-palette.c',
|
|
'vnc-enc-zrle.c',
|
|
'vnc-auth-vencrypt.c',
|
|
'vnc-ws.c',
|
|
'vnc-jobs.c',
|
|
'vnc-clipboard.c',
|
|
))
|
|
vnc_ss.add(zlib, jpeg)
|
|
vnc_ss.add(when: sasl, if_true: files('vnc-auth-sasl.c'))
|
|
system_ss.add_all(when: [vnc, pixman], if_true: vnc_ss)
|
|
system_ss.add(when: vnc, if_false: files('vnc-stubs.c'))
|
|
|
|
ui_modules = {}
|
|
|
|
if curses.found()
|
|
curses_ss = ss.source_set()
|
|
curses_ss.add(when: [curses, iconv], if_true: [files('curses.c'), pixman])
|
|
ui_modules += {'curses' : curses_ss}
|
|
endif
|
|
|
|
system_ss.add(opengl)
|
|
if opengl.found()
|
|
opengl_ss = ss.source_set()
|
|
opengl_ss.add(gbm, pixman)
|
|
opengl_ss.add(when: [opengl],
|
|
if_true: files('shader.c', 'console-gl.c', 'egl-helpers.c', 'egl-context.c'))
|
|
ui_modules += {'opengl' : opengl_ss}
|
|
endif
|
|
|
|
if opengl.found()
|
|
egl_headless_ss = ss.source_set()
|
|
egl_headless_ss.add(when: [opengl, pixman],
|
|
if_true: [files('egl-headless.c'), gbm])
|
|
ui_modules += {'egl-headless' : egl_headless_ss}
|
|
endif
|
|
|
|
if dbus_display
|
|
dbus_ss = ss.source_set()
|
|
env = environment()
|
|
env.set('HOST_OS', host_os)
|
|
xml = custom_target('dbus-display preprocess',
|
|
input: 'dbus-display1.xml',
|
|
output: 'dbus-display1.xml',
|
|
env: env,
|
|
command: [xml_pp, '@INPUT@', '@OUTPUT@'])
|
|
dbus_display1 = custom_target('dbus-display gdbus-codegen',
|
|
output: ['dbus-display1.h', 'dbus-display1.c'],
|
|
input: xml,
|
|
command: [gdbus_codegen, '@INPUT@',
|
|
'--glib-min-required', '2.64',
|
|
'--output-directory', meson.current_build_dir(),
|
|
'--interface-prefix', 'org.qemu.',
|
|
'--c-namespace', 'QemuDBus',
|
|
'--generate-c-code', '@BASENAME@'])
|
|
dbus_ss.add(when: gio,
|
|
if_true: [files(
|
|
'dbus-chardev.c',
|
|
'dbus-clipboard.c',
|
|
'dbus-console.c',
|
|
'dbus-error.c',
|
|
'dbus-listener.c',
|
|
'dbus.c',
|
|
), opengl, gbm, pixman, dbus_display1])
|
|
ui_modules += {'dbus' : dbus_ss}
|
|
endif
|
|
|
|
if gtk.found()
|
|
if host_os == 'windows'
|
|
system_ss.add(files('win32-kbd-hook.c'))
|
|
endif
|
|
|
|
gtk_ss = ss.source_set()
|
|
gtk_ss.add(gtk, vte, pixman, files('gtk.c'))
|
|
if have_gtk_clipboard
|
|
gtk_ss.add(files('gtk-clipboard.c'))
|
|
endif
|
|
gtk_ss.add(when: x11, if_true: files('x_keymap.c'))
|
|
gtk_ss.add(when: opengl, if_true: files('gtk-gl-area.c'))
|
|
gtk_ss.add(when: [x11, opengl], if_true: files('gtk-egl.c'))
|
|
ui_modules += {'gtk' : gtk_ss}
|
|
endif
|
|
|
|
if sdl.found()
|
|
sdl_ss = ss.source_set()
|
|
sdl_ss.add(sdl, sdl_image, pixman, glib, files(
|
|
'sdl2-2d.c',
|
|
'sdl2-input.c',
|
|
'sdl2.c',
|
|
))
|
|
sdl_ss.add(when: opengl, if_true: files('sdl2-gl.c'))
|
|
sdl_ss.add(when: x11, if_true: files('x_keymap.c'))
|
|
ui_modules += {'sdl' : sdl_ss}
|
|
endif
|
|
|
|
if spice.found()
|
|
spice_core_ss = ss.source_set()
|
|
spice_core_ss.add(spice, pixman, files(
|
|
'spice-core.c',
|
|
'spice-input.c',
|
|
'spice-display.c'
|
|
))
|
|
ui_modules += {'spice-core' : spice_core_ss}
|
|
|
|
if gio.found()
|
|
spice_ss = ss.source_set()
|
|
spice_ss.add(spice, gio, pixman, files('spice-app.c'))
|
|
ui_modules += {'spice-app': spice_ss}
|
|
endif
|
|
endif
|
|
|
|
keymaps = [
|
|
['atset1', 'qcode'],
|
|
['linux', 'qcode'],
|
|
['qcode', 'atset1'],
|
|
['qcode', 'atset2'],
|
|
['qcode', 'atset3'],
|
|
['qcode', 'linux'],
|
|
['qcode', 'qnum'],
|
|
['qcode', 'sun'],
|
|
['qnum', 'qcode'],
|
|
['usb', 'qcode'],
|
|
['win32', 'qcode'],
|
|
['x11', 'qcode'],
|
|
['xorgevdev', 'qcode'],
|
|
['xorgkbd', 'qcode'],
|
|
['xorgxquartz', 'qcode'],
|
|
['xorgxwin', 'qcode'],
|
|
['osx', 'qcode'],
|
|
]
|
|
|
|
if have_system or xkbcommon.found()
|
|
keycodemapdb_proj = subproject('keycodemapdb', required: true)
|
|
foreach e : keymaps
|
|
output = 'input-keymap-@0@-to-@1@.c.inc'.format(e[0], e[1])
|
|
genh += custom_target(output,
|
|
output: output,
|
|
capture: true,
|
|
input: keycodemapdb_proj.get_variable('keymaps_csv'),
|
|
command: [python, keycodemapdb_proj.get_variable('keymap_gen').full_path(),
|
|
'code-map', '--lang', 'glib2',
|
|
'--varname', 'qemu_input_map_@0@_to_@1@'.format(e[0], e[1]),
|
|
'@INPUT0@', e[0], e[1]])
|
|
endforeach
|
|
endif
|
|
|
|
subdir('shader')
|
|
|
|
if have_system
|
|
subdir('icons')
|
|
|
|
install_data('qemu.desktop', install_dir: qemu_desktopdir)
|
|
endif
|
|
|
|
modules += {'ui': ui_modules}
|