This MR introduces a few minor changes to widl to support generating proxy code for WinRT's parameterized interfaces:
* Use the mangled, C-friendly interface name for naming variables `FormatStringOffsetTable`, `StubThunkTable`, etc) in proxy and stub code.
* Use the default interface of a runtime class while creating type format strings in `write_ip_tfs`.
* When proxy generation is enabled, also compute UUIDs for all specialized parameterized interface declarations in imported files.
Finally, I have also enabled proxy generation and registration for wintypes.dll as an example. We use the `PROXY_CLSID_IS` define as WinRT IDLs cannot use `coclass` to declare the `PSFactoryBuffer` class for the DLL.
--
v6: wintypes: Register proxies for interfaces.
include: Add size and length annotations for IVector(View) and IIterator method params.
include: Remove duplicate interface declarations.
widl: Ignore all #included runtimeclass statements while generating registry entries.
https://gitlab.winehq.org/wine/wine/-/merge_requests/8910
Since 7b28c6d17c7da278307756cfcd0da830e5d39baf, we directly use `NtUserGetClientRect` to get the size of the GL target windows. But that returns an empty rect for minimized windows, and attempting to set a zero size on a CGL context in `-[WineOpenGLContext wine_updateBackingSize:]` causes a Metal assertion. You can see this by minimizing e.g. Geometry Dash or Garry's Mod.
We could just not call wine_updateBackingSize if we find a zero dimension for the window, but I think we want to attempt to keep the backing size correct. Perhaps there's a better way to get the client rect of a minimized window than the un-AdjustWindowRect approach I'm using here? If the window is minimized fullscreen, `get_win_data(hwnd)->rects.client` is (-32000, -32000) - (-32000, -32000).
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/9049
Implement the function `IXMLDOMElement_removeAttributeNode`. Essentially
pass the hard work to `IXMLDOMNamedNodeMap_removeNamedItem`.
Use the fact, that attribute names are unique in elements.
One case that isn't checked is wheter or not the value of the provided
attribute match with the one stored in the dom-element.
This MR implements according to the tests introduced in https://gitlab.winehq.org/wine/wine/-/merge_requests/8928
--
v3: fix formatting of if clause
https://gitlab.winehq.org/wine/wine/-/merge_requests/9056
In wined3d_swapchain_cleanup, before decrementing the reference counts of each of the back/front
buffers, we first set their swapchain to NULL, presumably to stop the current under-destruction
swapchain from being used through them. But there is an oversight.
When we call wined3d_texture_decref on the front_buffer, the back_buffers still have their
swapchains pointing to the swapchain being destroyed. In texture_resource_unload, we call
context_acquire(device, NULL, 0), note the NULL texture parameter here. When the texture parameter
is NULL, wined3d_context_gl_acquire (in turn called by context_acquire) will default to using the
first back buffer from the implicit swapchain of "device", which, as previously stated, has not had
their swapchain set to NULL yet. From here, we reach wined3d_context_gl_activate with a texture
whose swapchain is currently being destroyed. This swapchain is then assigned to "context_gl" here
before being freed, leaving a dangling pointer.
When this context_gl is acquired again later, we will try to access
context_gl->c.swapchain->win_handle, thus complete the use-after-free cycle.
This commit makes sure the swapchain pointer of ALL front and back buffers are set to NULL before
decrementing their reference counts.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=58325
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/8406
If a session is shutdown when its command_state is already COMPLETE,
session_handle_source_shutdown calls session_set_stopped, which calls
session_command_complete which will submit the op at the head of commands again,
despite it having already been submitted.
Given that only the op at the head of commands can be in the submitted state,
tracking it as a command state makes more sense to me. And if the command state
is SUBMITTED we know not to submit the op again.
* * *
Superceded !8270
--
v3: mf: Add a SUBMITTED command state to avoid multiple submission of the same op.
https://gitlab.winehq.org/wine/wine/-/merge_requests/8722