This cleans up `LDR_DONT_RESOLVE_REFS` checks in preparation for !7.
--
v2: ntdlll: Remove redundant LDR_DONT_RESOLVE_REFS checks before calling process_attach().
ntdll: Skip DLL initialization and ldr notification entirely if DONT_RESOLVE_DLL_REFERENCES is set.
kernel32/tests: Test for unexpected loader notification for import dependency loaded with DONT_RESOLVE_DLL_REFERENCES.
kernel32/tests: Test for unexpected LDR_PROCESS_ATTACHED flag in import dependency loaded with DONT_RESOLVE_DLL_REFERENCES.
kernel32/tests: Add basic tests for internal flags of modules loaded with DONT_RESOLVE_DLL_REFERENCES.
https://gitlab.winehq.org/wine/wine/-/merge_requests/7347
Allow the user to press Ctrl-C to abort lengthy DIR (or DIR /p, etc.) operations.
--
v13: programs/cmd: Implement ability to abort lengthy directory operations via Ctrl-C.
https://gitlab.winehq.org/wine/wine/-/merge_requests/7322
On Mon Feb 17 19:22:08 2025 +0000, eric pouech wrote:
> thanks for taking the time to update your patch
> unfortunately, it fails on wine regression test
> the attached patch should solve this
> [patch.ctrlc](/uploads/84ae84d1c5cf3d3dfc19904c673bc906/patch.ctrlc)
> also, any reason you changed the ctrl event for and automatic reset?
> actually, I was puzzled with the previous versions with a manual reset
> (my first guess would have been to implement it with an automatic reset)
> I tried things like '(dir /s \\\* || echo aaaaa) && dir \*' (and halting
> the first dir command with ctrl-c) on native:
> * does break the first dir command,
> * executes the RHS of || (as the dir command failed because of the
> ctrl-c),
> * prints the 'aaaaa' string
> * executes the RHS of && (as last command of LHS, eg echo, did succeed),
> * outputs just the directory header (but nothing else) for the second dir
> which fits better with a manual reset (it could be implemented in native
> with something else, like a global variable set in the event handler
> -requires atomic ops-)
Thank you for the patch. I will try to get that integrated sometime today. I'll be traveling for the next few days and will have limited ability during that time to address further concerns.
Automatic vs. manual reset were based on my thinking about whether the function WCMD_ctrlc_status would be called more than once per command iteration. If called only once then ownership of the status passes to the caller and thus automatic reset is cleaner. However, thinking further about this, it probably makes sense to switch back to manual reset, in case future callers (i.e. perhaps for different internal commands, etc.) might want to call it more than once per iteration. That, and the fact that there is a manual reset anyway before command launch in the loop toward the end of wmain suggests that a manual reset would be better, so I will switch back when I submit the changes containing your patch.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7322#note_94891
thanks for taking the time to update your patch
unfortunately, it fails on wine regression test
the attached patch should solve this
[patch.ctrlc](/uploads/84ae84d1c5cf3d3dfc19904c673bc906/patch.ctrlc)
also, any reason you changed the ctrl event for and automatic reset?
actually, I was puzzled with the previous versions with a manual reset (my first guess would have been to implement it with an automatic reset)
I tried things like '(dir /s \\\* || echo aaaaa) && dir \*' (and halting the first dir command with ctrl-c) on native:
* does break the first dir command,
* executes the RHS of || (as the dir command failed because of the ctrl-c),
* prints the 'aaaaa' string
* executes the RHS of && (as last command of LHS, eg echo, did succeed),
* outputs just the directory header (but nothing else) for the second dir
which fits better with a manual reset (it could be implemented in native with something else, like a global variable set in the event handler -requires atomic ops-)
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7322#note_94879
This adds Mach thread priority support (both in the application and realtime band) and recalculates thread priorities when the process priority changes.
Part 3, which is still a bit WIP deals with implementing priority boosts (for main threads and threads which are processing window messages), effectively fully replacing https://gitlab.winehq.org/wine/wine/-/merge_requests/1232.
Currently the implementation in this MR already technically overrides what https://gitlab.winehq.org/wine/wine/-/merge_requests/1232 does, if it makes sense I can also revert it here.
I added a few comments regarding the Mach thread priority API usage, as there is limited documentation available, and much was inferred from the source or by testing. If this is too verbose I can also remove that...
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7317
I don't think these are serious problems, but Clang 20's defaults (from llvm-mingw nightly) were resulting in build failures with `--enable-werror` due to `-Wtautological-compare` and `-Wunused-function`. I hope that the buffer wrap checking is somewhat idiomatic/standard.
If necessary, I can split off the winevulkan change, but it seems minor enough to be grouped in this MR.
--
v2: rpcrt4: Pointer arithmetic fixes (-Wtautological-compare).
https://gitlab.winehq.org/wine/wine/-/merge_requests/7231
This fixes https://bugs.winehq.org/show_bug.cgi?id=52094.
For reference, here's how current_modref is being passed around (before this patch):
```mermaid
graph TB
fii["fixup_imports_ilonly<br><em style='color:#ff0'>(directly sets current_modref)</em>"]
fi["fixup_imports<br><em style='color:#ff0'>(directly sets current_modref)</em>"]
pa["process_attach<br><em style='color:#ff0'>(directly sets current_modref)</em>"]
ld[load_dll]
id["import_dll<br><em style='color:#0f0'>(directly uses current_modref)</em>"]
bin["build_import_name<br><em style='color:#0f0'>(directly uses current_modref)</em>"]
foe["find_ordinal_export<br><em style='color:#0f0'>(uses current_modref for relay)</em>"]
ffe["find_forwarded_export<br><em style='color:#0f0'>(directly uses current_modref)</em>"]
fne[find_named_export]
MI[MODULE_InitDLL]
fii --> ld
fi --> id
pa --> MI -.-> DllMain
id --> bin
id --> ld
id --> foe
id --> fne --> foe --> ffe --> foe
ffe --> fne
ffe --> bin
style DllMain color:red;
```
--
v12: ntdll: Remove superflous NULL check for importer.
ntdll: Properly track refcount on dynamic imports of export forwarders.
ntdll: Explicitly ignore dynamic (GetProcAddress) importers as relay/snoop user module.
ntdll: Properly track refcount on static imports of export forwarders.
ntdll: Register module dependency for export forwarders regardless of whether the dependency is already loaded.
ntdll: Don't re-add a module dependency if it already exists.
ntdll: Register module dependency for export forwarders only after successful resolution.
https://gitlab.winehq.org/wine/wine/-/merge_requests/7
This resolves the issue in StudioTax where the bounding box dimensions is reported as 0.
Because the height is less than 0, the check for height in GdipAddPathRectangle fails,
and the X and Y coordinates of the points is never set.
I am fairly ignorant of this code, this seems like a good approach, however I am happy for guidance from others more familiar in how gdiplus works.
--
v3: gdiplus: Fix text height calculation when exceeding rect
gdiplus: Check for NoClip in text height calculation
https://gitlab.winehq.org/wine/wine/-/merge_requests/5360
Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com>
--
v3: windowscodecs: Implement CreateQueryWriter().
windowscodecs/metadata: Base returned query handlers on metadata handlers.
windowscodecs/metadata: Return query writer object from GetMetadataByName() when block writer is used.
windowscodecs/metadata: Handle empty items in queries.
windowscodecs/metadata: Use separate helpers to parse query items.
windowscodecs/metadata: Add a helper to parse query index syntax.
windowscodecs/metadata: Collect query components before assigning values.
windowscodecs/metadata: Use VT_LPWSTR type instead of BSTRs when parsing queries.
windowscodecs/tests: Add some tests for the query reader container format.
windowscodecs/tests: Add some tests for CreateQueryWriterFromReader().
windowscodecs/tests: Add query reader tests for live block reader updates.
windowscodecs/tests: Add some tests for CreateQueryWriter().
windowscodecs/metadata: Share implementation between query reader and writer objects.
windowscodecs/tests: Add some query tests with the Unknown reader.
https://gitlab.winehq.org/wine/wine/-/merge_requests/7329
On Sun Feb 16 17:41:01 2025 +0000, Brendan Shanks wrote:
> Another possibility is to use `libbsdxml`, a renamed expat that FreeBSD
> includes (although the man page says that “The libbsdxml library is
> intended to be used within the FreeBSD base system only. Use of the
> libbsdxml library for other purposes is not supported and discouraged.”
> But expat’s API is quite stable, and avahi also has the option to use bsdxml.)
> Otherwise, maybe just depend on a system-installed expat or libxml2 on FreeBSD?
Assuming this is desirable to read this file to begin with (e.g. if it's going to stay available in the future, if structure is stable, etc), we could potentially convert to WCHARs, and then reused much of existing code from manifest parsing. External library for something like seems heavy.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7339#note_94835
On Sun Feb 16 16:38:40 2025 +0000, eric pouech wrote:
> this likely could be folded in code line 510, by inserting between 510 & 511:
> if (return_code != NO_ERROR) dirStack = NULL;
Thank you. I knew this was non-optimal.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7322#note_94834
On Sun Feb 16 16:37:29 2025 +0000, eric pouech wrote:
> actually, we could (later on) have other values as return code...
> so IMO this should rather be written as:
> `if (return_code != NO_ERROR || (num_empty && !num_with_data))`
> ` errorlevel = ERROR_INVALID_FUNCTION;`
> `else`
> ` errorlevel = NO_ERROR;`
Thank you. I was hoping for clarification on this one.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7322#note_94833
On Sun Feb 16 16:38:49 2025 +0000, eric pouech wrote:
> nitpick: IMO it's more readable to return a RETURN_CODE, and pass a
> DIRECTORY_STACK\*\* to update the pointer (you likely did it this way to
> minimize change, but let's take the opportunity of a change to sanitize
> a bit the current spaghetti code)
It is *always* my philosophy to minimize changes to existing, working code. Some projects emphasize this. I also come from a working assumption, perhaps erroneously, that existing code is functional and already meets project standards. No one likes to come into a project to add contributions and then have to get out the mop bucket to clean up legacy technical debt. I'm speaking generally here and not specifically about this particular part of code.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7322#note_94832
On Sun Feb 16 17:01:28 2025 +0000, eric pouech wrote:
> globally it looks better
> a couple of stylistic remarks, but you need to go further for not using
> errorlevel inside the function and its helper
> perhaps, it's worthwhile to split the patch in two:
> * first one to no longer use error level internally, adapt
> list_directory prototype... (in the details, it's fine to use return
> errorlevel = ERROR\_\* while parsing the arguments in case of error, but
> when this is done all the rest of the code should use only the
> return_code (and set errorlevel when exiting WCMD_dir))
> * the second one to plug in the ctrl-c handling and breaking from the
> various loops
I only ever intended to do the second part. I've been doing the rest per your suggestions out of goodwill.
I'll continue to fix up the first part per your suggestions but I don't have the energy to split this into separate patches. I'll address the remaining issues that you have raised today but that's going to be it from me I'm afraid on this.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7322#note_94831
This introduces a faster implementation of signal and wait operations on NT
events, semaphores, and mutexes, which improves performance to native levels for
a wide variety of games and other applications.
The goal here is similar to the long-standing out-of-tree "esync" and "fsync"
patch sets, but without the flaws that make those patch sets not upstreamable.
The Linux "ntsync" driver is not currently released. It has been accepted into
the trunk Linux tree for 6.14, so barring any extraordinary circumstances, the
API is frozen and it will be released in its current form in about 2 months.
Since it has passed all relevant reviewers on the kernel side, and the API is
all but released, it seems there is no reason any more not to submit the Wine
side to match.
Some important notes:
* This patch set does *not* include any way to disable ntsync support, since
that kind of configuration often seems to be dispreferred where not necessary.
In essence, ntsync should just work everywhere.
Probably the easiest way to effectively disable ntsync, for the purposes of
testing, is to chmod the /dev/ntsync device to prevent its being opened.
Regardless, a Wine switch to disable ntsync can be added simply enough. Note
that it should probably not take the form of a registry key, however, since it
needs to be easily accessible from the server itself.
* It is, generally speaking, not possible for only some objects, or some
processes, to have backing ntsync objects, while others use the old server
path. The esync/fsync patch sets explicitly protected against this by making
sure every process had a consistent view of whether esync was enabled. This is
not provided here, since no switch is provided to toggle ntsync, and it should
not be possible to get into such an inconsistent state without gross
misconfiguration.
* Similarly, no diagnostic messages are provided to note that ntsync is in use,
or not in use. These messages are part of esync/fsync, as well as part of
ntsync "testing" trees unofficially distributed. However, if ntsync is working
correctly, no message should be necessary.
The basic structure is:
* Each type of server object which can be waited on by the client (including
events, semaphores, mutexes, but also other types such as processes, files)
must store an "inproc_sync" object.
This "inproc_sync" object is a full server object (note that this differs from
esync/fsync). A vector and server request is introduced to retrieve an NT
handle to this object from an arbitrary NT handle.
Since the actual ntsync objects are simply distinct file descriptions, we then
call get_handle_fd from the client to retrieve an fd to the object, and then
perform ioctls on it.
* Objects signaled by the server (processes, files, etc) perform ntsync ioctls
on that object. The backing object in all such cases is simply an event.
* Signal and wait operations on the client side attempt to defer to an
"inproc_\*" function, falling back to the server implementation if it returns
STATUS_NOT_IMPLEMENTED. This mirrors how in-process synchronization objects
(critical sections, SRW locks, etc) used to be implemented—attempting to use
an architecture-specific "fast_\*" function and falling back if it returned
STATUS_NOT_IMPLEMENTED.
* The inproc_sync handles, once retrieved, are cached per-process. This caching
takes a similar form to the fd cache. It does not reuse the same
infrastructure, however.
The primary reason for this is that the fd cache is designed to fit within a
64-bit value and uses 64-bit atomic operations to ensure consistency. However,
we need to store more than 64 bits of information. [We also need to modify
them after caching, in order to correctly implement handle closing—see below.]
The secondary reason is that retrieving the ntsync fd from the inproc_sync
handle itself uses the fd cache.
* In order to keep the Linux driver simple, it does not implement access flags
(EVENT_MODIFY_STATE etc.) Instead, the flags are cached locally and validated
there. This too mirrors the fd cache. Note that this means that a malicious
process can now modify objects it should not be able modify—which is less true
than it is with wineserver—but this is no different from the way other objects
(notably fds) are handled, and would require manual syscalls.
* In order to achieve correct behaviour related to closing objects while they
are used, this patch set essentially relies on refcounting. This is broadly
true of the server as well, but because we need to avoid server calls when
performing object operations, significantly more care must be taken.
In particular, because waits need to be interruptable by signals and then be
restarted, we need the backing ntsync object to remain valid until all users
are done with it. On a process level, this is achieved by letting multiple
processes own handles to the underlying inproc_sync server object.
On a thread level, multiple simultaneous calls need to refcount the process's
local handle. This refcount is stored in the sync object cache. When it
reaches zero, the cache is cleared.
Punting this behaviour to the Linux driver would have introduced a great deal
more complexity, which is best kept in userspace and out of the kernel.
* The cache is, as such, treated as a cache. The penultimate commit, which
introduces client support but does not yet cache the objects, effectively
illustrates this by never actually caching anything, and retrieving a new NT
handle and fd every time.
* Certain waits, on internal handles (such as async, startup_info, completion),
are delegated to the server even when ntsync is used. Those server objects do
not create an underlying ntsync object.
--
v3: ntdll: Cache in-process synchronization objects.
ntdll: Use server_wait_for_object() when waiting on only the queue object.
ntdll: Use in-process synchronization objects.
ntdll: Introduce a helper to wait on an internal server handle.
server: Allow creating an event object for client-side user APC signaling.
server: Introduce select_inproc_queue and unselect_inproc_queue requests.
server: Add a request to retrieve the in-process synchronization object from a handle.
server: Create in-process synchronization objects for fd-based objects.
server: Create in-process synchronization objects for timers.
server: Create in-process synchronization objects for threads.
server: Create in-process synchronization objects for message queues.
server: Create in-process synchronization objects for jobs.
server: Create in-process synchronization objects for processes.
server: Create in-process synchronization objects for keyed events.
server: Create in-process synchronization objects for device managers.
server: Create in-process synchronization objects for debug objects.
server: Create in-process synchronization objects for console servers.
server: Create in-process synchronization objects for consoles.
server: Create in-process synchronization objects for completion ports.
server: Create in-process synchronization objects for mutexes.
server: Create in-process synchronization objects for semaphores.
server: Create in-process synchronization objects for events.
server: Add an object operation to retrieve an in-process synchronization object.
ntdll: Retrieve and cache an ntsync device in wait calls.
ntdll: Add stub functions for in-process synchronization.
ntdll: Add some traces to synchronization methods.
This merge request has too many patches to be relayed via email.
Please visit the URL below to see the contents of the merge request.
https://gitlab.winehq.org/wine/wine/-/merge_requests/7226
On Sun Feb 16 16:37:14 2025 +0000, eric pouech wrote:
> this shouldn't set errorlevel but return_code
> and likely using ERROR_FILE_NOT_FOUND to mark that listing was empty
My head is starting to spin here. That is existing code that I haven't touched. I'll fix along with the other issues though...
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7322#note_94829
Normally Cyberpunk 2077 spawns #cpu_threads of dispatcher threads.
However with Freebsd, since create_logical_proc_info was a stub,
the game would instead spawn a single dispatcher thread, causing
the game to just crawl.
Working around the issue by adding a barebone implementation of
create_logical_proc_info for FreeBSD so that the game would at
least get a thread count through ntdll.
--
v2: Fix Cyberpunk 2077 spawning only one dispatcher thread in FreeBSD
https://gitlab.winehq.org/wine/wine/-/merge_requests/5213
Another possibility is to use `libbsdxml`, a renamed expat that FreeBSD includes (although the man page says that “The libbsdxml library is intended to be used within the FreeBSD base system only. Use of the libbsdxml library for other purposes is not supported and discouraged.” But expat’s API is quite stable, and avahi also has the option to use bsdxml.)
Otherwise, maybe just depend on a system-installed expat or libxml2 on FreeBSD?
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7339#note_94826
globally it looks better
a couple of stylistic remarks, but you need to go further for not using errorlevel inside the function and its helper
perhaps, it's worthwhile to split the patch in two:
* first one to no longer use error level internally, adapt list_directory prototype... (in the details, it's fine to use return errorlevel = ERROR\_\* while parsing the arguments in case of error, but when this is done all the rest of the code should use only the return_code (and set errorlevel when exiting WCMD_dir))
* the second one to plug in the ctrl-c handling and breaking from the various loops
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7322#note_94825
eric pouech (@epo) commented about programs/cmd/directory.c:
> * FIXME: Assumes 24-line display for the /P qualifier.
> */
>
> -static DIRECTORY_STACK *WCMD_list_directory (DIRECTORY_STACK *inputparms, int level) {
> +static DIRECTORY_STACK *WCMD_list_directory (DIRECTORY_STACK *inputparms, int level, RETURN_CODE *return_code) {
nitpick: IMO it's more readable to return a RETURN_CODE, and pass a DIRECTORY_STACK\*\* to update the pointer (you likely did it this way to minimize change, but let's take the opportunity of a change to sanitize a bit the current spaghetti code)
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7322#note_94822
eric pouech (@epo) commented about programs/cmd/directory.c:
> thisDir = tempDir;
> }
> }
> + /* Free remaining structures if we broke out of previous loop due to error. */
> + while (dirStack != NULL) {
this likely could be folded in code line 510, by inserting between 510 & 511:
if (return_code != NO_ERROR) dirStack = NULL;
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7322#note_94821
eric pouech (@epo) commented about programs/cmd/directory.c:
> }
>
> /* Trailer Information */
> - if (trailerReqd) {
> + if (trailerReqd && return_code == NO_ERROR) {
> WCMD_dir_trailer(prevEntry->dirName);
> }
>
> - if (num_empty && !num_with_data)
> + if (return_code == STATUS_CONTROL_C_EXIT)
actually, we could (later on) have other values as return code...
so IMO this should rather be written as:
`if (return_code != NO_ERROR || (num_empty && !num_with_data))`
` errorlevel = ERROR_INVALID_FUNCTION;`
`else`
` errorlevel = NO_ERROR;`
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7322#note_94820
eric pouech (@epo) commented about programs/cmd/directory.c:
> /* Clear any errors from previous invocations, and process it */
> errorlevel = NO_ERROR;
> prevEntry = thisEntry;
> - thisEntry = WCMD_list_directory (thisEntry, 0);
> + thisEntry = WCMD_list_directory (thisEntry, 0, &return_code);
> if (errorlevel)
this should use return_code not error level
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7322#note_94819
eric pouech (@epo) commented about programs/cmd/directory.c:
> if ((file_total + dir_total == 0) && (level == 0)) {
> SetLastError (ERROR_FILE_NOT_FOUND);
> WCMD_print_error ();
> errorlevel = ERROR_INVALID_FUNCTION;
this shouldn't set errorlevel but return_code
and likely using ERROR_FILE_NOT_FOUND to mark that listing was empty
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7322#note_94818
eric pouech (@epo) commented about programs/cmd/directory.c:
> WCHAR fname[MAX_PATH];
> WCHAR ext[MAX_PATH];
> unsigned num_empty = 0, num_with_data = 0;
> + RETURN_CODE return_code = NO_ERROR;
>
> errorlevel = NO_ERROR;
this should not be necessary (in fact starting from here up the exit of the function, you should only deal with return_code... errorlevel should be set upon exiting)
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7322#note_94817
On Sun Feb 16 07:21:41 2025 +0000, Brian Wright wrote:
> Bah. There were too many changes to X11DRV_ConfigureNotify for printf
> debugging, and I wouldn't know what to change that also keeps other
> programs from breaking.
> I can provide detailed logs for 9.21 (or any interim versions), but
> that's about all I can do
For the record, all of these `ConfigureNotify` events were a hack to let Wine know where on screen the window is, which happened to work way better than it should and it resulted in more more reliable behavior than Wine's built in XEmbed support at the time. Ideally, yabridge would just use XEmbed instead and Wine would keep track of the screen coordinates.
If you enable yabridge's XEmbed support then it stops sending these `ConfigureNotify` messages and it will use XEmbed instead. But I also have not yet been able to get that to work as expected with the latest Wine version. I spent a couple hours debugging Wine's X11 driver last Friday but I haven't figured out what goes wrong or what's missing yet.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/6569#note_94810
Make both method calls;
1. Consistently written with parameter names as per spec.
2. Fix parameter validation to be consistent with spec.
3. Fix szNameBuf parameter semantics as per spec.
4. Fix szNameBuf casing str search as per spec.
5. Factor out common code into TLB_ helpers vastly improves readability.
--
v25: dlls/oleaut32: Replace infinite loops with for loops
dlls/oleaut32: Use consistent SegDir field names
This merge request has too many patches to be relayed via email.
Please visit the URL below to see the contents of the merge request.
https://gitlab.winehq.org/wine/wine/-/merge_requests/7286
On Sun Feb 16 08:08:14 2025 +0000, Joe Souza wrote:
> Looking through the existing code, especially WCMD_directory, there
> seems to be no distinction between errorlevel and the RETURN_CODE that
> the function returns. In most cases I see the code set errorlevel to
> some value and then the function returns errorlevel.
OK, I *think* the latest changes are pretty close to what you asked for.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7322#note_94807
Allow the user to press Ctrl-C to abort lengthy DIR (or DIR /p, etc.) operations.
--
v9: programs/cmd: Implement ability to abort lengthy directory operations via Ctrl-C.
https://gitlab.winehq.org/wine/wine/-/merge_requests/7322
On Sun Feb 16 01:21:13 2025 +0000, Brian Wright wrote:
> I updated the bug tracker again.
> In REAPER, the window tree looks a bit like this:
> ```text
> host_window_reparent parent 402, window 200192 (604,402)-(1516,1110)
> host_window_reparent parent 200192, window 200193 (0,0)-(912,708)
> root_coords 1
> host_window_reparent parent 200193, window 1600130 (0,0)-(912,708)
> root_coords 1
> host_window_reparent parent 1600130, window 16012db (0,0)-(644,659)
> root_coords 1
> host_window_reparent parent 16012db, window 2200000 (0,0)-(805,460)
> root_coords 1
> host_window_reparent parent 2200000, window 2000003 (0,0)-(1920,1200)
> root_coords 0
> ```
> I think 402, 200192, and 200193 are from REAPER and the rest from yabridge.
> One detail I noticed is that window 2000003 gets the initial click event
> from yabridge and sends the correct value to
> **cursor:map_event_coords**. I don't know the structure of
> event->window, but there is something in
> [**host_window_configure_child**](https://gitlab.winehq.org/wine/wine/-/blob/master/dlls/winex11.drv/window.c#L229)
> that messes with coordinate offsets.
> Is is possible that **map_event_coords** should check the value of
> `root_coords` (aka `event->send_event`) and provide `(pt->x, pt->y)`
> when this is 0?
> I'll keep picking at things and see if there's more to find.
> -----
> Alternatively, a flag/argument solution would get DAW users back in action.
Bah. There were too many changes to X11DRV_ConfigureNotify for printf debugging, and I wouldn't know what to change that also keeps other programs from breaking.
I can provide detailed logs for 9.21 (or any interim versions), but that's about all I can do
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/6569#note_94802
This MR tries to implement the SetIMECompositionRect user driver function and partially the WINE_IME_POST_UPDATE message call. It requires support for zwp_text_input_v3 from the compositor. It supports submitting committed text to the win32 side and notifying the compositor about the area of the text cursor rectangle.
This doesn't add support for embedded pre-edit because I couldn't immediately get it to appear. Either I did something incorrect, or it has something to do with Wayland. On X11, the pre-edit appears completely separated to the application window and doesn't move with it, which doesn't seem to be compatible with Wayland.
If Windows has the surrounding text feature, it does not seem possible to support it here with the provided interface.
The IME is always enabled on the focused surface, like on X11. If Windows has a facility that applications can use to say that it does or does not accept text entry at certain parts of the UI, it does not seem possible to support it here with the provided interface.
--
v10: winewayland: Post IME update for preedit text.
https://gitlab.winehq.org/wine/wine/-/merge_requests/7241
I think it would be very nice to have something like that to reduce the burden of implementing COM interfaces. This shows for instance on the windows.gaming.input module a 30% LoC reduction (from ~6800 to ~4700), even though the module already had a boilerplate helper macros already.
The MR introduces macros to automatically implement each IUnknown method, as well as all of them at once. It also includes a helper to implement IInspectable methods at once, as well as macros to forward both interface methods to a base interface or an outer object. Last, it provides higher-level macros to implement a main interface and any number of sub interfaces and generate IUnknown, forwarding and vtables for all of them at once, with IInspectable support when needed.
It uses widl to generate additional per-interface macros, for things like inheritance and vtable generation. The rest of the macros are otherwise shared in a Wine-specific header.
The implementation is split to show individual macro being used, although they are later replaced by higher-level macros. The individual helpers are still useful in some corner cases where specific behavior needs to be implemented, or for aggregating classes.
--
v5: windows.gaming.input: Use the new COM macros everywhere possible.
windows.gaming.input: Use the new macros for class implementation.
widl: Generate new macros for class implementation.
windows.gaming.input: Use the new macros for IInspectable implementation.
widl: Generate new macros for IInspectable implementation.
windows.gaming.input: Use the new macros for IUnknown implementation.
widl: Generate new macros for IUnknown implementation.
windows.gaming.input: Use the WIDL_impl_IUnknown_QueryInterface boilerplate macros.
widl: Generate some WIDL_impl_IUnknown_QueryInterface boilerplate macros.
windows.gaming.input: Use the WIDL_impl_QueryInterface boilerplate macros.
widl: Generate some WIDL_impl_QueryInterface boilerplate macros.
windows.gaming.input: Use the WIDL_impl_IUnknown_Release boilerplate macros.
widl: Generate some WIDL_impl_IUnknown_Release boilerplate macros.
windows.gaming.input: Use the WIDL_impl_IUnknown_AddRef macros.
widl: Generate some WIDL_impl_IUnknown_AddRef boilerplate macros.
windows.gaming.input: Use the WIDL_impl_IInspectable_forwards boilerplate macros.
widl: Generate some WIDL_impl_IInspectable_forwards boilerplate macros.
windows.gaming.input: Use the WIDL_impl_IUnknown_forwards boilerplate macros.
widl: Generate some WIDL_impl_IUnknown_forwards boilerplate macros.
windows.gaming.input: Use the new WIDL_impl_from_* boilerplate macros.
widl: Generate some WIDL_impl_from_* boilerplate macros.
windows.gaming.input: Use the new WIDL_impl_*Vtbl macros.
widl: Generate WIDL_impl_*Vtbl boilerplate macros.
windows.gaming.input: Use type-prefixed impl_from helpers.
windows.gaming.input: Move struct qualifier inside the macro.
windows.gaming.input: Use a separate interface for IAgileObject.
makedep: Generate some new impl.h headers from the IDLs.
widl: Generate some new impl.h headers from the IDLs.
This merge request has too many patches to be relayed via email.
Please visit the URL below to see the contents of the merge request.
https://gitlab.winehq.org/wine/wine/-/merge_requests/6207
Allow the user to press Ctrl-C to abort lengthy DIR (or DIR /p, etc.) operations.
--
v7: programs/cmd: Implement ability to abort lengthy directory operations via Ctrl-C.
https://gitlab.winehq.org/wine/wine/-/merge_requests/7322
The Windows Bluetooth stack uses private IOCTLs in order to set the [discoverability](https://learn.microsoft.com/en-us/windows/win32/api/blueto… and [connectability](https://learn.microsoft.com/en-us/windows/win32/api/bluetoo… status of a local radio, and to start/stop the device inquiry procedure. This MR introduces 3 wine-specific IOCTL codes for the same purposes, as most applications seem to the Win32 API itself for these operations:
* IOCTL_WINBTH_RADIO_SET_FLAG
* IOCTL_WINEBTH_RADIO_START_DISCOVERY
* IOCTL_WINEBTH_RADIO_STOP_DISCOVERY
--
v12: bluetoothapis: Implement BluetoothEnableDiscovery.
bluetoothapis/tests: Add tests for BluetoothEnableDiscovery.
bluetoothapis: Add stub for BluetoothEnableDiscovery.
bluetoothapis: Implement BluetoothEnableIncomingConnections.
bluetoothapis/tests: Add tests for BluetoothEnableIncomingConnections.
bluetoothapis: Add stub for BluetoothEnableIncomingConnections.
winebth.sys: Call bluez_watcher_close as part of bluetooth_shutdown.
https://gitlab.winehq.org/wine/wine/-/merge_requests/7216
The current YUV to RGB conversion provides values in studio-range [16-235], but full-range is required [0-255]. As a result, we currently write the value of 16 to represent black, and so we get gray instead.
This MR changes the coefficients used in the conversion so that the resultant output is in full-range. It actually uses two sets of coefficients as these differ between SD and HD.
Also included is a number of Direct Draw 7 tests.
The coefficients used are documented here:
https://learn.microsoft.com/en-us/windows/win32/medfound/recommended-8-bit-…
--
v2: wined3d: Use Microsoft provided coefficients for YUV to RGB conversion.
ddraw/tests: Test yuv to rgb blt in ddraw7.
https://gitlab.winehq.org/wine/wine/-/merge_requests/7324
This MR tries to implement the SetIMECompositionRect user driver function and partially the WINE_IME_POST_UPDATE message call. It requires support for zwp_text_input_v3 from the compositor. It supports submitting committed text to the win32 side and notifying the compositor about the area of the text cursor rectangle.
This doesn't add support for embedded pre-edit because I couldn't immediately get it to appear. Either I did something incorrect, or it has something to do with Wayland. On X11, the pre-edit appears completely separated to the application window and doesn't move with it, which doesn't seem to be compatible with Wayland.
If Windows has the surrounding text feature, it does not seem possible to support it here with the provided interface.
The IME is always enabled on the focused surface, like on X11. If Windows has a facility that applications can use to say that it does or does not accept text entry at certain parts of the UI, it does not seem possible to support it here with the provided interface.
--
v9: winewayland: Post IME update for preedit text.
winewayland: Implement SetIMECompositionRect.
winewayland: Post IME update for committed text.
https://gitlab.winehq.org/wine/wine/-/merge_requests/7241
This MR tries to implement the SetIMECompositionRect user driver function and partially the WINE_IME_POST_UPDATE message call. It requires support for zwp_text_input_v3 from the compositor. It supports submitting committed text to the win32 side and notifying the compositor about the area of the text cursor rectangle.
This doesn't add support for embedded pre-edit because I couldn't immediately get it to appear. Either I did something incorrect, or it has something to do with Wayland. On X11, the pre-edit appears completely separated to the application window and doesn't move with it, which doesn't seem to be compatible with Wayland.
If Windows has the surrounding text feature, it does not seem possible to support it here with the provided interface.
The IME is always enabled on the focused surface, like on X11. If Windows has a facility that applications can use to say that it does or does not accept text entry at certain parts of the UI, it does not seem possible to support it here with the provided interface.
--
v8: winewayland: Post IME update for preedit text.
winewayland: Implement SetIMECompositionRect.
winewayland: Post IME update for committed text.
https://gitlab.winehq.org/wine/wine/-/merge_requests/7241
Sorry for the late review, I don't have any good excuse.
In general, these ioctls are a bit odd without the code on the bluetoothapis side to hook them up. It's probably reasonable to add those to this merge request.
From 1/4:
```
+NTSTATUS winebluetooth_radio_set_property( winebluetooth_radio_t radio,
+ winebluetooth_radio_props_mask_t prop,
+ union winebluetooth_property *property )
```
The "property" parameter is not used.
```
+ switch (prop)
+ {
+ case WINEBLUETOOTH_RADIO_PROPERTY_CONNECTABLE:
+ case WINEBLUETOOTH_RADIO_PROPERTY_DISCOVERABLE:
+ case WINEBLUETOOTH_RADIO_PROPERTY_PAIRABLE:
+ break;
+ default:
+ return STATUS_INVALID_PARAMETER;
+ }
```
The Unix side returns STATUS_INVALID_PARAMETER for the others anyway, so you might as well just get rid of this whole switch.
```
+ case LOCAL_RADIO_CONNECTABLE:
+ status =
+ winebluetooth_radio_set_property( ext->radio, WINEBLUETOOTH_RADIO_PROPERTY_CONNECTABLE, &prop_value );
+
+ break;
+ case LOCAL_RADIO_DISCOVERABLE:
+ status =
+ winebluetooth_radio_set_property( ext->radio, WINEBLUETOOTH_RADIO_PROPERTY_DISCOVERABLE, &prop_value );
+ break;
```
Why are we translating to a different flags enum? Why not pass this flag enum directly?
You also implement the PAIRABLE property, but that code is never reached.
```
+ status = UNIX_BLUETOOTH_CALL( bluetooth_adapter_set_prop, ¶ms );
+
+ if (status != STATUS_SUCCESS) return status;
+
+ return STATUS_SUCCESS;
```
This could just be "return UNIX_BLUETOOTH_CALL( ... )".
To each their own style, I guess, but in general there are a lot of helpers that seem quite redundant...
From 2/4:
```
+ if (filter->le && filter->bredr)
+ transport = WINEBLUETOOTH_DISCOVERY_TRANSPORT_AUTO;
+ else if (filter->le)
+ transport = WINEBLUETOOTH_DISCOVERY_TRANSPORT_LE;
+ else if (filter->bredr)
+ transport = WINEBLUETOOTH_DISCOVERY_TRANSPORT_BR_EDR;
+ else
+ transport = WINEBLUETOOTH_DISCOVERY_TRANSPORT_DEFAULT;
```
Why convert to an intermediate set of flags instead of just passing the params directly to the Unix side?
Aside from the fact that the bitfield might not work, but it's pretty unnecessary anyway.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7216#note_94694
64-bit volatile accesses are not atomic on i386. Both
i686-w64-mingw32-gcc and x86 MSVC splits 64-bit loads into a pair of
load/store ops.
Fix this by using a FILD/FISTP pair, which is also used to implement C11
atomics by i686-w64-mingw32-gcc.
Fixes: f82b1c1fcf770a5d6fa02c3f286282be79a201b8
--
v5: include: Prevent misuse of __WINE_ATOMIC_* helper macros for non-atomic large accesses.
server: Fix incorrect usage of __WINE_ATOMIC_STORE_RELEASE in SHARED_WRITE_BEGIN/SHARED_WRITE_END.
include: Fix ReadNoFence64 on i386.
https://gitlab.winehq.org/wine/wine/-/merge_requests/7237
--
v5: server: Check for zero access in alloc_handle().
shell32: Don't open reg keys with zero access mask.
wbemprox: Don't open reg keys with zero access mask.
quartz: Don't open reg keys with zero access mask.
devenum: Don't open reg keys with zero access mask.
setupapi: Don't open reg keys with zero access mask.
kernel32: Don't open reg keys with zero access mask.
httpapi: Don't open files with zero access.
ntoskrnl.exe/tests: Open directory object with nonzero access in test_permanent().
https://gitlab.winehq.org/wine/wine/-/merge_requests/6047
On Fri Feb 14 18:29:59 2025 +0000, eric pouech wrote:
> thanks for the update...
> that's better however, that's not exactly what should be done
> some background first:
> - cmd.exe for its builtin commands use a RETURN_CODE; this return code
> gets the status of the command execution (NO_ERROR success, error codes,
> but also propagating an 'EXIT /B' return value...)
> - each command eventually sets the ERRORLEVEL based on the RETURN_CODE
> (some builtin commands always do, some only do it in case of != 0 return
> code - and leave ERRORLEVEL untouched in case of success -, and some
> even have a different behavior if run from a .BAT or a .CMD command file)
> - the return code is used as a basis in command chaining (esp. && and ||
> with success/failure of LHS to decide or not to execute RHS)
> note: this some evolution in code base that has been started last year
> and the target is that all builtin implementation follow that scheme.
> not all of them have been fully migrated
> from what's tested DIR seem to always set the ERRORLEVEL to the
> return_code value (file not found...)
> but in case of ctrl-c, the return code shall be STATUS_CTRL_C_EXIT and
> errorlevel 1 (we'll need the return_code to be STATUS_CTRL_C_EXIT so
> that upper functions can decide to implement the 'Terminate batch job
> (Y/N)' at some point)
> so we globally need to invert the logic: in WCMD_dir and its helpers,
> always set the return_code, and set the errorlevel at WCMD_dir exit
> based on return_code value
> in this case, you should:
> - have a local var `RETURN_CODE return_code; `in WCMD_list_directory
> - use `return_code == NO_ERROR` to continue looping (and only this
> pattern as we could in later patches have more return codes stored in return_code)
> - and return the return_code from the helper into the WCMD_dir (which
> shall then break the loop, free all directory structures and finally set
> error level based on return code)
> simple test (by hand, should be harder to integrate in test suite):
> `dir /s \*.* || echo foobar`
> interrupt with ctrl-c, shall print `foobar` at the end
Looking through the existing code, especially WCMD_directory, there seems to be no distinction between errorlevel and the RETURN_CODE that the function returns. In most cases I see the code set errorlevel to some value and then the function returns errorlevel.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7322#note_94635
This MR tries to implement the SetIMECompositionRect user driver function and partially the WINE_IME_POST_UPDATE message call. It requires support for zwp_text_input_v3 from the compositor. It supports submitting committed text to the win32 side and notifying the compositor about the area of the text cursor rectangle.
This doesn't add support for embedded pre-edit because I couldn't immediately get it to appear. Either I did something incorrect, or it has something to do with Wayland. On X11, the pre-edit appears completely separated to the application window and doesn't move with it, which doesn't seem to be compatible with Wayland.
If Windows has the surrounding text feature, it does not seem possible to support it here with the provided interface.
The IME is always enabled on the focused surface, like on X11. If Windows has a facility that applications can use to say that it does or does not accept text entry at certain parts of the UI, it does not seem possible to support it here with the provided interface.
--
v7: winewayland: Post IME update for preedit text.
https://gitlab.winehq.org/wine/wine/-/merge_requests/7241
Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com>
--
v2: windowscodecs: Implement CreateQueryWriter().
windowscodecs/metadata: Support creating query handlers over bare metadata handlers.
windowscodecs/metadata: Handle empty items in queries.
windowscodecs/metadata: Split up query parsing into helpers according to the query grammar.
windowscodecs/tests: Add some tests for the query reader container format.
windowscodecs/tests: Add some tests for CreateQueryWriterFromReader().
windowscodecs/tests: Add query reader tests for live block reader updates.
windowscodecs/tests: Add some tests for CreateQueryWriter().
windowscodecs/metadata: Share implementation between query reader and writer objects.
windowscodecs/tests: Add some query tests with the Unknown reader.
https://gitlab.winehq.org/wine/wine/-/merge_requests/7329
On Thu Feb 13 16:48:27 2025 +0000, Brian Wright wrote:
> @rbernon On the client side, if you wanted to know why the log produces
> the values it has or had advice on code changes, the relevant file seems
> to be
> [yabridge/src/wine-host/editor.cpp](https://github.com/robbert-vdh/yabridge/…
> and a few routines responsible for coords and mouse handling that might
> be indirectly showing up in the bug report log include
> **is_cursor_in_wine_window** (line 1442),
> **get_current_pointer_position** (line 953), **fix_local_coordinates**
> (line 785), and `case XCB_CONFIGURE_NOTIFY` (line 552)
> I can attach to Wine and/or yabridge in a debugger, but I wouldn't have
> advice on what to change since I don't know how the handle relationships
> should look in order to find out which routine is producing incorrect
> coordinate offsets. If you want me to try anyway, I can put it in the
> queue of all the other stuff I forget to do once the workday is over.
> Thanks to you and @robbert-vdh for maintaining two phenomenal tools.
I updated the bug tracker again.
In REAPER, the window tree looks a bit like this:
```text
host_window_reparent parent 402, window 200192 (604,402)-(1516,1110)
host_window_reparent parent 200192, window 200193 (0,0)-(912,708) root_coords 1
host_window_reparent parent 200193, window 1600130 (0,0)-(912,708) root_coords 1
host_window_reparent parent 1600130, window 16012db (0,0)-(644,659) root_coords 1
host_window_reparent parent 16012db, window 2200000 (0,0)-(805,460) root_coords 1
host_window_reparent parent 2200000, window 2000003 (0,0)-(1920,1200) root_coords 0
```
I think 402, 200192, and 200193 are from REAPER and the rest from yabridge.
One detail I noticed is that window 2000003 gets the initial click event from yabridge and sends the correct value to **cursor:map_event_coords**. I don't know the structure of event->window, but there is something in [**host_window_configure_child**](https://gitlab.winehq.org/wine/wine/-/blob/master/dlls/winex11.drv/window.c#L229) that messes with coordinate offsets.
Is is possible that **map_event_coords** should check the value of `root_coords` and provide `(pt->x, pt->y)` when this is 0?
I'll keep picking at things and see if there's more to find.
-----
Alternatively, a flag/argument solution would get DAW users back in action.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/6569#note_94623
This MR tries to implement the SetIMECompositionRect user driver function and partially the WINE_IME_POST_UPDATE message call. It requires support for zwp_text_input_v3 from the compositor. It supports submitting committed text to the win32 side and notifying the compositor about the area of the text cursor rectangle.
This doesn't add support for embedded pre-edit because I couldn't immediately get it to appear. Either I did something incorrect, or it has something to do with Wayland. On X11, the pre-edit appears completely separated to the application window and doesn't move with it, which doesn't seem to be compatible with Wayland.
If Windows has the surrounding text feature, it does not seem possible to support it here with the provided interface.
The IME is always enabled on the focused surface, like on X11. If Windows has a facility that applications can use to say that it does or does not accept text entry at certain parts of the UI, it does not seem possible to support it here with the provided interface.
--
v6: winewayland: Post IME update for preedit text.
https://gitlab.winehq.org/wine/wine/-/merge_requests/7241
This MR tries to implement the SetIMECompositionRect user driver function and partially the WINE_IME_POST_UPDATE message call. It requires support for zwp_text_input_v3 from the compositor. It supports submitting committed text to the win32 side and notifying the compositor about the area of the text cursor rectangle.
This doesn't add support for embedded pre-edit because I couldn't immediately get it to appear. Either I did something incorrect, or it has something to do with Wayland. On X11, the pre-edit appears completely separated to the application window and doesn't move with it, which doesn't seem to be compatible with Wayland.
If Windows has the surrounding text feature, it does not seem possible to support it here with the provided interface.
The IME is always enabled on the focused surface, like on X11. If Windows has a facility that applications can use to say that it does or does not accept text entry at certain parts of the UI, it does not seem possible to support it here with the provided interface.
--
v5: winewayland: Post IME update for preedit text.
winewayland: Implement SetIMECompositionRect.
winewayland: Post IME update for committed text.
https://gitlab.winehq.org/wine/wine/-/merge_requests/7241
This allows using one single wineprefix, one wineserver and one single wine executable for running both arm and arm64 executables.
This setup actually has worked earlier; Ubuntu 22.04 packages Wine 6.0, where the wine32 + wine64 packages together end up working this way. However, since Wine 6.0, a couple of refactorings has broken this setup along the way; reinstate this way of working.
The new wow64 mode probably won't work on arm, as it's not easily possible to switch between 32 and 64 bit execution mode within a process, as far as I know, but the old wow64 mode is still a great convenience - especially considering distro-packaged use for users who aren't familiar with the particular quirks on this architecture.
--
v3: server: Include ARMNT as one of the supported architectures on aarch64
ntdll: Allow running arm/aarch64 in (old) wow64 mode
https://gitlab.winehq.org/wine/wine/-/merge_requests/7204
This MR adds clipboard support to the winewayland driver by using the wlr-data-control-unstable-v1 protocol. Note that this protocol was recently merged into wayland-protocols as ext-data-control-v1, but it's not yet widely supported, so I preferred to use the wlr version for now.
This MR has many similarities to https://gitlab.winehq.org/wine/wine/-/merge_requests/7236, but due to the unconstrained nature of wlr-data-control-unstable-v1 the implementation is simpler and more robust. It can neatly fit into the existing Wine clipboard design (single proxy window in the desktop process) without requiring any event forwarding etc.
Since wlr-data-control-unstable-v1/ext-data-control-v1 is considered privileged, it may not be available in all situations, e.g., in sandboxes, and there are also a couple of compositors that may not implement it at all. It is therefore useful to have a simple fallback using the core wl_data_device interface. This fallback is not part of this MR, but I have pushed a WIP implementation based on this MR at: https://gitlab.winehq.org/afrantzis/wine/-/commits/wayland-copy-paste-data-… (note: only the win32 -> wayland direction implemented at the moment). The new fallback approach is different from https://gitlab.winehq.org/wine/wine/-/merge_requests/7236 in that when using wl_data_device it creates per-process clipboard windows instead of forwarding messages from the desktop clipboard window. This allows it to work within the design of this MR with minimal changes and maximum code reuse.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7336
This MR tries to implement the SetIMECompositionRect user driver function and partially the WINE_IME_POST_UPDATE message call. It requires support for zwp_text_input_v3 from the compositor. It supports submitting committed text to the win32 side and notifying the compositor about the area of the text cursor rectangle.
This doesn't add support for embedded pre-edit because I couldn't immediately get it to appear. Either I did something incorrect, or it has something to do with Wayland. On X11, the pre-edit appears completely separated to the application window and doesn't move with it, which doesn't seem to be compatible with Wayland.
If Windows has the surrounding text feature, it does not seem possible to support it here with the provided interface.
The IME is always enabled on the focused surface, like on X11. If Windows has a facility that applications can use to say that it does or does not accept text entry at certain parts of the UI, it does not seem possible to support it here with the provided interface.
--
v4: winewayland: Post IME update for preedit text.
winewayland: Implement SetIMECompositionRect.
winewayland: Post IME update for committed text.
winewayland: Enable/disable the zwp_text_input_v3 object.
https://gitlab.winehq.org/wine/wine/-/merge_requests/7241
When transitioning a window from IconicState to NormalState and the window is managed, go through
WithdrawnState. This is needed because Mutter doesn't unmap windows when making windows iconic/minimized
as Mutter needs to support live preview for minimized windows. So on Mutter, a window can be both
iconic and mapped. If the window is mapped, then XMapWindow() will have no effect according to the
XMapWindow() documentation. Thus we have to transition to WithdrawnState first, then to NormalState.
Fix Mass Effect Legendary Edition (1328670) starts minimized.
--
v2: winex11.drv: Go though WithdrawnState when transitioning from IconicState to NormalState.
https://gitlab.winehq.org/wine/wine/-/merge_requests/7331
When transitioning a window from IconicState to NormalState and the window is managed, go through
WithdrawnState. This is needed because Mutter doesn't unmap windows when making windows iconic/minimized
as Mutter needs to support live preview for minimized windows. So on Mutter, a window can be both
iconic and mapped. If the window is mapped, then XMapWindow() will have no effect according to the
XMapWindow() documentation. Thus we have to transition to WithdrawnState first, then to NormalState.
Fix Mass Effect Legendary Edition (1328670) starts minimized.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7331
Allow the user to press Ctrl-C to abort lengthy DIR (or DIR /p, etc.) operations.
--
v2: programs/cmd: Implement ability to abort lengthy directory operations via Ctrl-C.
https://gitlab.winehq.org/wine/wine/-/merge_requests/7322
These tests are for implementing encoding of sink writer. The implements MR is !7160, working in progress. Submitted the tests MR first.
--
v4: mfreadwrite/tests: Test sample processing for writer.
mfreadwrite/tests: Test AddStream and SetInputMediaType for writer.
mfreadwrite/tests: Test getting transforms and media sinks from writer.
mfreadwrite/tests: Move writer creation tests to test_sink_writer_create.
https://gitlab.winehq.org/wine/wine/-/merge_requests/7125
Make both method calls;
1. Consistently written with parameter names as per spec.
2. Fix parameter validation to be consistent with spec.
3. Fix szNameBuf parameter semantics as per spec.
4. Fix szNameBuf casing str search as per spec.
5. Factor out common code into TLB_ helpers vastly improves readability.
--
v24: dlls/oleaut32: Cannot allocate zero items on the heap
dlls/oleaut32: Avoid possible infinite loops and invalid mem access
dlls/oleaut32: Simplify loop in ITypeLib2_Constructor_MSFT()
This merge request has too many patches to be relayed via email.
Please visit the URL below to see the contents of the merge request.
https://gitlab.winehq.org/wine/wine/-/merge_requests/7286
Make both method calls;
1. Consistently written with parameter names as per spec.
2. Fix parameter validation to be consistent with spec.
3. Fix szNameBuf parameter semantics as per spec.
4. Fix szNameBuf casing str search as per spec.
5. Factor out common code into TLB_ helpers vastly improves readability.
--
v23: dlls/oleaut32: Cleanup IType__Impl_Constructor()s
dlls/oleaut32: Bound ITypeLib2_Constructor_SLTG() loop
dlls/oleaut32/connpt.c: Make consistent and validate args
dlls/oleaut32: Add missing IID case in ITypeLib2::QueryInterface()
dlls/oleaut32: Validate TLB_QueryInterface() params
dlls/oleaut32: Fix QueryInterface() to meet spec
dlls/shell32: Fix IUnknown::QueryInterface() to meet spec
dlls/oleaut32: Invert if-stmt in ITypeLib2_fnRelease()
dlls/oleaut32: Consistently use TLB_REF_NOT_FOUND
dlls/oleaut32: Validate arguments in ITypeLibComp interface
dlls/oleaut32: Validate arguments in ITypeComp interface
dlls/oleaut32: Consistently use TLB_get_bstr()
dlls/oleaut32: Invert if stmt for clarity
dlls/oleaut32: Fix nonsensical memory access in ITypeLib2_Constructor_SLTG()
dlls/oleaut32: Avoid ptr arithmetic in MSFT_DoVars()
dlls/oleaut32: Avoid ptr arithmetic in ITypeLib2_Constructor_SLTG()
dlls/oleaut32: Shink down ITypeLibComp_fnBind() verbosity some
dlls/oleaut32: ptr_size should be a ULONG
dlls/oleaut32: Scope indexer to loops in fn[Is|Find]Name()
dlls/oleaut32: Factor out TLB_get_funcparams_by_name()
dlls/oleaut32: Factor out TLB_get_funcdesc_by_name()
dlls/oleaut32: Validate args of ITypeLib2_fnIsName()
dlls/oleaut32: fn(Is|Find)Name should set szNameBuf with correct case
dlls/oleaut32: Use consistent param identifiers in fnFindName
dlls/oleaut32: Mostly mirror fnFindName impl in typelib.c
dlls/oleaut32: Use common and correct identifiers in typelib.c
dlls/oleaut32: Consistently use lstrcmpiW() while looking for names
This merge request has too many patches to be relayed via email.
Please visit the URL below to see the contents of the merge request.
https://gitlab.winehq.org/wine/wine/-/merge_requests/7286