=?UTF-8?Q?Stefan=20D=C3=B6singer=20?=: wined3d: Pass WM_SYSCOMMAND( SC_RESTORE) to DefWindowProc.

Alexandre Julliard julliard at wine.codeweavers.com
Wed Jan 28 15:45:33 CST 2015


Module: wine
Branch: master
Commit: 3ef1d6bcd9a51e3d26c3f9414a74a2589e9f87da
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=3ef1d6bcd9a51e3d26c3f9414a74a2589e9f87da

Author: Stefan Dösinger <stefan at codeweavers.com>
Date:   Mon Jan 26 16:03:56 2015 +0100

wined3d: Pass WM_SYSCOMMAND(SC_RESTORE) to DefWindowProc.

---

 dlls/d3d8/directx.c      |  2 +-
 dlls/d3d8/tests/device.c |  4 ++--
 dlls/d3d9/directx.c      |  2 +-
 dlls/d3d9/tests/d3d9ex.c |  4 ++--
 dlls/d3d9/tests/device.c |  4 ++--
 dlls/wined3d/device.c    | 10 ++++++++++
 include/wine/wined3d.h   |  1 +
 7 files changed, 19 insertions(+), 8 deletions(-)

diff --git a/dlls/d3d8/directx.c b/dlls/d3d8/directx.c
index 7270881..23100f2 100644
--- a/dlls/d3d8/directx.c
+++ b/dlls/d3d8/directx.c
@@ -404,7 +404,7 @@ static const struct IDirect3D8Vtbl d3d8_vtbl =
 
 BOOL d3d8_init(struct d3d8 *d3d8)
 {
-    DWORD flags = WINED3D_LEGACY_DEPTH_BIAS | WINED3D_VIDMEM_ACCOUNTING;
+    DWORD flags = WINED3D_LEGACY_DEPTH_BIAS | WINED3D_VIDMEM_ACCOUNTING | WINED3D_HANDLE_RESTORE;
 
     d3d8->IDirect3D8_iface.lpVtbl = &d3d8_vtbl;
     d3d8->refcount = 1;
diff --git a/dlls/d3d8/tests/device.c b/dlls/d3d8/tests/device.c
index 73970c1..235dc73 100644
--- a/dlls/d3d8/tests/device.c
+++ b/dlls/d3d8/tests/device.c
@@ -2622,7 +2622,7 @@ static void test_wndproc(void)
 
     expect_messages = sc_restore_messages;
     SendMessageA(focus_window, WM_SYSCOMMAND, SC_RESTORE, 0);
-    todo_wine ok(!expect_messages->message, "Expected message %#x for window %#x, but didn't receive it.\n",
+    ok(!expect_messages->message, "Expected message %#x for window %#x, but didn't receive it.\n",
             expect_messages->message, expect_messages->window);
     expect_messages = NULL;
     flush_events();
@@ -2699,7 +2699,7 @@ static void test_wndproc(void)
 
     expect_messages = sc_restore_messages;
     SendMessageA(focus_window, WM_SYSCOMMAND, SC_RESTORE, 0);
-    todo_wine ok(!expect_messages->message, "Expected message %#x for window %#x, but didn't receive it.\n",
+    ok(!expect_messages->message, "Expected message %#x for window %#x, but didn't receive it.\n",
             expect_messages->message, expect_messages->window);
     expect_messages = NULL;
     flush_events();
diff --git a/dlls/d3d9/directx.c b/dlls/d3d9/directx.c
index dc36be1..6059890 100644
--- a/dlls/d3d9/directx.c
+++ b/dlls/d3d9/directx.c
@@ -636,7 +636,7 @@ static const struct IDirect3D9ExVtbl d3d9_vtbl =
 
 BOOL d3d9_init(struct d3d9 *d3d9, BOOL extended)
 {
-    DWORD flags = WINED3D_PRESENT_CONVERSION;
+    DWORD flags = WINED3D_PRESENT_CONVERSION | WINED3D_HANDLE_RESTORE;
 
     if (!extended)
         flags |= WINED3D_VIDMEM_ACCOUNTING;
diff --git a/dlls/d3d9/tests/d3d9ex.c b/dlls/d3d9/tests/d3d9ex.c
index fef80f4..106bc3e 100644
--- a/dlls/d3d9/tests/d3d9ex.c
+++ b/dlls/d3d9/tests/d3d9ex.c
@@ -2172,7 +2172,7 @@ static void test_wndproc(void)
 
         expect_messages = sc_restore_messages;
         SendMessageA(focus_window, WM_SYSCOMMAND, SC_RESTORE, 0);
-        todo_wine ok(!expect_messages->message, "Expected message %#x for window %#x, but didn't receive it, i=%u.\n",
+        ok(!expect_messages->message, "Expected message %#x for window %#x, but didn't receive it, i=%u.\n",
                 expect_messages->message, expect_messages->window, i);
         expect_messages = NULL;
         flush_events();
@@ -2249,7 +2249,7 @@ static void test_wndproc(void)
 
         expect_messages = sc_restore_messages;
         SendMessageA(focus_window, WM_SYSCOMMAND, SC_RESTORE, 0);
-        todo_wine ok(!expect_messages->message, "Expected message %#x for window %#x, but didn't receive it, i=%u.\n",
+        ok(!expect_messages->message, "Expected message %#x for window %#x, but didn't receive it, i=%u.\n",
                 expect_messages->message, expect_messages->window, i);
         expect_messages = NULL;
         flush_events();
diff --git a/dlls/d3d9/tests/device.c b/dlls/d3d9/tests/device.c
index ffd3c11..6cf4a81 100644
--- a/dlls/d3d9/tests/device.c
+++ b/dlls/d3d9/tests/device.c
@@ -3606,7 +3606,7 @@ static void test_wndproc(void)
 
         expect_messages = sc_restore_messages;
         SendMessageA(focus_window, WM_SYSCOMMAND, SC_RESTORE, 0);
-        todo_wine ok(!expect_messages->message, "Expected message %#x for window %#x, but didn't receive it, i=%u.\n",
+        ok(!expect_messages->message, "Expected message %#x for window %#x, but didn't receive it, i=%u.\n",
                 expect_messages->message, expect_messages->window, i);
         expect_messages = NULL;
         flush_events();
@@ -3690,7 +3690,7 @@ static void test_wndproc(void)
 
         expect_messages = sc_restore_messages;
         SendMessageA(focus_window, WM_SYSCOMMAND, SC_RESTORE, 0);
-        todo_wine ok(!expect_messages->message, "Expected message %#x for window %#x, but didn't receive it, i=%u.\n",
+        ok(!expect_messages->message, "Expected message %#x for window %#x, but didn't receive it, i=%u.\n",
                 expect_messages->message, expect_messages->window, i);
         expect_messages = NULL;
         flush_events();
diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
index f640c9e..bd57d61 100644
--- a/dlls/wined3d/device.c
+++ b/dlls/wined3d/device.c
@@ -5018,6 +5018,16 @@ LRESULT device_process_message(struct wined3d_device *device, HWND window, BOOL
 
         device->device_parent->ops->activate(device->device_parent, wparam);
     }
+    else if (message == WM_SYSCOMMAND)
+    {
+        if (wparam == SC_RESTORE && device->wined3d->flags & WINED3D_HANDLE_RESTORE)
+        {
+            if (unicode)
+                DefWindowProcW(window, message, wparam, lparam);
+            else
+                DefWindowProcA(window, message, wparam, lparam);
+        }
+    }
 
     if (unicode)
         return CallWindowProcW(proc, window, message, wparam, lparam);
diff --git a/include/wine/wined3d.h b/include/wine/wined3d.h
index 987e19e..2d3336a 100644
--- a/include/wine/wined3d.h
+++ b/include/wine/wined3d.h
@@ -1243,6 +1243,7 @@ enum wined3d_display_rotation
 #define WINED3D_PRESENT_CONVERSION                              0x00000008
 #define WINED3D_RESTORE_MODE_ON_ACTIVATE                        0x00000010
 #define WINED3D_FOCUS_MESSAGES                                  0x00000020
+#define WINED3D_HANDLE_RESTORE                                  0x00000040
 
 #define WINED3D_RESZ_CODE                                       0x7fa05000
 




More information about the wine-cvs mailing list