This second MR in the Wayland series adds display configuration related enhancements, including providing more display information (like a proper/consistent name and position) to Wine and implementing GetCurrentDisplaySettings.
To get additional information from the Wayland compositor we need to use a protocol from the wayland-protocols collection, so we introduce support in the build system for protocol .xml files. These changes are introduced on their own in the first commit in the series, but we can squash it with the next commit, where the functionality is first used, if preferred.
To be able to provide a consistent view of the display settings across all processes, this MR adds a shared memory region containing an authoritative version of the Wayland output information (see the "winewayland.drv: Implement GetCurrentDisplaySettings." commit for more details).
Thanks!
--
v3: winewayland.drv: Infer and report Windows monitor positions.
winewayland.drv: Use the output name reported by the compositor.
tools: Support building Wayland protocol source files.
winewayland.drv: Handle wl_output objects only in the desktop process.
winewayland.drv: Support GetCurrentDisplaySettings.
win32u: Support setting the registry mode using gdi_device_manager.
https://gitlab.winehq.org/wine/wine/-/merge_requests/2476
--
v3: winemac: Use the default IME implementation for stubs.
winex11: Use the default IME implementation for stubs.
imm32: Return TRUE from ImmIsIME with any HKL.
imm32: Add a default implementation for IME functions.
imm32: Introduce new input_context_init helper.
imm32: Select current IME on input contexts when needed.
imm32: Send WM_IME_SELECT messages when IME is activated.
imm32: Pass the HIMC to the IME UI window IMMGWL_IMC.
win32u: Ignore some IME messages in default_window_proc.
win32u: Ignore IME messages from IME UI windows in DefWindowProc.
imm32/tests: Test DefWindowProc with IME UI messages.
https://gitlab.winehq.org/wine/wine/-/merge_requests/2539
This series of patches implements GetConsoleOriginalTitleA/W().
We re-use the existing logic of GetConsoleTitle, as it is the same for GetConsoleOriginalTitle.
--
v2: kernel32/tests: Test GetConsoleOriginalTitleA/W() with empty title
kernelbase: Implement GetConsoleOriginalTitleA()
kernelbase: Implement GetConsoleOriginalTitleW()
conhost: Save original console title on initialization
kernel32/tests: Check return length of GetConsoleOriginalTitleA/W()
https://gitlab.winehq.org/wine/wine/-/merge_requests/2532
Today, NtCreateThreadEx() passes to pthread_attr_setstack() an address
range that spans both the user (PE) stack and the kernel (Unix) stack.
pthread_attr_setstack() accepts an address range that will be used as
the initial stack area for the thread created by pthread_create(). It
is often assumed that the initial stack will be available for the entire
duration of the thread's lifetime.
This assumption, however, conflicts with how Win32 fibers operate.
Fiber APIs allow the thread's initial stack to be freed before the
thread exits, or kept alive beyond the point of thread's termination.
This allows the lifetime of the thread's initial stack to be shorter or
longer than the originating thread's lifetime. This is possible because
each fiber has its own stack and context, and ConvertThreadToFiber()
transfers the current thread's stack to a new fiber.
This specifically causes problems in Glibc v2.31 and earlier. These
Glibc versions have a bug where madvise(2) with the MADV_DONTNEED flag
is called on the initial stack area on thread exit, even when the stack
was user-supplied (via pthread_attr_setstack). Therefore, the kernel
may zero out any portion of the initial stack at any time after the
originating thread terminates, even if the stack no longer belongs to
the current thread (either freed and reallocated, or owned by a fiber).
This may ultimately lead to memory corruption.
Fix this by only passing the syscall (kernel) portion of the stack to
pthread_attr_setstack().
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/2468
--
v2: winemac: Use the default IME implementation for stubs.
winex11: Use the default IME implementation for stubs.
imm32: Return TRUE from ImmIsIME with any HKL.
imm32: Add a default implementation for IME functions.
imm32: Introduce new input_context_init helper.
imm32: Select current IME on input contexts when needed.
imm32: Send WM_IME_SELECT messages when IME is activated.
imm32: Pass the HIMC to the IME UI window IMMGWL_IMC.
win32u: Ignore some IME messages in default_window_proc.
win32u: Ignore IME messages from IME UI windows in DefWindowProc.
imm32/tests: Test DefWindowProc with IME UI messages.
https://gitlab.winehq.org/wine/wine/-/merge_requests/2539