On 21 May 2013 13:18, Stefan Dösinger <ste...@codeweavers.com> wrote:
> The new code does not deliver the resolution change messages to the
> correct window, see the todo_wine markers in the next patch. Getting
> this right isn't simply a matter of passing the correct window to
> wined3d_device_restore_fullscreen_window because the delivery of the
> correct messages in the new window == old window case is mostly a lucky
> side effect of the window style hacks. Those hacks fail if we pass a
> different window, because the style of the new window is different from
> what wined3d expects, so it doesn't send any messages.
Well, wined3d_device_restore_fullscreen_window() isn't really supposed
to generate messages at all, the resize on mode changes happens in
device_parent_mode_changed(). The implication seems to be that
restoring the display mode is supposed to happen after the new
swapchain is created, but before "ddraw->cooperative_level" is
updated.

>  
> /*****************************************************************************
> + * IDirectDraw7::RestoreDisplayMode
> + *
> + * Restores the display mode to what it was at creation time. Basically.
> + *
> + * Returns
> + *  DD_OK on success
> + *  DDERR_NOEXCLUSIVE mode if the device isn't in fullscreen mode
> + *
> + 
> *****************************************************************************/
I don't think that really adds anything.

> -static HRESULT WINAPI ddraw7_SetCooperativeLevel(IDirectDraw7 *iface, HWND 
> window, DWORD cooplevel)
> +static HRESULT WINAPI ddraw_set_cooperative_level(struct ddraw *ddraw, HWND 
> window,
> +        DWORD cooplevel, BOOL restore_mode)
Shadowing the global "restore_mode" is a bit unfortunate.

> -    TRACE("iface %p, window %p, flags %#x.\n", iface, window, cooplevel);
> +    TRACE("ddraw %p, window %p, flags %#x, restore_mode %s.\n", ddraw, 
> window, cooplevel,
> +            restore_mode ? "true" : "false");
I think %#x is generally clear enough for BOOLs.

>      if(cooplevel & DDSCL_ALLOWREBOOT)
> -        WARN("(%p) Unhandled flag DDSCL_ALLOWREBOOT, harmless\n", This);
> +        WARN("(%p) Unhandled flag DDSCL_ALLOWREBOOT, harmless\n", ddraw);
>      if(cooplevel & DDSCL_ALLOWMODEX)
> -        WARN("(%p) Unhandled flag DDSCL_ALLOWMODEX, harmless\n", This);
> +        WARN("(%p) Unhandled flag DDSCL_ALLOWMODEX, harmless\n", ddraw);
>      if(cooplevel & DDSCL_FPUSETUP)
> -        WARN("(%p) Unhandled flag DDSCL_FPUSETUP, harmless\n", This);
> +        WARN("(%p) Unhandled flag DDSCL_FPUSETUP, harmless\n", ddraw);
The "(%p)" there is pretty pointless, I usually remove them if I'm
editing the line anyway.

> @@ -86,6 +86,7 @@ struct ddraw
>
>      /* DirectDraw things, which are not handled by WineD3D */
>      DWORD                   cooperative_level;
> +    BOOL                    setcooplevel_ddraw1;
>
We should probably consolidate the various BOOLs in struct ddraw into
a flags field.


Reply via email to