[PATCH 4/5] win32u: Move null user driver implementation from user32.
Jacek Caban
jacek at codeweavers.com
Wed Nov 10 08:01:02 CST 2021
On 11/10/21 12:47 AM, Rémi Bernon wrote:
> On 11/10/21 00:41, Rémi Bernon wrote:
>> On 11/9/21 13:55, Jacek Caban wrote:
>>> Signed-off-by: Jacek Caban <jacek at codeweavers.com>
>>> ---
>>> dlls/user32/driver.c | 209 +----------------------------
>>> dlls/win32u/driver.c | 310
>>> ++++++++++++++++++++++++++++++++++++++++++-
>>> 2 files changed, 310 insertions(+), 209 deletions(-)
>>>
>>>
>>
>> A little bit related to my previous comment, this patch introduces a
>> reset to "null" graphics driver on driver unload.
>>
>> I think it could also add the same
>>
>> __wine_set_display_driver( &null_driver, WINE_GDI_DRIVER_VERSION );
>>
>> call when the "null" driver is explicitly requested and loaded,
>> possibly addressing my previous comment too (as the pointer would not
>> be lasy_load_driver anymore).
>
> Also, regarding EnumDisplayMonitors and GetMonitorInfo, for which you
> added some FIXME, I have some patches to move the default
> implementation back to the corresponding user32 functions.
>
> I intended to send them after the previous nulldrv display device
> cache series I sent a week ago but I don't think they actually depend
> on it.
>
> (Similarly, I used the monitor cache to keep the default and initial
> monitor for GetMonitorInfo implementation)
>
> I rebased and pushed the patches there if you're interested, although
> only the commit up to c998fbadab6aa33e3bd2740b0651a0c0509d4c02 are
> really relevant for this:
I have null driver functions and some other sysparams.c functions moved
to win32u in my tree. Those needed to be changed due to to advapi32 and
setupapi calls. I used a cache as well, but instead of having two
caches, I extended adapters cache to contain missing monitor rects
informations. There are a few functions that need to enumerate monitors,
they would look like this:
update_display_cache();
pthread_mutex_lock( &display_lock );
LIST_FOR_EACH_ENTRY( adapter, &adapters, struct display_device, entry )
{
LIST_FOR_EACH_ENTRY( monitor, &adapter->children, struct
monitor, dev.entry )
{
/* .... */
}
}
pthread_mutex_unlock( &display_lock );
What do you think about such approach?
Thanks,
Jacek
More information about the wine-devel
mailing list