You've already forked wine-staging
mirror of
https://gitlab.winehq.org/wine/wine-staging.git
synced 2025-04-13 14:42:51 -07:00
Compare commits
14 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
c119ae9eeb | ||
|
476caa4a5f | ||
|
9982d2e0ee | ||
|
2b2bf8ac06 | ||
|
088524a29e | ||
|
31d525e567 | ||
|
7d26828643 | ||
|
3dc3c4e0e2 | ||
|
154875b4e9 | ||
|
66148cb9b2 | ||
|
cfbf5f7b86 | ||
|
6f1b2ab35a | ||
|
550e67b8a2 | ||
|
e45211698d |
@@ -0,0 +1,43 @@
|
||||
From: Louis Lenders <xerox.xerox2000x@gmail.com>
|
||||
Subject: [PATCH 1/2] dwmapi: return DWM_E_COMPOSITIONDISABLED instead of E_NOTIMPL in DwmGetTransportAttributes
|
||||
Message-Id: <20181205121826.2124-1-xerox.xerox2000x@gmail.com>
|
||||
Date: Wed, 5 Dec 2018 13:18:25 +0100
|
||||
|
||||
This versioh is with tests;
|
||||
|
||||
Signed-off-by: Louis Lenders <xerox.xerox2000x@gmail.com>
|
||||
---
|
||||
dlls/dwmapi/dwmapi_main.c | 2 +-
|
||||
include/winerror.h | 2 ++
|
||||
2 files changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/dlls/dwmapi/dwmapi_main.c b/dlls/dwmapi/dwmapi_main.c
|
||||
index c1ee067122..eb06d15507 100644
|
||||
--- a/dlls/dwmapi/dwmapi_main.c
|
||||
+++ b/dlls/dwmapi/dwmapi_main.c
|
||||
@@ -146,7 +146,7 @@ HRESULT WINAPI DwmGetTransportAttributes(BOOL *pfIsRemoting, BOOL *pfIsConnected
|
||||
{
|
||||
FIXME("(%p, %p, %p) stub\n", pfIsRemoting, pfIsConnected, pDwGeneration);
|
||||
|
||||
- return E_NOTIMPL;
|
||||
+ return DWM_E_COMPOSITIONDISABLED;
|
||||
}
|
||||
|
||||
/**********************************************************************
|
||||
diff --git a/include/winerror.h b/include/winerror.h
|
||||
index d78c91e84e..a97b405c34 100644
|
||||
--- a/include/winerror.h
|
||||
+++ b/include/winerror.h
|
||||
@@ -3090,6 +3090,8 @@ static inline HRESULT HRESULT_FROM_WIN32(unsigned int x)
|
||||
#define WININET_E_LOGIN_FAILURE_DISPLAY_ENTITY_BODY _HRESULT_TYPEDEF_(0x80072f8e)
|
||||
#define WININET_E_DECODING_FAILED _HRESULT_TYPEDEF_(0x80072f8f)
|
||||
|
||||
+#define DWM_E_COMPOSITIONDISABLED _HRESULT_TYPEDEF_(0x80263001)
|
||||
+
|
||||
#define D3D11_ERROR_TOO_MANY_UNIQUE_STATE_OBJECTS _HRESULT_TYPEDEF_(0x887c0001)
|
||||
#define D3D11_ERROR_FILE_NOT_FOUND _HRESULT_TYPEDEF_(0x887c0002)
|
||||
#define D3D11_ERROR_TOO_MANY_UNIQUE_VIEW_OBJECTS _HRESULT_TYPEDEF_(0x887c0003)
|
||||
|
||||
--
|
||||
2.17.1
|
||||
|
@@ -0,0 +1,185 @@
|
||||
From: Louis Lenders <xerox.xerox2000x@gmail.com>
|
||||
Subject: [PATCH 2/2] dwampi: add initial tests
|
||||
Message-Id: <20181205121826.2124-2-xerox.xerox2000x@gmail.com>
|
||||
Date: Wed, 5 Dec 2018 13:18:26 +0100
|
||||
In-Reply-To: <20181205121826.2124-1-xerox.xerox2000x@gmail.com>
|
||||
References: <20181205121826.2124-1-xerox.xerox2000x@gmail.com>
|
||||
|
||||
Signed-off-by: Louis Lenders <xerox.xerox2000x@gmail.com>
|
||||
---
|
||||
configure | 1 +
|
||||
configure.ac | 1 +
|
||||
dlls/dwmapi/tests/Makefile.in | 5 ++
|
||||
dlls/dwmapi/tests/dwmapi.c | 108 ++++++++++++++++++++++++++++++++++
|
||||
include/dwmapi.h | 3 +
|
||||
5 files changed, 118 insertions(+)
|
||||
create mode 100644 dlls/dwmapi/tests/Makefile.in
|
||||
create mode 100644 dlls/dwmapi/tests/dwmapi.c
|
||||
|
||||
diff --git a/configure b/configure
|
||||
index d00057ba2f..e1dde1813b 100755
|
||||
--- a/configure
|
||||
+++ b/configure
|
||||
@@ -19392,6 +19392,7 @@ wine_fn_config_makefile dlls/dssenh/tests enable_tests
|
||||
wine_fn_config_makefile dlls/dswave enable_dswave
|
||||
wine_fn_config_makefile dlls/dswave/tests enable_tests
|
||||
wine_fn_config_makefile dlls/dwmapi enable_dwmapi
|
||||
+wine_fn_config_makefile dlls/dwmapi/tests enable_tests
|
||||
wine_fn_config_makefile dlls/dwrite enable_dwrite
|
||||
wine_fn_config_makefile dlls/dwrite/tests enable_tests
|
||||
wine_fn_config_makefile dlls/dx8vb enable_dx8vb
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 50cf9a0bd0..607a46f5a9 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -3255,6 +3255,7 @@ WINE_CONFIG_MAKEFILE(dlls/dssenh/tests)
|
||||
WINE_CONFIG_MAKEFILE(dlls/dswave)
|
||||
WINE_CONFIG_MAKEFILE(dlls/dswave/tests)
|
||||
WINE_CONFIG_MAKEFILE(dlls/dwmapi)
|
||||
+WINE_CONFIG_MAKEFILE(dlls/dwmapi/tests)
|
||||
WINE_CONFIG_MAKEFILE(dlls/dwrite)
|
||||
WINE_CONFIG_MAKEFILE(dlls/dwrite/tests)
|
||||
WINE_CONFIG_MAKEFILE(dlls/dx8vb)
|
||||
diff --git a/dlls/dwmapi/tests/Makefile.in b/dlls/dwmapi/tests/Makefile.in
|
||||
new file mode 100644
|
||||
index 0000000000..f365f96c72
|
||||
--- /dev/null
|
||||
+++ b/dlls/dwmapi/tests/Makefile.in
|
||||
@@ -0,0 +1,5 @@
|
||||
+TESTDLL = dwmapi.dll
|
||||
+IMPORTS = dwmapi
|
||||
+
|
||||
+C_SRCS = \
|
||||
+ dwmapi.c
|
||||
diff --git a/dlls/dwmapi/tests/dwmapi.c b/dlls/dwmapi/tests/dwmapi.c
|
||||
new file mode 100644
|
||||
index 0000000000..fe5ee33996
|
||||
--- /dev/null
|
||||
+++ b/dlls/dwmapi/tests/dwmapi.c
|
||||
@@ -0,0 +1,108 @@
|
||||
+/*
|
||||
+ * Unit tests for dwmapi
|
||||
+ *
|
||||
+ * Copyright 2018 Louis Lenders
|
||||
+ *
|
||||
+ * This library is free software; you can redistribute it and/or
|
||||
+ * modify it under the terms of the GNU Lesser General Public
|
||||
+ * License as published by the Free Software Foundation; either
|
||||
+ * version 2.1 of the License, or (at your option) any later version.
|
||||
+ *
|
||||
+ * This library is distributed in the hope that it will be useful,
|
||||
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
+ * Lesser General Public License for more details.
|
||||
+ *
|
||||
+ * You should have received a copy of the GNU Lesser General Public
|
||||
+ * License along with this library; if not, write to the Free Software
|
||||
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
+ *
|
||||
+ */
|
||||
+
|
||||
+#include "dwmapi.h"
|
||||
+
|
||||
+#include "wine/test.h"
|
||||
+
|
||||
+static HRESULT (WINAPI *pDwmIsCompositionEnabled)(BOOL*);
|
||||
+static HRESULT (WINAPI *pDwmEnableComposition)(UINT);
|
||||
+static HRESULT (WINAPI *pDwmGetTransportAttributes)(BOOL*,BOOL*,DWORD*);
|
||||
+
|
||||
+BOOL dwmenabled;
|
||||
+
|
||||
+static void test_isdwmenabled(void)
|
||||
+{
|
||||
+ HRESULT res;
|
||||
+ BOOL ret;
|
||||
+
|
||||
+ ret = -1;
|
||||
+ res = pDwmIsCompositionEnabled(&ret);
|
||||
+ ok((res == S_OK && ret == TRUE) || (res == S_OK && ret == FALSE), "got %x and %d\n", res, ret);
|
||||
+
|
||||
+ if (res == S_OK && ret == TRUE)
|
||||
+ dwmenabled = TRUE;
|
||||
+ else
|
||||
+ dwmenabled = FALSE;
|
||||
+ /*tested on win7 by enabling/disabling DWM service via services.msc*/
|
||||
+ if (dwmenabled)
|
||||
+ {
|
||||
+ res = pDwmEnableComposition(DWM_EC_DISABLECOMPOSITION); /* try disable and reenable dwm*/
|
||||
+ ok(res == S_OK, "got %x expected S_OK\n", res);
|
||||
+
|
||||
+ ret = -1;
|
||||
+ res = pDwmIsCompositionEnabled(&ret);
|
||||
+ ok((res == S_OK && ret == FALSE) /*wvista win7*/ || (res == S_OK && ret == TRUE) /*>win7*/, "got %x and %d\n", res, ret);
|
||||
+
|
||||
+ res = pDwmEnableComposition(DWM_EC_ENABLECOMPOSITION);
|
||||
+ ok(res == S_OK, "got %x\n", res);
|
||||
+
|
||||
+ ret = -1;
|
||||
+ res = pDwmIsCompositionEnabled(&ret);
|
||||
+ todo_wine ok(res == S_OK && ret == TRUE, "got %x and %d\n", res, ret);
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ res = pDwmEnableComposition(DWM_EC_ENABLECOMPOSITION); /*cannot enable DWM composition this way*/
|
||||
+ ok(res == S_OK /*win7 testbot*/ || res == DWM_E_COMPOSITIONDISABLED /*win7 laptop*/, "got %x\n", res);
|
||||
+ if (winetest_debug > 1)
|
||||
+ trace("returning %x\n", res);
|
||||
+
|
||||
+ ret = -1;
|
||||
+ res = pDwmIsCompositionEnabled(&ret);
|
||||
+ ok(res == S_OK && ret == FALSE, "got %x and %d\n", res, ret);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static void test_dwm_get_transport_attributes(void)
|
||||
+{
|
||||
+ BOOL isremoting, isconnected;
|
||||
+ DWORD generation;
|
||||
+ HRESULT res;
|
||||
+
|
||||
+ res = pDwmGetTransportAttributes(&isremoting, &isconnected, &generation);
|
||||
+ if (dwmenabled)
|
||||
+ ok(res == S_OK, "got %x\n", res);
|
||||
+ else
|
||||
+ {
|
||||
+ ok(res == S_OK /*win7 testbot*/ || res == DWM_E_COMPOSITIONDISABLED /*win7 laptop*/, "got %x\n", res);
|
||||
+ if (winetest_debug > 1)
|
||||
+ trace("returning %x\n", res);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+START_TEST(dwmapi)
|
||||
+{
|
||||
+ HMODULE hmod = LoadLibraryA("dwmapi.dll");
|
||||
+
|
||||
+ if (!hmod)
|
||||
+ {
|
||||
+ trace("dwmapi not found, skipping tests\n");
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ pDwmIsCompositionEnabled = (void *)GetProcAddress(hmod, "DwmIsCompositionEnabled");
|
||||
+ pDwmEnableComposition = (void *)GetProcAddress(hmod, "DwmEnableComposition");
|
||||
+ pDwmGetTransportAttributes = (void *)GetProcAddress(hmod, "DwmGetTransportAttributes");
|
||||
+
|
||||
+ test_isdwmenabled();
|
||||
+ test_dwm_get_transport_attributes();
|
||||
+}
|
||||
diff --git a/include/dwmapi.h b/include/dwmapi.h
|
||||
index b2f39deae5..12527aee62 100644
|
||||
--- a/include/dwmapi.h
|
||||
+++ b/include/dwmapi.h
|
||||
@@ -101,6 +101,9 @@ typedef struct _MilMatrix3x2D
|
||||
DOUBLE DY;
|
||||
} MilMatrix3x2D;
|
||||
|
||||
+#define DWM_EC_DISABLECOMPOSITION 0
|
||||
+#define DWM_EC_ENABLECOMPOSITION 1
|
||||
+
|
||||
#define DWM_BB_ENABLE 0x00000001
|
||||
#define DWM_BB_BLURREGION 0x00000002
|
||||
#define DWM_BB_TRANSITIONONMAXIMIZED 0x00000004
|
||||
|
||||
--
|
||||
2.17.1
|
||||
|
1
patches/dwmapi-DwmGetTransportAttributes/definition
Normal file
1
patches/dwmapi-DwmGetTransportAttributes/definition
Normal file
@@ -0,0 +1 @@
|
||||
Fixes: [31350] T-Online Mediencenter Assistent (.NET 3.5 WPF app) installer fails ('dwmapi.dll' stubs insufficient in Vista/Win7 mode)
|
@@ -1,25 +0,0 @@
|
||||
From 8acd785888b9324994f0477d6d2f2bdcd3b91219 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Sat, 27 Feb 2016 03:20:34 +0100
|
||||
Subject: krnl386.exe16: Do not reassign default handles after they got closed.
|
||||
|
||||
---
|
||||
dlls/krnl386.exe16/file.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/dlls/krnl386.exe16/file.c b/dlls/krnl386.exe16/file.c
|
||||
index b66b753..9b720ef 100644
|
||||
--- a/dlls/krnl386.exe16/file.c
|
||||
+++ b/dlls/krnl386.exe16/file.c
|
||||
@@ -363,7 +363,7 @@ HFILE16 WINAPI _lclose16( HFILE16 hFile )
|
||||
}
|
||||
TRACE("%d (handle32=%p)\n", hFile, dos_handles[hFile] );
|
||||
CloseHandle( dos_handles[hFile] );
|
||||
- dos_handles[hFile] = 0;
|
||||
+ dos_handles[hFile] = (hFile < 5) ? INVALID_HANDLE_VALUE : 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
--
|
||||
2.7.1
|
||||
|
@@ -1 +0,0 @@
|
||||
Fixes: [19184] Do not reassign default handles after they got closed
|
@@ -1,14 +1,14 @@
|
||||
From 842a1b3187b333e1af023dd7c1bb685dfa6b9967 Mon Sep 17 00:00:00 2001
|
||||
From 8fe83e82d903a0b80a442d83e9a03b527fd3e53d Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Sat, 13 Dec 2014 05:34:48 +0100
|
||||
Subject: [PATCH] ntdll: Implement loader redirection scheme.
|
||||
|
||||
---
|
||||
dlls/ntdll/loader.c | 74 ++++++++++++++++++++++++++++++++++++-----------------
|
||||
dlls/ntdll/loader.c | 74 +++++++++++++++++++++++++++++++--------------
|
||||
1 file changed, 51 insertions(+), 23 deletions(-)
|
||||
|
||||
diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c
|
||||
index d9b1712..868d400 100644
|
||||
index cd31a444..15e4af8c 100644
|
||||
--- a/dlls/ntdll/loader.c
|
||||
+++ b/dlls/ntdll/loader.c
|
||||
@@ -110,6 +110,7 @@ struct builtin_load_info
|
||||
@@ -19,7 +19,7 @@ index d9b1712..868d400 100644
|
||||
NTSTATUS status;
|
||||
WINE_MODREF *wm;
|
||||
};
|
||||
@@ -135,7 +136,8 @@ static WINE_MODREF *cached_modref;
|
||||
@@ -134,7 +135,8 @@ static WINE_MODREF *cached_modref;
|
||||
static WINE_MODREF *current_modref;
|
||||
static WINE_MODREF *last_failed_modref;
|
||||
|
||||
@@ -29,7 +29,7 @@ index d9b1712..868d400 100644
|
||||
static NTSTATUS process_attach( WINE_MODREF *wm, LPVOID lpReserved );
|
||||
static FARPROC find_ordinal_export( HMODULE module, const IMAGE_EXPORT_DIRECTORY *exports,
|
||||
DWORD exp_size, DWORD ordinal, LPCWSTR load_path );
|
||||
@@ -511,7 +513,7 @@ static FARPROC find_forwarded_export( HMODULE module, const char *forward, LPCWS
|
||||
@@ -510,7 +512,7 @@ static FARPROC find_forwarded_export( HMODULE module, const char *forward, LPCWS
|
||||
if (!(wm = find_basename_module( mod_name )))
|
||||
{
|
||||
TRACE( "delay loading %s for '%s'\n", debugstr_w(mod_name), forward );
|
||||
@@ -38,7 +38,7 @@ index d9b1712..868d400 100644
|
||||
!(wm->ldr.Flags & LDR_DONT_RESOLVE_REFS))
|
||||
{
|
||||
if (!imports_fixup_done && current_modref)
|
||||
@@ -682,7 +684,7 @@ static BOOL import_dll( HMODULE module, const IMAGE_IMPORT_DESCRIPTOR *descr, LP
|
||||
@@ -681,7 +683,7 @@ static BOOL import_dll( HMODULE module, const IMAGE_IMPORT_DESCRIPTOR *descr, LP
|
||||
{
|
||||
ascii_to_unicode( buffer, name, len );
|
||||
buffer[len] = 0;
|
||||
@@ -47,7 +47,7 @@ index d9b1712..868d400 100644
|
||||
}
|
||||
else /* need to allocate a larger buffer */
|
||||
{
|
||||
@@ -690,7 +692,7 @@ static BOOL import_dll( HMODULE module, const IMAGE_IMPORT_DESCRIPTOR *descr, LP
|
||||
@@ -689,7 +691,7 @@ static BOOL import_dll( HMODULE module, const IMAGE_IMPORT_DESCRIPTOR *descr, LP
|
||||
if (!ptr) return FALSE;
|
||||
ascii_to_unicode( ptr, name, len );
|
||||
ptr[len] = 0;
|
||||
@@ -56,7 +56,7 @@ index d9b1712..868d400 100644
|
||||
RtlFreeHeap( GetProcessHeap(), 0, ptr );
|
||||
}
|
||||
|
||||
@@ -976,7 +978,7 @@ static NTSTATUS fixup_imports_ilonly( WINE_MODREF *wm, LPCWSTR load_path, void *
|
||||
@@ -975,7 +977,7 @@ static NTSTATUS fixup_imports_ilonly( WINE_MODREF *wm, LPCWSTR load_path, void *
|
||||
|
||||
prev = current_modref;
|
||||
current_modref = wm;
|
||||
@@ -65,7 +65,7 @@ index d9b1712..868d400 100644
|
||||
current_modref = prev;
|
||||
if (status)
|
||||
{
|
||||
@@ -1064,7 +1066,7 @@ static NTSTATUS fixup_imports( WINE_MODREF *wm, LPCWSTR load_path )
|
||||
@@ -1063,7 +1065,7 @@ static NTSTATUS fixup_imports( WINE_MODREF *wm, LPCWSTR load_path )
|
||||
* Allocate a WINE_MODREF structure and add it to the process list
|
||||
* The loader_section must be locked while calling this function.
|
||||
*/
|
||||
@@ -74,7 +74,7 @@ index d9b1712..868d400 100644
|
||||
{
|
||||
WINE_MODREF *wm;
|
||||
const WCHAR *p;
|
||||
@@ -1078,7 +1080,7 @@ static WINE_MODREF *alloc_module( HMODULE hModule, LPCWSTR filename )
|
||||
@@ -1077,7 +1079,7 @@ static WINE_MODREF *alloc_module( HMODULE hModule, LPCWSTR filename )
|
||||
wm->ldr.TlsIndex = -1;
|
||||
wm->ldr.LoadCount = 1;
|
||||
|
||||
@@ -83,7 +83,7 @@ index d9b1712..868d400 100644
|
||||
if ((p = strrchrW( wm->ldr.FullDllName.Buffer, '\\' ))) p++;
|
||||
else p = wm->ldr.FullDllName.Buffer;
|
||||
RtlInitUnicodeString( &wm->ldr.BaseDllName, p );
|
||||
@@ -1745,7 +1747,7 @@ static void load_builtin_callback( void *module, const char *filename )
|
||||
@@ -1744,7 +1746,7 @@ static void load_builtin_callback( void *module, const char *filename )
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -92,7 +92,7 @@ index d9b1712..868d400 100644
|
||||
RtlFreeHeap( GetProcessHeap(), 0, fullname );
|
||||
if (!wm)
|
||||
{
|
||||
@@ -1955,8 +1957,8 @@ static BOOL is_valid_binary( HMODULE module, const pe_image_info_t *info )
|
||||
@@ -1995,8 +1997,8 @@ static BOOL is_valid_binary( HMODULE module, const pe_image_info_t *info )
|
||||
/******************************************************************************
|
||||
* load_native_dll (internal)
|
||||
*/
|
||||
@@ -103,7 +103,7 @@ index d9b1712..868d400 100644
|
||||
{
|
||||
void *module;
|
||||
HANDLE mapping;
|
||||
@@ -1999,7 +2001,7 @@ static NTSTATUS load_native_dll( LPCWSTR load_path, LPCWSTR name, HANDLE file,
|
||||
@@ -2039,7 +2041,7 @@ static NTSTATUS load_native_dll( LPCWSTR load_path, LPCWSTR name, HANDLE file,
|
||||
|
||||
/* create the MODREF */
|
||||
|
||||
@@ -112,7 +112,7 @@ index d9b1712..868d400 100644
|
||||
{
|
||||
if (module) NtUnmapViewOfSection( NtCurrentProcess(), module );
|
||||
return STATUS_NO_MEMORY;
|
||||
@@ -2067,8 +2069,8 @@ static NTSTATUS load_native_dll( LPCWSTR load_path, LPCWSTR name, HANDLE file,
|
||||
@@ -2107,8 +2109,8 @@ static NTSTATUS load_native_dll( LPCWSTR load_path, LPCWSTR name, HANDLE file,
|
||||
/***********************************************************************
|
||||
* load_builtin_dll
|
||||
*/
|
||||
@@ -123,7 +123,7 @@ index d9b1712..868d400 100644
|
||||
{
|
||||
char error[256], dllname[MAX_PATH];
|
||||
const WCHAR *name, *p;
|
||||
@@ -2088,6 +2090,7 @@ static NTSTATUS load_builtin_dll( LPCWSTR load_path, LPCWSTR path, HANDLE file,
|
||||
@@ -2128,6 +2130,7 @@ static NTSTATUS load_builtin_dll( LPCWSTR load_path, LPCWSTR path, HANDLE file,
|
||||
*/
|
||||
info.load_path = load_path;
|
||||
info.filename = NULL;
|
||||
@@ -131,7 +131,7 @@ index d9b1712..868d400 100644
|
||||
info.status = STATUS_SUCCESS;
|
||||
info.wm = NULL;
|
||||
|
||||
@@ -2584,7 +2587,8 @@ overflow:
|
||||
@@ -2624,7 +2627,8 @@ overflow:
|
||||
* Load a PE style module according to the load order.
|
||||
* The loader_section must be locked while calling this function.
|
||||
*/
|
||||
@@ -141,7 +141,7 @@ index d9b1712..868d400 100644
|
||||
{
|
||||
BOOL data = flags & (LOAD_LIBRARY_AS_DATAFILE | LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE);
|
||||
enum loadorder loadorder;
|
||||
@@ -2623,6 +2627,30 @@ static NTSTATUS load_dll( LPCWSTR load_path, LPCWSTR libname, DWORD flags, WINE_
|
||||
@@ -2663,6 +2667,30 @@ static NTSTATUS load_dll( LPCWSTR load_path, LPCWSTR libname, DWORD flags, WINE_
|
||||
}
|
||||
|
||||
main_exe = get_modref( NtCurrentTeb()->Peb->ImageBaseAddress );
|
||||
@@ -172,7 +172,7 @@ index d9b1712..868d400 100644
|
||||
loadorder = get_load_order( main_exe ? main_exe->ldr.BaseDllName.Buffer : NULL, filename );
|
||||
|
||||
if (handle && is_fake_dll( handle ))
|
||||
@@ -2645,22 +2673,22 @@ static NTSTATUS load_dll( LPCWSTR load_path, LPCWSTR libname, DWORD flags, WINE_
|
||||
@@ -2685,22 +2713,22 @@ static NTSTATUS load_dll( LPCWSTR load_path, LPCWSTR libname, DWORD flags, WINE_
|
||||
if (!handle) nts = STATUS_DLL_NOT_FOUND;
|
||||
else
|
||||
{
|
||||
@@ -200,7 +200,7 @@ index d9b1712..868d400 100644
|
||||
if (nts == STATUS_SUCCESS && loadorder == LO_DEFAULT &&
|
||||
(MODULE_InitDLL( *pwm, DLL_WINE_PREATTACH, NULL ) != STATUS_SUCCESS))
|
||||
{
|
||||
@@ -2670,7 +2698,7 @@ static NTSTATUS load_dll( LPCWSTR load_path, LPCWSTR libname, DWORD flags, WINE_
|
||||
@@ -2710,7 +2738,7 @@ static NTSTATUS load_dll( LPCWSTR load_path, LPCWSTR libname, DWORD flags, WINE_
|
||||
nts = STATUS_DLL_NOT_FOUND;
|
||||
}
|
||||
if (nts == STATUS_DLL_NOT_FOUND && loadorder != LO_BUILTIN)
|
||||
@@ -209,7 +209,7 @@ index d9b1712..868d400 100644
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -2703,7 +2731,7 @@ NTSTATUS WINAPI DECLSPEC_HOTPATCH LdrLoadDll(LPCWSTR path_name, DWORD flags,
|
||||
@@ -2743,7 +2771,7 @@ NTSTATUS WINAPI DECLSPEC_HOTPATCH LdrLoadDll(LPCWSTR path_name, DWORD flags,
|
||||
RtlEnterCriticalSection( &loader_section );
|
||||
|
||||
if (!path_name) path_name = NtCurrentTeb()->Peb->ProcessParameters->DllPath.Buffer;
|
||||
@@ -218,21 +218,22 @@ index d9b1712..868d400 100644
|
||||
|
||||
if (nts == STATUS_SUCCESS && !(wm->ldr.Flags & LDR_DONT_RESOLVE_REFS))
|
||||
{
|
||||
@@ -3666,12 +3694,12 @@ void __wine_process_init(void)
|
||||
@@ -3719,13 +3747,13 @@ void __wine_process_init(void)
|
||||
/* setup the load callback and create ntdll modref */
|
||||
wine_dll_set_callback( load_builtin_callback );
|
||||
|
||||
- if ((status = load_builtin_dll( NULL, wow64cpuW, 0, 0, &wow64cpu_wm )) == STATUS_SUCCESS)
|
||||
+ if ((status = load_builtin_dll( NULL, wow64cpuW, NULL, 0, 0, &wow64cpu_wm )) == STATUS_SUCCESS)
|
||||
Wow64Transition = wow64cpu_wm->ldr.BaseAddress;
|
||||
else
|
||||
WARN( "could not load wow64cpu.dll, status %#x\n", status );
|
||||
|
||||
- if ((status = load_builtin_dll( NULL, kernel32W, 0, 0, &wm )) != STATUS_SUCCESS)
|
||||
+ if ((status = load_builtin_dll( NULL, kernel32W, NULL, 0, 0, &wm )) != STATUS_SUCCESS)
|
||||
{
|
||||
MESSAGE( "wine: could not load kernel32.dll, status %x\n", status );
|
||||
exit(1);
|
||||
}
|
||||
|
||||
- if ((status = load_builtin_dll( NULL, wow64cpuW, 0, 0, &wow64cpu_wm )) == STATUS_SUCCESS)
|
||||
+ if ((status = load_builtin_dll( NULL, wow64cpuW, NULL, 0, 0, &wow64cpu_wm )) == STATUS_SUCCESS)
|
||||
Wow64Transition = wow64cpu_wm->ldr.BaseAddress;
|
||||
else
|
||||
WARN( "could not load wow64cpu.dll, status %#x\n", status );
|
||||
--
|
||||
2.7.4
|
||||
2.19.2
|
||||
|
||||
|
@@ -52,13 +52,13 @@ usage()
|
||||
# Get the upstream commit sha
|
||||
upstream_commit()
|
||||
{
|
||||
echo "ae5e029d2227b3a8024f597591f76fe0f37d52e3"
|
||||
echo "4397d9497608a3df45a5c519a37f5dcde5cc2301"
|
||||
}
|
||||
|
||||
# Show version information
|
||||
version()
|
||||
{
|
||||
echo "Wine Staging 4.0-rc1"
|
||||
echo "Wine Staging 4.0-rc2"
|
||||
echo "Copyright (C) 2014-2018 the Wine Staging project authors."
|
||||
echo "Copyright (C) 2018 Alistair Leslie-Hughes"
|
||||
echo ""
|
||||
@@ -136,6 +136,7 @@ patch_enable_all ()
|
||||
enable_dinput_Initialize="$1"
|
||||
enable_dsound_EAX="$1"
|
||||
enable_dsound_Fast_Mixer="$1"
|
||||
enable_dwmapi_DwmGetTransportAttributes="$1"
|
||||
enable_dwrite_FontFallback="$1"
|
||||
enable_dxdiagn_Enumerate_DirectSound="$1"
|
||||
enable_dxdiagn_GetChildContainer_Leaf_Nodes="$1"
|
||||
@@ -169,7 +170,6 @@ patch_enable_all ()
|
||||
enable_kernel32_SCSI_Sysfs="$1"
|
||||
enable_krnl386_exe16_GDT_LDT_Emulation="$1"
|
||||
enable_krnl386_exe16_Invalid_Console_Handles="$1"
|
||||
enable_krnl386_exe16__lclose16="$1"
|
||||
enable_libs_Debug_Channel="$1"
|
||||
enable_libs_Unicode_Collation="$1"
|
||||
enable_mmsystem_dll16_MIDIHDR_Refcount="$1"
|
||||
@@ -298,6 +298,7 @@ patch_enable_all ()
|
||||
enable_stdole32_idl_Typelib="$1"
|
||||
enable_stdole32_tlb_SLTG_Typelib="$1"
|
||||
enable_taskmgr_Memory_Usage="$1"
|
||||
enable_ucrtbase__o_="$1"
|
||||
enable_uianimation_stubs="$1"
|
||||
enable_user32_DM_SETDEFID="$1"
|
||||
enable_user32_Dialog_Paint_Event="$1"
|
||||
@@ -370,6 +371,7 @@ patch_enable_all ()
|
||||
enable_winex11_Window_Style="$1"
|
||||
enable_winex11_XEMBED="$1"
|
||||
enable_winex11__NET_ACTIVE_WINDOW="$1"
|
||||
enable_winex11_key_translation="$1"
|
||||
enable_winex11_mouse_movements="$1"
|
||||
enable_winex11_wglShareLists="$1"
|
||||
enable_winhttp_System_Proxy_Autoconfig="$1"
|
||||
@@ -562,6 +564,9 @@ patch_enable ()
|
||||
dsound-Fast_Mixer)
|
||||
enable_dsound_Fast_Mixer="$2"
|
||||
;;
|
||||
dwmapi-DwmGetTransportAttributes)
|
||||
enable_dwmapi_DwmGetTransportAttributes="$2"
|
||||
;;
|
||||
dwrite-FontFallback)
|
||||
enable_dwrite_FontFallback="$2"
|
||||
;;
|
||||
@@ -661,9 +666,6 @@ patch_enable ()
|
||||
krnl386.exe16-Invalid_Console_Handles)
|
||||
enable_krnl386_exe16_Invalid_Console_Handles="$2"
|
||||
;;
|
||||
krnl386.exe16-_lclose16)
|
||||
enable_krnl386_exe16__lclose16="$2"
|
||||
;;
|
||||
libs-Debug_Channel)
|
||||
enable_libs_Debug_Channel="$2"
|
||||
;;
|
||||
@@ -1048,6 +1050,9 @@ patch_enable ()
|
||||
taskmgr-Memory_Usage)
|
||||
enable_taskmgr_Memory_Usage="$2"
|
||||
;;
|
||||
ucrtbase-_o_)
|
||||
enable_ucrtbase__o_="$2"
|
||||
;;
|
||||
uianimation-stubs)
|
||||
enable_uianimation_stubs="$2"
|
||||
;;
|
||||
@@ -1264,6 +1269,9 @@ patch_enable ()
|
||||
winex11-_NET_ACTIVE_WINDOW)
|
||||
enable_winex11__NET_ACTIVE_WINDOW="$2"
|
||||
;;
|
||||
winex11-key_translation)
|
||||
enable_winex11_key_translation="$2"
|
||||
;;
|
||||
winex11-mouse-movements)
|
||||
enable_winex11_mouse_movements="$2"
|
||||
;;
|
||||
@@ -3371,6 +3379,25 @@ if test "$enable_dsound_EAX" -eq 1; then
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset dwmapi-DwmGetTransportAttributes
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
# | * [#31350] T-Online Mediencenter Assistent (.NET 3.5 WPF app) installer fails ('dwmapi.dll' stubs insufficient in
|
||||
# | Vista/Win7 mode)
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * configure, configure.ac, dlls/dwmapi/dwmapi_main.c, dlls/dwmapi/tests/Makefile.in, dlls/dwmapi/tests/dwmapi.c,
|
||||
# | include/dwmapi.h, include/winerror.h
|
||||
# |
|
||||
if test "$enable_dwmapi_DwmGetTransportAttributes" -eq 1; then
|
||||
patch_apply dwmapi-DwmGetTransportAttributes/0001-dwmapi-return-DWM_E_COMPOSITIONDISABLED-instead-of-ENOTIMPL-in-DwmGetTransportAttributes.patch
|
||||
patch_apply dwmapi-DwmGetTransportAttributes/0002-dwmapi-add-initial-tests.patch
|
||||
(
|
||||
printf '%s\n' '+ { "Louis Lenders", "dwmapi: Return DWM_E_COMPOSITIONDISABLED instead of E_NOTIMPL in DwmGetTransportAttributes.", 1 },';
|
||||
printf '%s\n' '+ { "Louis Lenders", "dwampi: Add initial tests.", 1 },';
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset dwrite-FontFallback
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
@@ -3987,21 +4014,6 @@ if test "$enable_krnl386_exe16_Invalid_Console_Handles" -eq 1; then
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset krnl386.exe16-_lclose16
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
# | * [#19184] Do not reassign default handles after they got closed
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/krnl386.exe16/file.c
|
||||
# |
|
||||
if test "$enable_krnl386_exe16__lclose16" -eq 1; then
|
||||
patch_apply krnl386.exe16-_lclose16/0001-krnl386.exe16-Do-not-reassign-default-handles-after-.patch
|
||||
(
|
||||
printf '%s\n' '+ { "Michael MĂĽller", "krnl386.exe16: Do not reassign default handles after they got closed.", 1 },';
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset libs-Debug_Channel
|
||||
# |
|
||||
# | Modified files:
|
||||
@@ -6183,6 +6195,24 @@ if test "$enable_taskmgr_Memory_Usage" -eq 1; then
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset ucrtbase-_o_
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
# | * [#44469] Multiple apps using Windows 10 v1507+ UCRT crash due to multiple missing api-ms-win-crt-
|
||||
# | private-l1-1-0.dll._o__xxx stubs/forwards (Win10 DISM pkgmgr.exe, MS DirectX Shader Compiler)
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/api-ms-win-crt-private-l1-1-0/api-ms-win-crt-private-l1-1-0.spec, dlls/ucrtbase/ucrtbase.spec
|
||||
# |
|
||||
if test "$enable_ucrtbase__o_" -eq 1; then
|
||||
patch_apply ucrtbase-_o_/0001-api-ms-win-crt-private-l1-1-0-Update-to-10.0.17134.1.patch
|
||||
patch_apply ucrtbase-_o_/0002-ucrtbase-Forward-a-few-functions-for-dxil.dll-and-pk.patch
|
||||
(
|
||||
printf '%s\n' '+ { "Fabian Maurer", "api-ms-win-crt-private-l1-1-0: Update to 10.0.17134.12 (WinBuild.160101.0800).", 1 },';
|
||||
printf '%s\n' '+ { "Fabian Maurer", "ucrtbase: Forward a few functions for dxil.dll and pkgmgr.exe.", 1 },';
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset uianimation-stubs
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
@@ -6446,12 +6476,12 @@ fi
|
||||
# | * [#46215] File Open Dialog fails to set focus to Filename text box
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/user32/dialog.c
|
||||
# | * dlls/user32/dialog.c, dlls/user32/tests/dialog.c
|
||||
# |
|
||||
if test "$enable_user32_dialog_focus" -eq 1; then
|
||||
patch_apply user32-dialog_focus/0001-user32-Dont-reset-focus-if-current-control-is-a-chil.patch
|
||||
(
|
||||
printf '%s\n' '+ { "Alistair Leslie-Hughes", "user32: Dont reset focus if current control is a child of our parent.", 1 },';
|
||||
printf '%s\n' '+ { "Alistair Leslie-Hughes", "user32: Dont reset focus if current dialog is a child.", 2 },';
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
@@ -7193,18 +7223,13 @@ fi
|
||||
# | * [#4836] Various improvements for wineps.drv for Adobe PageMaker compatibility
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/gdi32/printdrv.c, dlls/gdi32/tests/dc.c, dlls/wineps.drv/download.c, dlls/wineps.drv/escape.c,
|
||||
# | dlls/wineps.drv/psdrv.h
|
||||
# | * dlls/gdi32/tests/dc.c, dlls/wineps.drv/download.c, dlls/wineps.drv/escape.c, dlls/wineps.drv/psdrv.h
|
||||
# |
|
||||
if test "$enable_wineps_drv_PostScript_Fixes" -eq 1; then
|
||||
patch_apply wineps.drv-PostScript_Fixes/0001-gdi32-tests-Add-a-simple-test-for-printing-to-a-Post.patch
|
||||
patch_apply wineps.drv-PostScript_Fixes/0002-gdi32-Trace-full-contents-of-DOCINFO-in-StartDoc.patch
|
||||
patch_apply wineps.drv-PostScript_Fixes/0003-wineps.drv-Add-stubs-for-escapes-required-by-Adobe-P.patch
|
||||
patch_apply wineps.drv-PostScript_Fixes/0004-wineps.drv-Add-support-for-GETFACENAME-and-DOWNLOADF.patch
|
||||
patch_apply wineps.drv-PostScript_Fixes/0005-wineps.drv-PostScript-header-should-be-written-by-St.patch
|
||||
(
|
||||
printf '%s\n' '+ { "Dmitry Timoshkov", "gdi32/tests: Add a simple test for printing to a PostScript device.", 1 },';
|
||||
printf '%s\n' '+ { "Dmitry Timoshkov", "gdi32: Trace full contents of DOCINFO in StartDoc.", 1 },';
|
||||
printf '%s\n' '+ { "Dmitry Timoshkov", "wineps.drv: Add stubs for escapes required by Adobe PageMaker.", 1 },';
|
||||
printf '%s\n' '+ { "Dmitry Timoshkov", "wineps.drv: Add support for GETFACENAME and DOWNLOADFACE escapes.", 1 },';
|
||||
printf '%s\n' '+ { "Dmitry Timoshkov", "wineps.drv: PostScript header should be written by StartDoc instead of StartPage.", 1 },';
|
||||
@@ -7404,6 +7429,25 @@ if test "$enable_winex11_XEMBED" -eq 1; then
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset winex11-key_translation
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
# | * [#30984] Improve key translation.
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/winex11.drv/keyboard.c
|
||||
# |
|
||||
if test "$enable_winex11_key_translation" -eq 1; then
|
||||
patch_apply winex11-key_translation/0001-winex11-Match-keyboard-in-Unicode.patch
|
||||
patch_apply winex11-key_translation/0002-winex11-Fix-more-key-translation.patch
|
||||
patch_apply winex11-key_translation/0003-winex11.drv-Fix-main-Russian-keyboard-layout.patch
|
||||
(
|
||||
printf '%s\n' '+ { "Ken Thomases", "winex11: Match keyboard in Unicode.", 1 },';
|
||||
printf '%s\n' '+ { "Philippe Valembois", "winex11: Fix more key translation.", 1 },';
|
||||
printf '%s\n' '+ { "Ondrej Kraus", "winex11.drv: Fix main Russian keyboard layout.", 1 },';
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset winex11-mouse-movements
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
@@ -7525,12 +7569,14 @@ if test "$enable_wintab32_improvements" -eq 1; then
|
||||
patch_apply wintab32-improvements/0003-winex11-Handle-negative-orAltitude-values.patch
|
||||
patch_apply wintab32-improvements/0004-winex11.drv-Support-multiplex-categories-WTI_DSCTXS-.patch
|
||||
patch_apply wintab32-improvements/0005-winex11-Support-WTI_STATUS-in-WTInfo.patch
|
||||
patch_apply wintab32-improvements/0006-winex11-Use-active-owner-when-sending-messages.patch
|
||||
(
|
||||
printf '%s\n' '+ { "Eriks Dobelis", "winex11: Implement PK_CHANGE for wintab.", 1 },';
|
||||
printf '%s\n' '+ { "Alistair Leslie-Hughes", "wintab32: Set lcSysExtX/Y for the first index of WTI_DDCTXS.", 1 },';
|
||||
printf '%s\n' '+ { "Alistair Leslie-Hughes", "winex11: Handle negative orAltitude values.", 1 },';
|
||||
printf '%s\n' '+ { "Alistair Leslie-Hughes", "winex11.drv: Support multiplex categories WTI_DSCTXS and WTI_DDCTXS.", 1 },';
|
||||
printf '%s\n' '+ { "Alistair Leslie-Hughes", "winex11: Support WTI_STATUS in WTInfo.", 1 },';
|
||||
printf '%s\n' '+ { "Robert Walker", "winex11: Use active owner when sending messages.", 1 },';
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
|
@@ -0,0 +1,171 @@
|
||||
From 9113a99bada07a5482c25c86bcb309e45d584b5b Mon Sep 17 00:00:00 2001
|
||||
From: Fabian Maurer <dark.shadow4@web.de>
|
||||
Date: Sun, 2 Dec 2018 15:56:07 +0100
|
||||
Subject: [PATCH 1/2] api-ms-win-crt-private-l1-1-0: Update to 10.0.17134.12
|
||||
(WinBuild.160101.0800)
|
||||
|
||||
Signed-off-by: Fabian Maurer <dark.shadow4@web.de>
|
||||
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
|
||||
---
|
||||
.../api-ms-win-crt-private-l1-1-0.spec | 31 ++++++++++++++++++-
|
||||
1 file changed, 30 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/dlls/api-ms-win-crt-private-l1-1-0/api-ms-win-crt-private-l1-1-0.spec b/dlls/api-ms-win-crt-private-l1-1-0/api-ms-win-crt-private-l1-1-0.spec
|
||||
index 60a9258cd1..9bddd3d98b 100644
|
||||
--- a/dlls/api-ms-win-crt-private-l1-1-0/api-ms-win-crt-private-l1-1-0.spec
|
||||
+++ b/dlls/api-ms-win-crt-private-l1-1-0/api-ms-win-crt-private-l1-1-0.spec
|
||||
@@ -15,6 +15,7 @@
|
||||
@ stub __BuildCatchObject
|
||||
@ stub __BuildCatchObjectHelper
|
||||
@ stdcall -arch=x86_64 __C_specific_handler(ptr long ptr ptr) ucrtbase.__C_specific_handler
|
||||
+@ stub __C_specific_handler_noexcept
|
||||
@ cdecl -arch=i386,x86_64,arm,arm64 __CxxDetectRethrow(ptr) ucrtbase.__CxxDetectRethrow
|
||||
@ cdecl -arch=i386,x86_64,arm,arm64 __CxxExceptionFilter(ptr ptr long ptr) ucrtbase.__CxxExceptionFilter
|
||||
@ cdecl -arch=i386,x86_64,arm,arm64 -norelay __CxxFrameHandler(ptr ptr ptr ptr) ucrtbase.__CxxFrameHandler
|
||||
@@ -44,6 +45,7 @@
|
||||
@ stub __report_gsfailure
|
||||
@ cdecl __std_exception_copy(ptr ptr) ucrtbase.__std_exception_copy
|
||||
@ cdecl __std_exception_destroy(ptr) ucrtbase.__std_exception_destroy
|
||||
+@ stub __std_terminate
|
||||
@ cdecl __std_type_info_compare(ptr ptr) ucrtbase.__std_type_info_compare
|
||||
@ cdecl __std_type_info_destroy_list(ptr) ucrtbase.__std_type_info_destroy_list
|
||||
@ cdecl __std_type_info_hash(ptr) ucrtbase.__std_type_info_hash
|
||||
@@ -51,6 +53,7 @@
|
||||
@ cdecl __unDName(ptr str long ptr ptr long) ucrtbase.__unDName
|
||||
@ cdecl __unDNameEx(ptr str long ptr ptr ptr long) ucrtbase.__unDNameEx
|
||||
@ cdecl __uncaught_exception() ucrtbase.__uncaught_exception
|
||||
+@ stub __uncaught_exceptions
|
||||
@ cdecl -arch=i386 -norelay _chkesp() ucrtbase._chkesp
|
||||
@ cdecl -arch=i386 _except_handler2(ptr ptr ptr ptr) ucrtbase._except_handler2
|
||||
@ cdecl -arch=i386 _except_handler3(ptr ptr ptr ptr) ucrtbase._except_handler3
|
||||
@@ -87,6 +90,10 @@
|
||||
@ stub _o__W_Getmonths
|
||||
@ stub _o__W_Gettnames
|
||||
@ stub _o__Wcsftime
|
||||
+@ stub _o____lc_codepage_func
|
||||
+@ stub _o____lc_collate_cp_func
|
||||
+@ stub _o____lc_locale_name_func
|
||||
+@ stub _o____mb_cur_max_func
|
||||
@ stub _o___acrt_iob_func
|
||||
@ stub _o___conio_common_vcprintf
|
||||
@ stub _o___conio_common_vcprintf_p
|
||||
@@ -135,6 +142,10 @@
|
||||
@ stub _o___p__wpgmptr
|
||||
@ stub _o___pctype_func
|
||||
@ stub _o___pwctype_func
|
||||
+@ stub _o___std_exception_copy
|
||||
+@ stub _o___std_exception_destroy
|
||||
+@ stub _o___std_type_info_destroy_list
|
||||
+@ stub _o___std_type_info_name
|
||||
@ stub _o___stdio_common_vfprintf
|
||||
@ stub _o___stdio_common_vfprintf_p
|
||||
@ stub _o___stdio_common_vfprintf_s
|
||||
@@ -184,6 +195,7 @@
|
||||
@ stub _o__cabs
|
||||
@ stub _o__callnewh
|
||||
@ stub _o__calloc_base
|
||||
+@ stub _o__cexit
|
||||
@ stub _o__cgets
|
||||
@ stub _o__cgets_s
|
||||
@ stub _o__cgetws
|
||||
@@ -195,11 +207,15 @@
|
||||
@ stub _o__chsize_s
|
||||
@ stub _o__close
|
||||
@ stub _o__commit
|
||||
+@ stub _o__configthreadlocale
|
||||
+@ stub _o__configure_narrow_argv
|
||||
@ stub _o__configure_wide_argv
|
||||
+@ stub _o__controlfp_s
|
||||
@ stub _o__cputs
|
||||
@ stub _o__cputws
|
||||
@ stub _o__creat
|
||||
@ stub _o__create_locale
|
||||
+@ stub _o__crt_atexit
|
||||
@ stub _o__ctime32_s
|
||||
@ stub _o__ctime64_s
|
||||
@ stub _o__cwait
|
||||
@@ -231,6 +247,7 @@
|
||||
@ stub _o__execve
|
||||
@ stub _o__execvp
|
||||
@ stub _o__execvpe
|
||||
+@ stub _o__exit
|
||||
@ stub _o__expand
|
||||
@ stub _o__fclose_nolock
|
||||
@ stub _o__fcloseall
|
||||
@@ -301,6 +318,8 @@
|
||||
@ stub _o__get_errno
|
||||
@ stub _o__get_fmode
|
||||
@ stub _o__get_heap_handle
|
||||
+@ stub _o__get_initial_narrow_environment
|
||||
+@ stub _o__get_initial_wide_environment
|
||||
@ stub _o__get_invalid_parameter_handler
|
||||
@ stub _o__get_narrow_winmain_command_line
|
||||
@ stub _o__get_osfhandle
|
||||
@@ -345,7 +364,9 @@
|
||||
@ stub _o__i64toa_s
|
||||
@ stub _o__i64tow
|
||||
@ stub _o__i64tow_s
|
||||
+@ stub _o__initialize_narrow_environment
|
||||
@ cdecl _o__initialize_onexit_table(ptr) ucrtbase._o__initialize_onexit_table
|
||||
+@ stub _o__initialize_wide_environment
|
||||
@ stub _o__invalid_parameter_noinfo
|
||||
@ stub _o__invalid_parameter_noinfo_noreturn
|
||||
@ stub _o__isatty
|
||||
@@ -617,6 +638,7 @@
|
||||
@ stub _o__pclose
|
||||
@ stub _o__pipe
|
||||
@ stub _o__popen
|
||||
+@ stub _o__purecall
|
||||
@ stub _o__putc_nolock
|
||||
@ stub _o__putch
|
||||
@ stub _o__putch_nolock
|
||||
@@ -638,9 +660,13 @@
|
||||
@ stub _o__scalbf
|
||||
@ stub _o__searchenv
|
||||
@ stub _o__searchenv_s
|
||||
+@ stub _o__seh_filter_dll
|
||||
+@ stub _o__seh_filter_exe
|
||||
@ stub _o__set_abort_behavior
|
||||
+@ stub _o__set_app_type
|
||||
@ stub _o__set_doserrno
|
||||
@ stub _o__set_errno
|
||||
+@ stub _o__set_fmode
|
||||
@ stub _o__set_invalid_parameter_handler
|
||||
@ stub _o__set_new_handler
|
||||
@ stub _o__set_new_mode
|
||||
@@ -910,6 +936,7 @@
|
||||
@ stub _o_erfcl
|
||||
@ stub _o_erff
|
||||
@ stub _o_erfl
|
||||
+@ stub _o_exit
|
||||
@ stub _o_exp
|
||||
@ stub _o_exp2
|
||||
@ stub _o_exp2f
|
||||
@@ -1026,7 +1053,7 @@
|
||||
@ stub _o_mbstowcs
|
||||
@ stub _o_mbstowcs_s
|
||||
@ stub _o_mbtowc
|
||||
-@ stub _o_memset
|
||||
+@ stub _o_memcpy_s
|
||||
@ stub _o_modf
|
||||
@ stub _o_modff
|
||||
@ stub _o_nan
|
||||
@@ -1061,6 +1088,7 @@
|
||||
@ stub _o_remquo
|
||||
@ stub _o_remquof
|
||||
@ stub _o_remquol
|
||||
+@ stub _o_rename
|
||||
@ stub _o_rewind
|
||||
@ stub _o_rint
|
||||
@ stub _o_rintf
|
||||
@@ -1076,6 +1104,7 @@
|
||||
@ stub _o_scalbnl
|
||||
@ stub _o_set_terminate
|
||||
@ stub _o_setbuf
|
||||
+@ stub _o_setlocale
|
||||
@ stub _o_setvbuf
|
||||
@ stub _o_sin
|
||||
@ stub _o_sinf
|
||||
--
|
||||
2.19.2
|
||||
|
@@ -0,0 +1,265 @@
|
||||
From 0b5e33a0b9640085f0ca12efab9718189f0061bb Mon Sep 17 00:00:00 2001
|
||||
From: Fabian Maurer <dark.shadow4@web.de>
|
||||
Date: Sun, 2 Dec 2018 15:56:08 +0100
|
||||
Subject: [PATCH 2/2] ucrtbase: Forward a few functions for dxil.dll and
|
||||
pkgmgr.exe
|
||||
|
||||
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=44469
|
||||
Signed-off-by: Fabian Maurer <dark.shadow4@web.de>
|
||||
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
|
||||
---
|
||||
.../api-ms-win-crt-private-l1-1-0.spec | 38 +++++++++----------
|
||||
dlls/ucrtbase/ucrtbase.spec | 38 +++++++++----------
|
||||
2 files changed, 38 insertions(+), 38 deletions(-)
|
||||
|
||||
diff --git a/dlls/api-ms-win-crt-private-l1-1-0/api-ms-win-crt-private-l1-1-0.spec b/dlls/api-ms-win-crt-private-l1-1-0/api-ms-win-crt-private-l1-1-0.spec
|
||||
index 9bddd3d98b..77be3a5515 100644
|
||||
--- a/dlls/api-ms-win-crt-private-l1-1-0/api-ms-win-crt-private-l1-1-0.spec
|
||||
+++ b/dlls/api-ms-win-crt-private-l1-1-0/api-ms-win-crt-private-l1-1-0.spec
|
||||
@@ -127,11 +127,11 @@
|
||||
@ stub _o___libm_sse2_sinf
|
||||
@ stub _o___libm_sse2_tan
|
||||
@ stub _o___libm_sse2_tanf
|
||||
-@ stub _o___p___argc
|
||||
+@ cdecl _o___p___argc() ucrtbase._o___p___argc
|
||||
@ stub _o___p___argv
|
||||
-@ stub _o___p___wargv
|
||||
+@ cdecl _o___p___wargv() ucrtbase._o___p___wargv
|
||||
@ stub _o___p__acmdln
|
||||
-@ stub _o___p__commode
|
||||
+@ cdecl _o___p__commode() ucrtbase._o___p__commode
|
||||
@ stub _o___p__environ
|
||||
@ stub _o___p__fmode
|
||||
@ stub _o___p__mbcasemap
|
||||
@@ -144,7 +144,7 @@
|
||||
@ stub _o___pwctype_func
|
||||
@ stub _o___std_exception_copy
|
||||
@ stub _o___std_exception_destroy
|
||||
-@ stub _o___std_type_info_destroy_list
|
||||
+@ cdecl _o___std_type_info_destroy_list(ptr) ucrtbase._o___std_type_info_destroy_list
|
||||
@ stub _o___std_type_info_name
|
||||
@ stub _o___stdio_common_vfprintf
|
||||
@ stub _o___stdio_common_vfprintf_p
|
||||
@@ -207,15 +207,15 @@
|
||||
@ stub _o__chsize_s
|
||||
@ stub _o__close
|
||||
@ stub _o__commit
|
||||
-@ stub _o__configthreadlocale
|
||||
+@ cdecl _o__configthreadlocale(long) ucrtbase._o__configthreadlocale
|
||||
@ stub _o__configure_narrow_argv
|
||||
-@ stub _o__configure_wide_argv
|
||||
-@ stub _o__controlfp_s
|
||||
+@ cdecl _o__configure_wide_argv(long) ucrtbase._o__configure_wide_argv
|
||||
+@ cdecl _o__controlfp_s(ptr long long) ucrtbase._o__controlfp_s
|
||||
@ stub _o__cputs
|
||||
@ stub _o__cputws
|
||||
@ stub _o__creat
|
||||
@ stub _o__create_locale
|
||||
-@ stub _o__crt_atexit
|
||||
+@ cdecl _o__crt_atexit(ptr) ucrtbase._o__crt_atexit
|
||||
@ stub _o__ctime32_s
|
||||
@ stub _o__ctime64_s
|
||||
@ stub _o__cwait
|
||||
@@ -319,7 +319,7 @@
|
||||
@ stub _o__get_fmode
|
||||
@ stub _o__get_heap_handle
|
||||
@ stub _o__get_initial_narrow_environment
|
||||
-@ stub _o__get_initial_wide_environment
|
||||
+@ cdecl _o__get_initial_wide_environment() ucrtbase._o__get_initial_wide_environment
|
||||
@ stub _o__get_invalid_parameter_handler
|
||||
@ stub _o__get_narrow_winmain_command_line
|
||||
@ stub _o__get_osfhandle
|
||||
@@ -366,7 +366,7 @@
|
||||
@ stub _o__i64tow_s
|
||||
@ stub _o__initialize_narrow_environment
|
||||
@ cdecl _o__initialize_onexit_table(ptr) ucrtbase._o__initialize_onexit_table
|
||||
-@ stub _o__initialize_wide_environment
|
||||
+@ cdecl _o__initialize_wide_environment() ucrtbase._o__initialize_wide_environment
|
||||
@ stub _o__invalid_parameter_noinfo
|
||||
@ stub _o__invalid_parameter_noinfo_noreturn
|
||||
@ stub _o__isatty
|
||||
@@ -660,16 +660,16 @@
|
||||
@ stub _o__scalbf
|
||||
@ stub _o__searchenv
|
||||
@ stub _o__searchenv_s
|
||||
-@ stub _o__seh_filter_dll
|
||||
-@ stub _o__seh_filter_exe
|
||||
+@ cdecl _o__seh_filter_dll(long ptr) ucrtbase._o__seh_filter_dll
|
||||
+@ cdecl _o__seh_filter_exe(long ptr) ucrtbase._o__seh_filter_exe
|
||||
@ stub _o__set_abort_behavior
|
||||
-@ stub _o__set_app_type
|
||||
+@ cdecl _o__set_app_type(long) ucrtbase._o__set_app_type
|
||||
@ stub _o__set_doserrno
|
||||
@ stub _o__set_errno
|
||||
-@ stub _o__set_fmode
|
||||
+@ cdecl _o__set_fmode(long) ucrtbase._o__set_fmode
|
||||
@ stub _o__set_invalid_parameter_handler
|
||||
@ stub _o__set_new_handler
|
||||
-@ stub _o__set_new_mode
|
||||
+@ cdecl _o__set_new_mode(long) ucrtbase._o__set_new_mode
|
||||
@ stub _o__set_thread_local_invalid_parameter_handler
|
||||
@ stub _o__seterrormode
|
||||
@ stub _o__setmbcp
|
||||
@@ -919,7 +919,7 @@
|
||||
@ stub _o_bsearch
|
||||
@ stub _o_bsearch_s
|
||||
@ stub _o_btowc
|
||||
-@ stub _o_calloc
|
||||
+@ cdecl _o_calloc(long long) ucrtbase._o_calloc
|
||||
@ stub _o_cbrt
|
||||
@ stub _o_cbrtf
|
||||
@ stub _o_ceil
|
||||
@@ -936,7 +936,7 @@
|
||||
@ stub _o_erfcl
|
||||
@ stub _o_erff
|
||||
@ stub _o_erfl
|
||||
-@ stub _o_exit
|
||||
+@ cdecl _o_exit(long) ucrtbase._o_exit
|
||||
@ stub _o_exp
|
||||
@ stub _o_exp2
|
||||
@ stub _o_exp2f
|
||||
@@ -967,7 +967,7 @@
|
||||
@ stub _o_fputws
|
||||
@ stub _o_fread
|
||||
@ stub _o_fread_s
|
||||
-@ stub _o_free
|
||||
+@ cdecl _o_free(ptr) ucrtbase._o_free
|
||||
@ stub _o_freopen
|
||||
@ stub _o_freopen_s
|
||||
@ stub _o_frexp
|
||||
@@ -1142,7 +1142,7 @@
|
||||
@ stub _o_tmpfile_s
|
||||
@ stub _o_tmpnam_s
|
||||
@ stub _o_tolower
|
||||
-@ stub _o_toupper
|
||||
+@ cdecl _o_toupper(long) ucrtbase._o_toupper
|
||||
@ stub _o_towlower
|
||||
@ stub _o_towupper
|
||||
@ stub _o_ungetc
|
||||
diff --git a/dlls/ucrtbase/ucrtbase.spec b/dlls/ucrtbase/ucrtbase.spec
|
||||
index 470979c24f..d3f72e891c 100644
|
||||
--- a/dlls/ucrtbase/ucrtbase.spec
|
||||
+++ b/dlls/ucrtbase/ucrtbase.spec
|
||||
@@ -791,11 +791,11 @@
|
||||
@ stub _o___libm_sse2_sinf
|
||||
@ stub _o___libm_sse2_tan
|
||||
@ stub _o___libm_sse2_tanf
|
||||
-@ stub _o___p___argc
|
||||
+@ cdecl _o___p___argc() MSVCRT___p___argc
|
||||
@ stub _o___p___argv
|
||||
-@ stub _o___p___wargv
|
||||
+@ cdecl _o___p___wargv() MSVCRT___p___wargv
|
||||
@ stub _o___p__acmdln
|
||||
-@ stub _o___p__commode
|
||||
+@ cdecl _o___p__commode() __p__commode
|
||||
@ stub _o___p__environ
|
||||
@ stub _o___p__fmode
|
||||
@ stub _o___p__mbcasemap
|
||||
@@ -808,7 +808,7 @@
|
||||
@ stub _o___pwctype_func
|
||||
@ stub _o___std_exception_copy
|
||||
@ stub _o___std_exception_destroy
|
||||
-@ stub _o___std_type_info_destroy_list
|
||||
+@ cdecl _o___std_type_info_destroy_list(ptr) MSVCRT_type_info_destroy_list
|
||||
@ stub _o___std_type_info_name
|
||||
@ stub _o___stdio_common_vfprintf
|
||||
@ stub _o___stdio_common_vfprintf_p
|
||||
@@ -871,15 +871,15 @@
|
||||
@ stub _o__chsize_s
|
||||
@ stub _o__close
|
||||
@ stub _o__commit
|
||||
-@ stub _o__configthreadlocale
|
||||
+@ cdecl _o__configthreadlocale(long) _configthreadlocale
|
||||
@ stub _o__configure_narrow_argv
|
||||
-@ stub _o__configure_wide_argv
|
||||
-@ stub _o__controlfp_s
|
||||
+@ cdecl _o__configure_wide_argv(long) _configure_wide_argv
|
||||
+@ cdecl _o__controlfp_s(ptr long long) _controlfp_s
|
||||
@ stub _o__cputs
|
||||
@ stub _o__cputws
|
||||
@ stub _o__creat
|
||||
@ stub _o__create_locale
|
||||
-@ stub _o__crt_atexit
|
||||
+@ cdecl _o__crt_atexit(ptr) MSVCRT__crt_atexit
|
||||
@ stub _o__ctime32_s
|
||||
@ stub _o__ctime64_s
|
||||
@ stub _o__cwait
|
||||
@@ -983,7 +983,7 @@
|
||||
@ stub _o__get_fmode
|
||||
@ stub _o__get_heap_handle
|
||||
@ stub _o__get_initial_narrow_environment
|
||||
-@ stub _o__get_initial_wide_environment
|
||||
+@ cdecl _o__get_initial_wide_environment() _get_initial_wide_environment
|
||||
@ stub _o__get_invalid_parameter_handler
|
||||
@ stub _o__get_narrow_winmain_command_line
|
||||
@ stub _o__get_osfhandle
|
||||
@@ -1030,7 +1030,7 @@
|
||||
@ stub _o__i64tow_s
|
||||
@ stub _o__initialize_narrow_environment
|
||||
@ cdecl _o__initialize_onexit_table(ptr) MSVCRT__initialize_onexit_table
|
||||
-@ stub _o__initialize_wide_environment
|
||||
+@ cdecl _o__initialize_wide_environment() _initialize_wide_environment
|
||||
@ stub _o__invalid_parameter_noinfo
|
||||
@ stub _o__invalid_parameter_noinfo_noreturn
|
||||
@ stub _o__isatty
|
||||
@@ -1324,16 +1324,16 @@
|
||||
@ stub _o__scalbf
|
||||
@ stub _o__searchenv
|
||||
@ stub _o__searchenv_s
|
||||
-@ stub _o__seh_filter_dll
|
||||
-@ stub _o__seh_filter_exe
|
||||
+@ cdecl _o__seh_filter_dll(long ptr) __CppXcptFilter
|
||||
+@ cdecl _o__seh_filter_exe(long ptr) _XcptFilter
|
||||
@ stub _o__set_abort_behavior
|
||||
-@ stub _o__set_app_type
|
||||
+@ cdecl _o__set_app_type(long) MSVCRT___set_app_type
|
||||
@ stub _o__set_doserrno
|
||||
@ stub _o__set_errno
|
||||
-@ stub _o__set_fmode
|
||||
+@ cdecl _o__set_fmode(long) MSVCRT__set_fmode
|
||||
@ stub _o__set_invalid_parameter_handler
|
||||
@ stub _o__set_new_handler
|
||||
-@ stub _o__set_new_mode
|
||||
+@ cdecl _o__set_new_mode(long) MSVCRT__set_new_mode
|
||||
@ stub _o__set_thread_local_invalid_parameter_handler
|
||||
@ stub _o__seterrormode
|
||||
@ stub _o__setmbcp
|
||||
@@ -1583,7 +1583,7 @@
|
||||
@ stub _o_bsearch
|
||||
@ stub _o_bsearch_s
|
||||
@ stub _o_btowc
|
||||
-@ stub _o_calloc
|
||||
+@ cdecl _o_calloc(long long) MSVCRT_calloc
|
||||
@ stub _o_cbrt
|
||||
@ stub _o_cbrtf
|
||||
@ stub _o_ceil
|
||||
@@ -1600,7 +1600,7 @@
|
||||
@ stub _o_erfcl
|
||||
@ stub _o_erff
|
||||
@ stub _o_erfl
|
||||
-@ stub _o_exit
|
||||
+@ cdecl _o_exit(long) MSVCRT_exit
|
||||
@ stub _o_exp
|
||||
@ stub _o_exp2
|
||||
@ stub _o_exp2f
|
||||
@@ -1631,7 +1631,7 @@
|
||||
@ stub _o_fputws
|
||||
@ stub _o_fread
|
||||
@ stub _o_fread_s
|
||||
-@ stub _o_free
|
||||
+@ cdecl _o_free(ptr) MSVCRT_free
|
||||
@ stub _o_freopen
|
||||
@ stub _o_freopen_s
|
||||
@ stub _o_frexp
|
||||
@@ -1807,7 +1807,7 @@
|
||||
@ stub _o_tmpfile_s
|
||||
@ stub _o_tmpnam_s
|
||||
@ stub _o_tolower
|
||||
-@ stub _o_toupper
|
||||
+@ cdecl _o_toupper(long) MSVCRT__toupper
|
||||
@ stub _o_towlower
|
||||
@ stub _o_towupper
|
||||
@ stub _o_ungetc
|
||||
--
|
||||
2.19.2
|
||||
|
1
patches/ucrtbase-_o_/definition
Normal file
1
patches/ucrtbase-_o_/definition
Normal file
@@ -0,0 +1 @@
|
||||
Fixes: [44469] Multiple apps using Windows 10 v1507+ UCRT crash due to multiple missing api-ms-win-crt-private-l1-1-0.dll._o__xxx stubs/forwards (Win10 DISM pkgmgr.exe, MS DirectX Shader Compiler)
|
@@ -1,35 +1,127 @@
|
||||
From 1e118030e5b1da7bbfa4c03548b15beb137497f5 Mon Sep 17 00:00:00 2001
|
||||
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
|
||||
Date: Thu, 6 Dec 2018 15:01:54 +1100
|
||||
Subject: [PATCH] user32: Dont reset focus if current control is a child of our
|
||||
parent
|
||||
Subject: [PATCH v2] user32: Dont reset focus if current dialog is a child.
|
||||
Message-Id: <PS2P216MB0066A5295ACFD65599E9D23E93A10@PS2P216MB0066.KORP216.PROD.OUTLOOK.COM>
|
||||
Date: Fri, 14 Dec 2018 04:00:43 +0000
|
||||
|
||||
Regression of 44f89322ba8825a8e4851aaaf7de89910701ca75
|
||||
|
||||
The standard File Open Dialog, creates an empty WS_EX_CONTROLPARENT
|
||||
child dialog which shouldn't receive focus.
|
||||
|
||||
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=46215
|
||||
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
|
||||
---
|
||||
dlls/user32/dialog.c | 11 ++++++++++-
|
||||
1 file changed, 10 insertions(+), 1 deletion(-)
|
||||
dlls/user32/dialog.c | 5 +++-
|
||||
dlls/user32/tests/dialog.c | 72 ++++++++++++++++++++++++++++++++++++++++++++++
|
||||
2 files changed, 76 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/dlls/user32/dialog.c b/dlls/user32/dialog.c
|
||||
index 0b33a57..0d98d0a 100644
|
||||
index 0b33a57..72e6eee 100644
|
||||
--- a/dlls/user32/dialog.c
|
||||
+++ b/dlls/user32/dialog.c
|
||||
@@ -692,7 +692,16 @@ static HWND DIALOG_CreateIndirect( HINSTANCE hInst, LPCVOID dlgTemplate,
|
||||
@@ -692,7 +692,10 @@ static HWND DIALOG_CreateIndirect( HINSTANCE hInst, LPCVOID dlgTemplate,
|
||||
SetFocus( focus );
|
||||
}
|
||||
else
|
||||
- SetFocus( hwnd );
|
||||
+ {
|
||||
+ if (template.style & WS_CHILD)
|
||||
+ {
|
||||
+ HWND hParent = GetParent(hwnd);
|
||||
+ if (!IsChild(hParent, GetFocus()))
|
||||
+ SetFocus( hwnd );
|
||||
+ }
|
||||
+ else
|
||||
+ if (!(template.style & WS_CHILD))
|
||||
+ SetFocus( hwnd );
|
||||
+ }
|
||||
}
|
||||
}
|
||||
|
||||
diff --git a/dlls/user32/tests/dialog.c b/dlls/user32/tests/dialog.c
|
||||
index 631f3d3..ff6052f 100644
|
||||
--- a/dlls/user32/tests/dialog.c
|
||||
+++ b/dlls/user32/tests/dialog.c
|
||||
@@ -907,6 +907,55 @@ static INT_PTR CALLBACK focusDlgWinProc (HWND hDlg, UINT uiMsg, WPARAM wParam,
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
+static INT_PTR CALLBACK EmptyProcUserTemplate(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
+{
|
||||
+ switch(uMsg) {
|
||||
+ case WM_INITDIALOG:
|
||||
+ return TRUE;
|
||||
+ }
|
||||
+ return FALSE;
|
||||
+}
|
||||
+
|
||||
+HWND hChildDlg = NULL;
|
||||
+static INT_PTR CALLBACK focusChildDlgWinProc (HWND hwnd, UINT uiMsg, WPARAM wParam,
|
||||
+ LPARAM lParam)
|
||||
+{
|
||||
+ switch (uiMsg)
|
||||
+ {
|
||||
+ case WM_INITDIALOG:
|
||||
+ {
|
||||
+ RECT rectHwnd;
|
||||
+ struct {
|
||||
+ DLGTEMPLATE tmplate;
|
||||
+ WORD menu,class,title;
|
||||
+ } temp;
|
||||
+
|
||||
+ SetFocus( GetDlgItem(hwnd, 200) );
|
||||
+
|
||||
+ GetClientRect(hwnd,&rectHwnd);
|
||||
+ temp.tmplate.style = WS_CHILD | WS_CLIPSIBLINGS | WS_VISIBLE | DS_CONTROL | DS_3DLOOK;
|
||||
+ temp.tmplate.dwExtendedStyle = 0;
|
||||
+ temp.tmplate.cdit = 0;
|
||||
+ temp.tmplate.x = 0;
|
||||
+ temp.tmplate.y = 0;
|
||||
+ temp.tmplate.cx = 0;
|
||||
+ temp.tmplate.cy = 0;
|
||||
+ temp.menu = temp.class = temp.title = 0;
|
||||
+
|
||||
+ hChildDlg = CreateDialogIndirectParamA(g_hinst, &temp.tmplate,
|
||||
+ hwnd, (DLGPROC)EmptyProcUserTemplate, 0);
|
||||
+ ok(hChildDlg != 0, "Failed to create test dialog.\n");
|
||||
+
|
||||
+ return FALSE;
|
||||
+ }
|
||||
+ case WM_CLOSE:
|
||||
+ DestroyWindow(hChildDlg);
|
||||
+ return TRUE;
|
||||
+ }
|
||||
+
|
||||
+ return FALSE;
|
||||
+}
|
||||
+
|
||||
/* Helper for InitialFocusTest */
|
||||
static const char * GetHwndString(HWND hw)
|
||||
{
|
||||
@@ -1093,6 +1142,29 @@ static void test_focus(void)
|
||||
|
||||
DestroyWindow(hDlg);
|
||||
}
|
||||
+
|
||||
+ /* Test 6:
|
||||
+ * Select textbox's text on creation when WM_INITDIALOG creates a child dialog. */
|
||||
+ {
|
||||
+ HWND hDlg;
|
||||
+ HRSRC hResource;
|
||||
+ HANDLE hTemplate;
|
||||
+ DLGTEMPLATE* pTemplate;
|
||||
+ HWND edit;
|
||||
+
|
||||
+ hResource = FindResourceA(g_hinst,"FOCUS_TEST_DIALOG_3", (LPCSTR)RT_DIALOG);
|
||||
+ hTemplate = LoadResource(g_hinst, hResource);
|
||||
+ pTemplate = LockResource(hTemplate);
|
||||
+
|
||||
+ hDlg = CreateDialogIndirectParamA(g_hinst, pTemplate, NULL, focusChildDlgWinProc, 0);
|
||||
+ ok(hDlg != 0, "Failed to create test dialog.\n");
|
||||
+ edit = GetDlgItem(hDlg, 200);
|
||||
+
|
||||
+ ok(GetFocus() == edit, "Focus not set to edit, focus=%p, dialog=%p, edit=%p\n",
|
||||
+ GetFocus(), hDlg, edit);
|
||||
+
|
||||
+ DestroyWindow(hDlg);
|
||||
+ }
|
||||
}
|
||||
|
||||
static void test_GetDlgItemText(void)
|
||||
|
||||
--
|
||||
1.9.1
|
||||
|
||||
|
@@ -1,159 +0,0 @@
|
||||
From 8b546221cfb857a09dae4654efee19c8b771935e Mon Sep 17 00:00:00 2001
|
||||
From: Dmitry Timoshkov <dmitry@baikal.ru>
|
||||
Date: Wed, 13 Apr 2016 15:34:42 +0800
|
||||
Subject: gdi32/tests: Add a simple test for printing to a PostScript device.
|
||||
|
||||
---
|
||||
dlls/gdi32/tests/dc.c | 124 +++++++++++++++++++++++++++++++++++++++++++++++++-
|
||||
1 file changed, 123 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/dlls/gdi32/tests/dc.c b/dlls/gdi32/tests/dc.c
|
||||
index c9b7b31..4a50594 100644
|
||||
--- a/dlls/gdi32/tests/dc.c
|
||||
+++ b/dlls/gdi32/tests/dc.c
|
||||
@@ -2,7 +2,7 @@
|
||||
* Unit tests for dc functions
|
||||
*
|
||||
* Copyright (c) 2005 Huw Davies
|
||||
- * Copyright (c) 2005 Dmitry Timoshkov
|
||||
+ * Copyright (c) 2005,2016 Dmitry Timoshkov
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
@@ -1386,6 +1386,127 @@ static void test_printer_dc(void)
|
||||
DeleteObject( bmp );
|
||||
}
|
||||
|
||||
+static void print_something(HDC hdc)
|
||||
+{
|
||||
+ static const char psadobe[10] = "%!PS-Adobe";
|
||||
+ char buf[1024], *p;
|
||||
+ char temp_path[MAX_PATH], file_name[MAX_PATH];
|
||||
+ DOCINFOA di;
|
||||
+ DWORD ret;
|
||||
+ HANDLE hfile;
|
||||
+
|
||||
+ GetTempPathA(sizeof(temp_path), temp_path);
|
||||
+ GetTempFileNameA(temp_path, "ps", 0, file_name);
|
||||
+
|
||||
+ di.cbSize = sizeof(di);
|
||||
+ di.lpszDocName = "Let's dance";
|
||||
+ di.lpszOutput = file_name;
|
||||
+ di.lpszDatatype = NULL;
|
||||
+ di.fwType = 0;
|
||||
+ ret = StartDocA(hdc, &di);
|
||||
+ ok(ret > 0, "StartDoc failed: %d\n", ret);
|
||||
+
|
||||
+ strcpy(buf + 2, "\n% ===> before DOWNLOADHEADER <===\n");
|
||||
+ *(WORD *)buf = strlen(buf + 2);
|
||||
+ ret = Escape(hdc, POSTSCRIPT_PASSTHROUGH, 0, buf, NULL);
|
||||
+ ok(ret == *(WORD *)buf, "POSTSCRIPT_PASSTHROUGH failed: %d\n", ret);
|
||||
+
|
||||
+ strcpy(buf, "deadbeef");
|
||||
+ ret = ExtEscape(hdc, DOWNLOADHEADER, 0, NULL, sizeof(buf), buf );
|
||||
+todo_wine
|
||||
+ ok(ret == 1, "DOWNLOADHEADER failed\n");
|
||||
+todo_wine
|
||||
+ ok(strcmp(buf, "deadbeef") != 0, "DOWNLOADHEADER failed\n");
|
||||
+
|
||||
+ strcpy(buf + 2, "\n% ===> after DOWNLOADHEADER <===\n");
|
||||
+ *(WORD *)buf = strlen(buf + 2);
|
||||
+ ret = Escape(hdc, POSTSCRIPT_PASSTHROUGH, 0, buf, NULL);
|
||||
+ ok(ret == *(WORD *)buf, "POSTSCRIPT_PASSTHROUGH failed: %d\n", ret);
|
||||
+
|
||||
+ ret = EndDoc(hdc);
|
||||
+ ok(ret == 1, "EndDoc failed\n");
|
||||
+
|
||||
+ hfile = CreateFileA(file_name, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, 0);
|
||||
+ ok(hfile != INVALID_HANDLE_VALUE, "CreateFile failed\n");
|
||||
+ memset(buf, 0, sizeof(buf));
|
||||
+ ret = ReadFile(hfile, buf, sizeof(buf), &ret, NULL);
|
||||
+ ok(ret, "ReadFile failed\n");
|
||||
+ CloseHandle(hfile);
|
||||
+
|
||||
+ /* skip the HP PCL language selector */
|
||||
+ buf[sizeof(buf) - 1] = 0;
|
||||
+ p = buf;
|
||||
+ while (*p)
|
||||
+ {
|
||||
+ if (!(p[0] == 0x1b && p[1] == '%') && memcmp(p, "@PJL", 4) != 0)
|
||||
+ break;
|
||||
+
|
||||
+ p = strchr(p, '\n');
|
||||
+ if (!p) break;
|
||||
+
|
||||
+ while (*p == '\r' || *p == '\n') p++;
|
||||
+ }
|
||||
+todo_wine
|
||||
+ ok(p && !memcmp(p, psadobe, sizeof(psadobe)), "wrong signature: %.14s\n", p ? p : buf);
|
||||
+
|
||||
+ DeleteFileA(file_name);
|
||||
+}
|
||||
+
|
||||
+static void test_pscript_printer_dc(void)
|
||||
+{
|
||||
+ HDC hdc;
|
||||
+ char buf[256];
|
||||
+ DWORD query, ret;
|
||||
+
|
||||
+ hdc = create_printer_dc(100, FALSE);
|
||||
+
|
||||
+ if (!hdc) return;
|
||||
+
|
||||
+ if (!is_postscript_printer(hdc))
|
||||
+ {
|
||||
+ skip("Default printer is not a PostScript device\n");
|
||||
+ DeleteDC( hdc );
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ query = GETFACENAME;
|
||||
+ ret = Escape(hdc, QUERYESCSUPPORT, sizeof(query), (LPCSTR)&query, NULL);
|
||||
+ ok(!ret, "GETFACENAME is supported\n");
|
||||
+
|
||||
+ query = DOWNLOADFACE;
|
||||
+ ret = Escape(hdc, QUERYESCSUPPORT, sizeof(query), (LPCSTR)&query, NULL);
|
||||
+todo_wine
|
||||
+ ok(ret == 1, "DOWNLOADFACE is not supported\n");
|
||||
+
|
||||
+ query = OPENCHANNEL;
|
||||
+ ret = Escape(hdc, QUERYESCSUPPORT, sizeof(query), (LPCSTR)&query, NULL);
|
||||
+todo_wine
|
||||
+ ok(ret == 1, "OPENCHANNEL is not supported\n");
|
||||
+
|
||||
+ query = DOWNLOADHEADER;
|
||||
+ ret = Escape(hdc, QUERYESCSUPPORT, sizeof(query), (LPCSTR)&query, NULL);
|
||||
+todo_wine
|
||||
+ ok(ret == 1, "DOWNLOADHEADER is not supported\n");
|
||||
+
|
||||
+ query = CLOSECHANNEL;
|
||||
+ ret = Escape(hdc, QUERYESCSUPPORT, sizeof(query), (LPCSTR)&query, NULL);
|
||||
+todo_wine
|
||||
+ ok(ret == 1, "CLOSECHANNEL is not supported\n");
|
||||
+
|
||||
+ query = POSTSCRIPT_PASSTHROUGH;
|
||||
+ ret = Escape(hdc, QUERYESCSUPPORT, sizeof(query), (LPCSTR)&query, NULL);
|
||||
+ ok(ret == 1, "POSTSCRIPT_PASSTHROUGH is not supported\n");
|
||||
+
|
||||
+ ret = ExtEscape(hdc, GETFACENAME, 0, NULL, sizeof(buf), buf);
|
||||
+todo_wine
|
||||
+ ok(ret == 1, "GETFACENAME failed\n");
|
||||
+ trace("face name: %s\n", buf);
|
||||
+
|
||||
+ print_something(hdc);
|
||||
+
|
||||
+ DeleteDC(hdc);
|
||||
+}
|
||||
+
|
||||
START_TEST(dc)
|
||||
{
|
||||
pSetLayout = (void *)GetProcAddress( GetModuleHandleA("gdi32.dll"), "SetLayout");
|
||||
@@ -1400,4 +1521,5 @@ START_TEST(dc)
|
||||
test_desktop_colorres();
|
||||
test_gamma();
|
||||
test_printer_dc();
|
||||
+ test_pscript_printer_dc();
|
||||
}
|
||||
--
|
||||
2.7.1
|
||||
|
@@ -1,28 +0,0 @@
|
||||
From c0cf857381cd4af33ce454a96d9e48f896ed5027 Mon Sep 17 00:00:00 2001
|
||||
From: Dmitry Timoshkov <dmitry@baikal.ru>
|
||||
Date: Wed, 13 Apr 2016 15:36:56 +0800
|
||||
Subject: gdi32: Trace full contents of DOCINFO in StartDoc.
|
||||
|
||||
---
|
||||
dlls/gdi32/printdrv.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/dlls/gdi32/printdrv.c b/dlls/gdi32/printdrv.c
|
||||
index 3cfdc47..d2f4076 100644
|
||||
--- a/dlls/gdi32/printdrv.c
|
||||
+++ b/dlls/gdi32/printdrv.c
|
||||
@@ -72,9 +72,9 @@ INT WINAPI StartDocW(HDC hdc, const DOCINFOW* doc)
|
||||
INT ret;
|
||||
DC *dc = get_dc_ptr( hdc );
|
||||
|
||||
- TRACE("DocName = %s Output = %s Datatype = %s\n",
|
||||
+ TRACE("DocName %s, Output %s, Datatype %s, fwType %#x\n",
|
||||
debugstr_w(doc->lpszDocName), debugstr_w(doc->lpszOutput),
|
||||
- debugstr_w(doc->lpszDatatype));
|
||||
+ debugstr_w(doc->lpszDatatype), doc->fwType);
|
||||
|
||||
if(!dc) return SP_ERROR;
|
||||
|
||||
--
|
||||
2.7.1
|
||||
|
@@ -0,0 +1,339 @@
|
||||
From 335a6ec241f64bf4ceffc39170cfd3ab88001cb8 Mon Sep 17 00:00:00 2001
|
||||
From: Ken Thomases <ken@codeweavers.com>
|
||||
Date: Tue, 11 Dec 2018 08:30:41 +1100
|
||||
Subject: [PATCH 1/2] winex11: Match keyboard in Unicode
|
||||
|
||||
---
|
||||
dlls/winex11.drv/keyboard.c | 163 ++++++++++++++++++++++--------------
|
||||
1 file changed, 98 insertions(+), 65 deletions(-)
|
||||
|
||||
diff --git a/dlls/winex11.drv/keyboard.c b/dlls/winex11.drv/keyboard.c
|
||||
index b9b8293e4d8..3f13a7331cc 100644
|
||||
--- a/dlls/winex11.drv/keyboard.c
|
||||
+++ b/dlls/winex11.drv/keyboard.c
|
||||
@@ -37,6 +37,7 @@
|
||||
#include <ctype.h>
|
||||
#include <stdarg.h>
|
||||
#include <string.h>
|
||||
+#include <limits.h>
|
||||
|
||||
#define NONAMELESSUNION
|
||||
|
||||
@@ -76,7 +77,7 @@ static CRITICAL_SECTION_DEBUG critsect_debug =
|
||||
};
|
||||
static CRITICAL_SECTION kbd_section = { &critsect_debug, -1, 0, 0, 0, 0 };
|
||||
|
||||
-static char KEYBOARD_MapDeadKeysym(KeySym keysym);
|
||||
+static WCHAR KEYBOARD_MapDeadKeysym(KeySym keysym);
|
||||
|
||||
/* Keyboard translation tables */
|
||||
#define MAIN_LEN 49
|
||||
@@ -1452,6 +1453,36 @@ BOOL X11DRV_KeyEvent( HWND hwnd, XEvent *xev )
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
+static WCHAR translate_keysym( Display *display, KeySym keysym )
|
||||
+{
|
||||
+ WCHAR ret;
|
||||
+
|
||||
+#ifdef HAVE_XKB
|
||||
+ char buf[16];
|
||||
+ int count = 0;
|
||||
+
|
||||
+ if (use_xkb && (count = XkbTranslateKeySym(display, &keysym, 0, buf, sizeof(buf), NULL)))
|
||||
+ count = MultiByteToWideChar(CP_UNIXCP, 0, buf, count, &ret, 1);
|
||||
+
|
||||
+ if (count != 1)
|
||||
+#endif
|
||||
+ {
|
||||
+ TRACE("XKB could not translate keysym %04lx\n", keysym);
|
||||
+ /* FIXME: query what keysym is used as Mode_switch, fill XKeyEvent
|
||||
+ * with appropriate ShiftMask and Mode_switch, use XLookupString
|
||||
+ * to get character in the local encoding.
|
||||
+ */
|
||||
+ if (keysym <= 0xFF)
|
||||
+ ret = keysym;
|
||||
+ else if (0x01000000 <= keysym && keysym <= 0x0100FFFF)
|
||||
+ ret = keysym & 0xFFFF;
|
||||
+ else
|
||||
+ ret = KEYBOARD_MapDeadKeysym(keysym);
|
||||
+ }
|
||||
+
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
/**********************************************************************
|
||||
* X11DRV_KEYBOARD_DetectLayout
|
||||
*
|
||||
@@ -1468,8 +1499,8 @@ X11DRV_KEYBOARD_DetectLayout( Display *display )
|
||||
KeySym keysym = 0;
|
||||
const char (*lkey)[MAIN_LEN][4];
|
||||
unsigned max_seq = 0;
|
||||
- int max_score = 0, ismatch = 0;
|
||||
- char ckey[256][4];
|
||||
+ int max_score = INT_MIN, ismatch = 0;
|
||||
+ WCHAR ckey[256][4];
|
||||
|
||||
syms = keysyms_per_keycode;
|
||||
if (syms > 4) {
|
||||
@@ -1482,35 +1513,25 @@ X11DRV_KEYBOARD_DetectLayout( Display *display )
|
||||
/* get data for keycode from X server */
|
||||
for (i = 0; i < syms; i++) {
|
||||
if (!(keysym = keycode_to_keysym (display, keyc, i))) continue;
|
||||
- /* Allow both one-byte and two-byte national keysyms */
|
||||
- if ((keysym < 0x8000) && (keysym != ' '))
|
||||
- {
|
||||
-#ifdef HAVE_XKB
|
||||
- if (!use_xkb || !XkbTranslateKeySym(display, &keysym, 0, &ckey[keyc][i], 1, NULL))
|
||||
-#endif
|
||||
- {
|
||||
- TRACE("XKB could not translate keysym %04lx\n", keysym);
|
||||
- /* FIXME: query what keysym is used as Mode_switch, fill XKeyEvent
|
||||
- * with appropriate ShiftMask and Mode_switch, use XLookupString
|
||||
- * to get character in the local encoding.
|
||||
- */
|
||||
- ckey[keyc][i] = keysym & 0xFF;
|
||||
- }
|
||||
- }
|
||||
- else {
|
||||
- ckey[keyc][i] = KEYBOARD_MapDeadKeysym(keysym);
|
||||
- }
|
||||
+ ckey[keyc][i] = translate_keysym( display, keysym );
|
||||
}
|
||||
}
|
||||
|
||||
for (current = 0; main_key_tab[current].comment; current++) {
|
||||
+ DWORD codepage;
|
||||
+ WCHAR lkeyW[MAIN_LEN][4];
|
||||
+
|
||||
TRACE("Attempting to match against \"%s\"\n", main_key_tab[current].comment);
|
||||
match = 0;
|
||||
mismatch = 0;
|
||||
score = 0;
|
||||
seq = 0;
|
||||
lkey = main_key_tab[current].key;
|
||||
+ memset(lkeyW, 0, sizeof(lkeyW));
|
||||
pkey = -1;
|
||||
+ if (!GetLocaleInfoW(main_key_tab[current].lcid, LOCALE_IDEFAULTANSICODEPAGE | LOCALE_RETURN_NUMBER,
|
||||
+ (LPWSTR)&codepage, sizeof(codepage)/sizeof(WCHAR)))
|
||||
+ codepage = CP_ACP;
|
||||
for (keyc = min_keycode; keyc <= max_keycode; keyc++) {
|
||||
if (ckey[keyc][0]) {
|
||||
/* search for a match in layout table */
|
||||
@@ -1519,10 +1540,13 @@ X11DRV_KEYBOARD_DetectLayout( Display *display )
|
||||
/* the table, it's okay that the X server has "3#ÂŁ", for example) */
|
||||
/* however, the score will be higher for longer matches */
|
||||
for (key = 0; key < MAIN_LEN; key++) {
|
||||
- for (ok = 0, i = 0; (ok >= 0) && (i < syms); i++) {
|
||||
- if ((*lkey)[key][i] && ((*lkey)[key][i] == ckey[keyc][i]))
|
||||
+ if ((*lkey)[key][0] && !lkeyW[key][0])
|
||||
+ MultiByteToWideChar(codepage, 0, (*lkey)[key], -1, lkeyW[key], 4);
|
||||
+
|
||||
+ for (ok = 0, i = 0; (ok >= 0) && (i < syms) && lkeyW[key][i]; i++) {
|
||||
+ if (lkeyW[key][i] == ckey[keyc][i])
|
||||
ok++;
|
||||
- if ((*lkey)[key][i] && ((*lkey)[key][i] != ckey[keyc][i]))
|
||||
+ else
|
||||
ok = -1;
|
||||
}
|
||||
if (ok > 0) {
|
||||
@@ -1537,11 +1561,7 @@ X11DRV_KEYBOARD_DetectLayout( Display *display )
|
||||
if (key > pkey) seq++;
|
||||
pkey = key;
|
||||
} else {
|
||||
- /* print spaces instead of \0's */
|
||||
- char str[5];
|
||||
- for (i = 0; i < 4; i++) str[i] = ckey[keyc][i] ? ckey[keyc][i] : ' ';
|
||||
- str[4] = 0;
|
||||
- TRACE_(key)("mismatch for keycode %u, got %s\n", keyc, str);
|
||||
+ TRACE_(key)("mismatch for keycode %u, got %s\n", keyc, debugstr_wn(ckey[keyc], 4));
|
||||
mismatch++;
|
||||
score -= syms;
|
||||
}
|
||||
@@ -1648,9 +1668,11 @@ void X11DRV_InitKeyboard( Display *display )
|
||||
XKeyEvent e2;
|
||||
WORD scan, vkey;
|
||||
int keyc, i, keyn, syms;
|
||||
- char ckey[4]={0,0,0,0};
|
||||
+ WCHAR ckey[4] = { 0 };
|
||||
const char (*lkey)[MAIN_LEN][4];
|
||||
+ WCHAR lkeyW[MAIN_LEN][4];
|
||||
char vkey_used[256] = { 0 };
|
||||
+ DWORD codepage;
|
||||
|
||||
/* Ranges of OEM, function key, and character virtual key codes.
|
||||
* Don't include those handled specially in X11DRV_ToUnicodeEx and
|
||||
@@ -1707,7 +1729,11 @@ void X11DRV_InitKeyboard( Display *display )
|
||||
/* Detect the keyboard layout */
|
||||
X11DRV_KEYBOARD_DetectLayout( display );
|
||||
lkey = main_key_tab[kbd_layout].key;
|
||||
+ memset(lkeyW, 0, sizeof(lkeyW));
|
||||
syms = (keysyms_per_keycode > 4) ? 4 : keysyms_per_keycode;
|
||||
+ if (!GetLocaleInfoW(main_key_tab[kbd_layout].lcid, LOCALE_IDEFAULTANSICODEPAGE | LOCALE_RETURN_NUMBER,
|
||||
+ (LPWSTR)&codepage, sizeof(codepage)/sizeof(WCHAR)))
|
||||
+ codepage = CP_ACP;
|
||||
|
||||
/* Now build two conversion arrays :
|
||||
* keycode -> vkey + scancode + extended
|
||||
@@ -1748,26 +1774,14 @@ void X11DRV_InitKeyboard( Display *display )
|
||||
int maxlen=0,maxval=-1,ok;
|
||||
for (i=0; i<syms; i++) {
|
||||
keysym = keycode_to_keysym(display, keyc, i);
|
||||
- if ((keysym<0x8000) && (keysym!=' '))
|
||||
- {
|
||||
-#ifdef HAVE_XKB
|
||||
- if (!use_xkb || !XkbTranslateKeySym(display, &keysym, 0, &ckey[i], 1, NULL))
|
||||
-#endif
|
||||
- {
|
||||
- /* FIXME: query what keysym is used as Mode_switch, fill XKeyEvent
|
||||
- * with appropriate ShiftMask and Mode_switch, use XLookupString
|
||||
- * to get character in the local encoding.
|
||||
- */
|
||||
- ckey[i] = (keysym <= 0x7F) ? keysym : 0;
|
||||
- }
|
||||
- } else {
|
||||
- ckey[i] = KEYBOARD_MapDeadKeysym(keysym);
|
||||
- }
|
||||
+ ckey[i] = translate_keysym(display, keysym);
|
||||
}
|
||||
/* find key with longest match streak */
|
||||
for (keyn=0; keyn<MAIN_LEN; keyn++) {
|
||||
- for (ok=(*lkey)[keyn][i=0]; ok&&(i<4); i++)
|
||||
- if ((*lkey)[keyn][i] && (*lkey)[keyn][i]!=ckey[i]) ok=0;
|
||||
+ if ((*lkey)[keyn][0] && !lkeyW[keyn][0])
|
||||
+ MultiByteToWideChar(codepage, 0, (*lkey)[keyn], -1, lkeyW[keyn], 4);
|
||||
+ for (ok=lkeyW[keyn][i=0]; ok&&(i<4); i++)
|
||||
+ if (lkeyW[keyn][i] && lkeyW[keyn][i]!=ckey[i]) ok=0;
|
||||
if (!ok) i--; /* we overshot */
|
||||
if (ok||(i>maxlen)) {
|
||||
maxlen=i; maxval=keyn;
|
||||
@@ -2369,7 +2383,7 @@ INT CDECL X11DRV_GetKeyNameText(LONG lParam, LPWSTR lpBuffer, INT nSize)
|
||||
/***********************************************************************
|
||||
* X11DRV_KEYBOARD_MapDeadKeysym
|
||||
*/
|
||||
-static char KEYBOARD_MapDeadKeysym(KeySym keysym)
|
||||
+static WCHAR KEYBOARD_MapDeadKeysym(KeySym keysym)
|
||||
{
|
||||
switch (keysym)
|
||||
{
|
||||
@@ -2379,65 +2393,84 @@ static char KEYBOARD_MapDeadKeysym(KeySym keysym)
|
||||
#endif
|
||||
case 0x1000FE7E : /* Xfree's XK_Dtilde */
|
||||
return '~'; /* '? */
|
||||
+
|
||||
#ifdef XK_dead_acute
|
||||
case XK_dead_acute :
|
||||
#endif
|
||||
case 0x1000FE27 : /* Xfree's XK_Dacute_accent */
|
||||
- return 0xb4; /* '' */
|
||||
+ return 0x00b4; /* '' */
|
||||
+
|
||||
#ifdef XK_dead_circumflex
|
||||
case XK_dead_circumflex:
|
||||
#endif
|
||||
case 0x1000FE5E : /* Xfree's XK_Dcircumflex_accent */
|
||||
return '^'; /* '> */
|
||||
+
|
||||
#ifdef XK_dead_grave
|
||||
case XK_dead_grave :
|
||||
#endif
|
||||
case 0x1000FE60 : /* Xfree's XK_Dgrave_accent */
|
||||
return '`'; /* '! */
|
||||
+
|
||||
#ifdef XK_dead_diaeresis
|
||||
case XK_dead_diaeresis :
|
||||
#endif
|
||||
case 0x1000FE22 : /* Xfree's XK_Ddiaeresis */
|
||||
- return 0xa8; /* ': */
|
||||
+ return 0x00a8; /* ': */
|
||||
+
|
||||
#ifdef XK_dead_cedilla
|
||||
case XK_dead_cedilla :
|
||||
- return 0xb8; /* ', */
|
||||
+ return 0x00b8; /* ', */
|
||||
#endif
|
||||
+
|
||||
#ifdef XK_dead_macron
|
||||
case XK_dead_macron :
|
||||
- return '-'; /* 'm isn't defined on iso-8859-x */
|
||||
+ return 0x00af; /* 'm */
|
||||
#endif
|
||||
+
|
||||
#ifdef XK_dead_breve
|
||||
case XK_dead_breve :
|
||||
- return 0xa2; /* '( */
|
||||
+ return 0x02d8; /* '( */
|
||||
#endif
|
||||
+
|
||||
#ifdef XK_dead_abovedot
|
||||
case XK_dead_abovedot :
|
||||
- return 0xff; /* '. */
|
||||
+ return 0x02d9; /* '. */
|
||||
#endif
|
||||
+
|
||||
#ifdef XK_dead_abovering
|
||||
case XK_dead_abovering :
|
||||
- return '0'; /* '0 isn't defined on iso-8859-x */
|
||||
+ return 0x02da; /* '0 */
|
||||
#endif
|
||||
+
|
||||
#ifdef XK_dead_doubleacute
|
||||
case XK_dead_doubleacute :
|
||||
- return 0xbd; /* '" */
|
||||
+ return 0x02dd; /* '" */
|
||||
#endif
|
||||
+
|
||||
#ifdef XK_dead_caron
|
||||
case XK_dead_caron :
|
||||
- return 0xb7; /* '< */
|
||||
+ return 0x02c7; /* '< */
|
||||
#endif
|
||||
+
|
||||
#ifdef XK_dead_ogonek
|
||||
case XK_dead_ogonek :
|
||||
- return 0xb2; /* '; */
|
||||
+ return 0x02db; /* '; */
|
||||
#endif
|
||||
-/* FIXME: I don't know this three.
|
||||
- case XK_dead_iota :
|
||||
- return 'i';
|
||||
+
|
||||
+#ifdef XK_dead_voiced_sound
|
||||
case XK_dead_voiced_sound :
|
||||
- return 'v';
|
||||
+ return 0x309b; /* unknown */
|
||||
+#endif
|
||||
+
|
||||
+#ifdef XK_dead_semivoiced_sound
|
||||
case XK_dead_semivoiced_sound :
|
||||
- return 's';
|
||||
+ return 0x309c; /* unknown */
|
||||
+#endif
|
||||
+
|
||||
+/* FIXME: I don't know this one.
|
||||
+ case XK_dead_iota :
|
||||
+ return 'i';
|
||||
*/
|
||||
}
|
||||
TRACE("no character for dead keysym 0x%08lx\n",keysym);
|
||||
@@ -2622,7 +2655,7 @@ INT CDECL X11DRV_ToUnicodeEx(UINT virtKey, UINT scanCode, const BYTE *lpKeyState
|
||||
|
||||
if (ret == 0)
|
||||
{
|
||||
- char dead_char;
|
||||
+ WCHAR dead_char;
|
||||
|
||||
#ifdef XK_EuroSign
|
||||
/* An ugly hack for EuroSign: X can't translate it to a character
|
||||
@@ -2646,7 +2679,7 @@ INT CDECL X11DRV_ToUnicodeEx(UINT virtKey, UINT scanCode, const BYTE *lpKeyState
|
||||
dead_char = KEYBOARD_MapDeadKeysym(keysym);
|
||||
if (dead_char)
|
||||
{
|
||||
- MultiByteToWideChar(CP_UNIXCP, 0, &dead_char, 1, bufW, bufW_size);
|
||||
+ bufW[0] = dead_char;
|
||||
ret = -1;
|
||||
goto found;
|
||||
}
|
||||
--
|
||||
2.19.2
|
||||
|
@@ -0,0 +1,351 @@
|
||||
From 261a4727d80b3f85d909a2addb54ebb18c863a8e Mon Sep 17 00:00:00 2001
|
||||
From: Philippe Valembois <lephilousophe@users.sourceforge.net>
|
||||
Date: Tue, 11 Dec 2018 08:42:20 +1100
|
||||
Subject: [PATCH 2/2] winex11: Fix more key translation
|
||||
|
||||
---
|
||||
dlls/winex11.drv/keyboard.c | 250 +++++++++++++++++++++++++++++++-----
|
||||
1 file changed, 219 insertions(+), 31 deletions(-)
|
||||
|
||||
diff --git a/dlls/winex11.drv/keyboard.c b/dlls/winex11.drv/keyboard.c
|
||||
index 3f13a7331cc..c33b9b8dff6 100644
|
||||
--- a/dlls/winex11.drv/keyboard.c
|
||||
+++ b/dlls/winex11.drv/keyboard.c
|
||||
@@ -744,11 +744,11 @@ static const char main_key_LA[MAIN_LEN][4] =
|
||||
/*** Lithuanian keyboard layout (setxkbmap lt) */
|
||||
static const char main_key_LT_B[MAIN_LEN][4] =
|
||||
{
|
||||
- "`~","\xe0\xc0","\xe8\xc8","\xe6\xc6","\xeb\xcb","\xe1\xc1","\xf0\xd0","\xf8\xd8","\xfb\xdb","\xa5(","\xb4)","-_","\xfe\xde",
|
||||
+ "`~","\xe0\xc0","\xe8\xc8","\xe6\xc6","\xeb\xcb","\xe1\xc1","\xf0\xd0","\xf8\xd8","\xfb\xdb","\x84(","\x93)","-_","\xfe\xde",
|
||||
"qQ","wW","eE","rR","tT","yY","uU","iI","oO","pP","[{","]}",
|
||||
"aA","sS","dD","fF","gG","hH","jJ","kK","lL",";:","'\"","\\|",
|
||||
"zZ","xX","cC","vV","bB","nN","mM",",<",".>","/?",
|
||||
- "\xaa\xac"
|
||||
+ "\x96\x80"
|
||||
};
|
||||
|
||||
/*** Turkish keyboard Layout */
|
||||
@@ -1455,12 +1455,31 @@ BOOL X11DRV_KeyEvent( HWND hwnd, XEvent *xev )
|
||||
|
||||
static WCHAR translate_keysym( Display *display, KeySym keysym )
|
||||
{
|
||||
- WCHAR ret;
|
||||
-
|
||||
#ifdef HAVE_XKB
|
||||
char buf[16];
|
||||
int count = 0;
|
||||
+#endif
|
||||
+ WCHAR ret;
|
||||
|
||||
+ /* Don't translate some function keysyms */
|
||||
+ /* Those who have 0s at byte 1 and 2, 253 or 255 at byte 3 */
|
||||
+ /* Let pass only dead characters in 254 */
|
||||
+ if ((keysym >> 8) == 0xFD || (keysym >> 8) == 0xFF) {
|
||||
+ return 0;
|
||||
+ }
|
||||
+ if ((keysym >> 8) == 0xFE && (keysym < 0xFE50 || keysym >= 0xFE90)) {
|
||||
+ return 0;
|
||||
+ }
|
||||
+ /* Don't translate vendor keysyms */
|
||||
+ if (keysym & 0x10000000) {
|
||||
+ return 0;
|
||||
+ }
|
||||
+ // Don't match space bar
|
||||
+ if (keysym == ' ') {
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
+#ifdef HAVE_XKB
|
||||
if (use_xkb && (count = XkbTranslateKeySym(display, &keysym, 0, buf, sizeof(buf), NULL)))
|
||||
count = MultiByteToWideChar(CP_UNIXCP, 0, buf, count, &ret, 1);
|
||||
|
||||
@@ -1541,7 +1560,7 @@ X11DRV_KEYBOARD_DetectLayout( Display *display )
|
||||
/* however, the score will be higher for longer matches */
|
||||
for (key = 0; key < MAIN_LEN; key++) {
|
||||
if ((*lkey)[key][0] && !lkeyW[key][0])
|
||||
- MultiByteToWideChar(codepage, 0, (*lkey)[key], -1, lkeyW[key], 4);
|
||||
+ MultiByteToWideChar(codepage, 0, (*lkey)[key], 4, lkeyW[key], 4);
|
||||
|
||||
for (ok = 0, i = 0; (ok >= 0) && (i < syms) && lkeyW[key][i]; i++) {
|
||||
if (lkeyW[key][i] == ckey[keyc][i])
|
||||
@@ -1779,7 +1798,7 @@ void X11DRV_InitKeyboard( Display *display )
|
||||
/* find key with longest match streak */
|
||||
for (keyn=0; keyn<MAIN_LEN; keyn++) {
|
||||
if ((*lkey)[keyn][0] && !lkeyW[keyn][0])
|
||||
- MultiByteToWideChar(codepage, 0, (*lkey)[keyn], -1, lkeyW[keyn], 4);
|
||||
+ MultiByteToWideChar(codepage, 0, (*lkey)[keyn], 4, lkeyW[keyn], 4);
|
||||
for (ok=lkeyW[keyn][i=0]; ok&&(i<4); i++)
|
||||
if (lkeyW[keyn][i] && lkeyW[keyn][i]!=ckey[i]) ok=0;
|
||||
if (!ok) i--; /* we overshot */
|
||||
@@ -1800,7 +1819,7 @@ void X11DRV_InitKeyboard( Display *display )
|
||||
TRACE("keycode %u => vkey %04X\n", e2.keycode, vkey);
|
||||
keyc2vkey[e2.keycode] = vkey;
|
||||
keyc2scan[e2.keycode] = scan;
|
||||
- if ((vkey & 0xff) && vkey_used[(vkey & 0xff)])
|
||||
+ if ((vkey & 0xff) && !(vkey & 0x100) && vkey_used[(vkey & 0xff)])
|
||||
WARN("vkey %04X is being used by more than one keycode\n", vkey);
|
||||
vkey_used[(vkey & 0xff)] = 1;
|
||||
} /* for */
|
||||
@@ -2388,11 +2407,12 @@ static WCHAR KEYBOARD_MapDeadKeysym(KeySym keysym)
|
||||
switch (keysym)
|
||||
{
|
||||
/* symbolic ASCII is the same as defined in rfc1345 */
|
||||
-#ifdef XK_dead_tilde
|
||||
- case XK_dead_tilde :
|
||||
+ /* cases are sorted by macro values */
|
||||
+#ifdef XK_dead_grave
|
||||
+ case XK_dead_grave :
|
||||
#endif
|
||||
- case 0x1000FE7E : /* Xfree's XK_Dtilde */
|
||||
- return '~'; /* '? */
|
||||
+ case 0x1000FE60 : /* Xfree's XK_Dgrave_accent */
|
||||
+ return 0x0060; /* '! */
|
||||
|
||||
#ifdef XK_dead_acute
|
||||
case XK_dead_acute :
|
||||
@@ -2404,24 +2424,13 @@ static WCHAR KEYBOARD_MapDeadKeysym(KeySym keysym)
|
||||
case XK_dead_circumflex:
|
||||
#endif
|
||||
case 0x1000FE5E : /* Xfree's XK_Dcircumflex_accent */
|
||||
- return '^'; /* '> */
|
||||
-
|
||||
-#ifdef XK_dead_grave
|
||||
- case XK_dead_grave :
|
||||
-#endif
|
||||
- case 0x1000FE60 : /* Xfree's XK_Dgrave_accent */
|
||||
- return '`'; /* '! */
|
||||
-
|
||||
-#ifdef XK_dead_diaeresis
|
||||
- case XK_dead_diaeresis :
|
||||
-#endif
|
||||
- case 0x1000FE22 : /* Xfree's XK_Ddiaeresis */
|
||||
- return 0x00a8; /* ': */
|
||||
+ return 0x005e; /* '> */
|
||||
|
||||
-#ifdef XK_dead_cedilla
|
||||
- case XK_dead_cedilla :
|
||||
- return 0x00b8; /* ', */
|
||||
+#ifdef XK_dead_tilde
|
||||
+ case XK_dead_tilde :
|
||||
#endif
|
||||
+ case 0x1000FE7E : /* Xfree's XK_Dtilde */
|
||||
+ return 0x007e; /* '? */
|
||||
|
||||
#ifdef XK_dead_macron
|
||||
case XK_dead_macron :
|
||||
@@ -2438,6 +2447,12 @@ static WCHAR KEYBOARD_MapDeadKeysym(KeySym keysym)
|
||||
return 0x02d9; /* '. */
|
||||
#endif
|
||||
|
||||
+#ifdef XK_dead_diaeresis
|
||||
+ case XK_dead_diaeresis :
|
||||
+#endif
|
||||
+ case 0x1000FE22 : /* Xfree's XK_Ddiaeresis */
|
||||
+ return 0x00a8; /* ': */
|
||||
+
|
||||
#ifdef XK_dead_abovering
|
||||
case XK_dead_abovering :
|
||||
return 0x02da; /* '0 */
|
||||
@@ -2453,11 +2468,21 @@ static WCHAR KEYBOARD_MapDeadKeysym(KeySym keysym)
|
||||
return 0x02c7; /* '< */
|
||||
#endif
|
||||
|
||||
+#ifdef XK_dead_cedilla
|
||||
+ case XK_dead_cedilla :
|
||||
+ return 0x00b8; /* ', */
|
||||
+#endif
|
||||
+
|
||||
#ifdef XK_dead_ogonek
|
||||
case XK_dead_ogonek :
|
||||
return 0x02db; /* '; */
|
||||
#endif
|
||||
|
||||
+#ifdef XK_dead_iota
|
||||
+ case XK_dead_iota :
|
||||
+ return 0x037a; /* unknown */
|
||||
+#endif
|
||||
+
|
||||
#ifdef XK_dead_voiced_sound
|
||||
case XK_dead_voiced_sound :
|
||||
return 0x309b; /* unknown */
|
||||
@@ -2468,10 +2493,173 @@ static WCHAR KEYBOARD_MapDeadKeysym(KeySym keysym)
|
||||
return 0x309c; /* unknown */
|
||||
#endif
|
||||
|
||||
-/* FIXME: I don't know this one.
|
||||
- case XK_dead_iota :
|
||||
- return 'i';
|
||||
-*/
|
||||
+/* Modifiers below don't have an independent form in X11 compose files.
|
||||
+ * Maybe we should not return them as Windows doesn't seem to have them. */
|
||||
+#ifdef XK_dead_belowdot
|
||||
+ case XK_dead_belowdot :
|
||||
+ return 0x0323;
|
||||
+#endif
|
||||
+
|
||||
+#ifdef XK_dead_hook
|
||||
+ case XK_dead_hook :
|
||||
+ return 0x0309;
|
||||
+#endif
|
||||
+
|
||||
+#ifdef XK_dead_horn
|
||||
+ case XK_dead_horn :
|
||||
+ return 0x031b;
|
||||
+#endif
|
||||
+
|
||||
+#ifdef XK_dead_stroke
|
||||
+ case XK_dead_stroke :
|
||||
+ return '/'; /* From Compose file */
|
||||
+#endif
|
||||
+
|
||||
+#ifdef XK_dead_abovecomma
|
||||
+ case XK_dead_abovecomma :
|
||||
+ return 0x0313;
|
||||
+#endif
|
||||
+
|
||||
+#ifdef XK_dead_abovereversedcomma
|
||||
+ case XK_dead_abovereversedcomma :
|
||||
+ return 0x0314;
|
||||
+#endif
|
||||
+
|
||||
+#ifdef XK_dead_doublegrave
|
||||
+ case XK_dead_doublegrave :
|
||||
+ return 0x02f5; /* This one is not combined */
|
||||
+#endif
|
||||
+
|
||||
+#ifdef XK_dead_belowring
|
||||
+ case XK_dead_belowring :
|
||||
+ return 0x0325;
|
||||
+#endif
|
||||
+
|
||||
+#ifdef XK_dead_belowmacron
|
||||
+ case XK_dead_belowmacron :
|
||||
+ return 0x0331;
|
||||
+#endif
|
||||
+
|
||||
+#ifdef XK_dead_belowcircumflex
|
||||
+ case XK_dead_belowcircumflex :
|
||||
+ return 0x032d;
|
||||
+#endif
|
||||
+
|
||||
+#ifdef XK_dead_belowtilde
|
||||
+ case XK_dead_belowtilde :
|
||||
+ return 0x0330;
|
||||
+#endif
|
||||
+
|
||||
+#ifdef XK_dead_belowbreve
|
||||
+ case XK_dead_belowbreve :
|
||||
+ return 0x032e;
|
||||
+#endif
|
||||
+
|
||||
+#ifdef XK_dead_belowdiaeresis
|
||||
+ case XK_dead_belowdiaeresis :
|
||||
+ return 0x0324;
|
||||
+#endif
|
||||
+
|
||||
+#ifdef XK_dead_invertedbreve
|
||||
+ case XK_dead_invertedbreve :
|
||||
+ return 0x0311;
|
||||
+#endif
|
||||
+
|
||||
+#ifdef XK_dead_belowcomma
|
||||
+ case XK_dead_belowcomma :
|
||||
+ return ','; /* From Compose file */
|
||||
+#endif
|
||||
+
|
||||
+#ifdef XK_dead_currency
|
||||
+ case XK_dead_currency :
|
||||
+ return 0x00a4; /* From Compose file */
|
||||
+#endif
|
||||
+
|
||||
+#ifdef XK_dead_a
|
||||
+ case XK_dead_a :
|
||||
+ return 'a';
|
||||
+#endif
|
||||
+
|
||||
+#ifdef XK_dead_A
|
||||
+ case XK_dead_A :
|
||||
+ return 'A';
|
||||
+#endif
|
||||
+
|
||||
+#ifdef XK_dead_e
|
||||
+ case XK_dead_e :
|
||||
+ return 'e';
|
||||
+#endif
|
||||
+
|
||||
+#ifdef XK_dead_E
|
||||
+ case XK_dead_E :
|
||||
+ return 'E';
|
||||
+#endif
|
||||
+
|
||||
+#ifdef XK_dead_i
|
||||
+ case XK_dead_i :
|
||||
+ return 'i';
|
||||
+#endif
|
||||
+
|
||||
+#ifdef XK_dead_I
|
||||
+ case XK_dead_I :
|
||||
+ return 'I';
|
||||
+#endif
|
||||
+
|
||||
+#ifdef XK_dead_o
|
||||
+ case XK_dead_o :
|
||||
+ return 'o';
|
||||
+#endif
|
||||
+
|
||||
+#ifdef XK_dead_O
|
||||
+ case XK_dead_O :
|
||||
+ return 'O';
|
||||
+#endif
|
||||
+
|
||||
+#ifdef XK_dead_u
|
||||
+ case XK_dead_u :
|
||||
+ return 'u';
|
||||
+#endif
|
||||
+
|
||||
+#ifdef XK_dead_U
|
||||
+ case XK_dead_U :
|
||||
+ return 'U';
|
||||
+#endif
|
||||
+
|
||||
+#ifdef XK_dead_small_schwa
|
||||
+ case XK_dead_small_schwa :
|
||||
+ return 0x0259;
|
||||
+#endif
|
||||
+
|
||||
+#ifdef XK_dead_capital_schwa
|
||||
+ case XK_dead_capital_schwa :
|
||||
+ return 0x018f;
|
||||
+#endif
|
||||
+
|
||||
+#ifdef XK_dead_greek
|
||||
+ case XK_dead_greek :
|
||||
+ return 0x00b5;
|
||||
+#endif
|
||||
+
|
||||
+#ifdef XK_dead_lowline
|
||||
+ case XK_dead_lowline :
|
||||
+ return '_';
|
||||
+#endif
|
||||
+
|
||||
+#ifdef XK_dead_aboveverticalline
|
||||
+ case XK_dead_aboveverticalline :
|
||||
+ return 0x030d;
|
||||
+#endif
|
||||
+
|
||||
+#ifdef XK_dead_belowverticalline
|
||||
+ case XK_dead_belowverticalline :
|
||||
+ return 0x0329;
|
||||
+#endif
|
||||
+
|
||||
+#ifdef XK_dead_longsolidusoverlay
|
||||
+ case XK_dead_longsolidusoverlay :
|
||||
+ return 0x0338;
|
||||
+#endif
|
||||
+
|
||||
}
|
||||
TRACE("no character for dead keysym 0x%08lx\n",keysym);
|
||||
return 0;
|
||||
--
|
||||
2.19.2
|
||||
|
@@ -0,0 +1,36 @@
|
||||
From 98aba5f3f2146d09c5beb453d7dfb493970535dc Mon Sep 17 00:00:00 2001
|
||||
From: Ondrej Kraus <neverberlerfellerer@gmail.com>
|
||||
Date: Wed, 12 Dec 2018 15:25:30 +0100
|
||||
Subject: [PATCH 2/2] winex11.drv: Fix main Russian keyboard layout
|
||||
|
||||
Now main_key_RU is properly detected for layout known in X as default Russian layout.
|
||||
---
|
||||
dlls/winex11.drv/keyboard.c | 10 +++++-----
|
||||
1 file changed, 5 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/dlls/winex11.drv/keyboard.c b/dlls/winex11.drv/keyboard.c
|
||||
index 7c7dd4335e..cd4ad570c3 100644
|
||||
--- a/dlls/winex11.drv/keyboard.c
|
||||
+++ b/dlls/winex11.drv/keyboard.c
|
||||
@@ -452,13 +452,13 @@ static const char main_key_BY[MAIN_LEN][4] =
|
||||
};
|
||||
|
||||
|
||||
-/*** Russian keyboard layout (contributed by Pavel Roskin) */
|
||||
+/*** Russian keyboard layout */
|
||||
static const char main_key_RU[MAIN_LEN][4] =
|
||||
{
|
||||
- "`~","1!","2@","3#","4$","5%","6^","7&","8*","9(","0)","-_","=+",
|
||||
- "qQ\xca\xea","wW\xc3\xe3","eE\xd5\xf5","rR\xcb\xeb","tT\xc5\xe5","yY\xce\xee","uU\xc7\xe7","iI\xdb\xfb","oO\xdd\xfd","pP\xda\xfa","[{\xc8\xe8","]}\xdf\xff",
|
||||
- "aA\xc6\xe6","sS\xd9\xf9","dD\xd7\xf7","fF\xc1\xe1","gG\xd0\xf0","hH\xd2\xf2","jJ\xcf\xef","kK\xcc\xec","lL\xc4\xe4",";:\xd6\xf6","'\"\xdc\xfc","\\|",
|
||||
- "zZ\xd1\xf1","xX\xde\xfe","cC\xd3\xf3","vV\xcd\xed","bB\xc9\xe9","nN\xd4\xf4","mM\xd8\xf8",",<\xc2\xe2",".>\xc0\xe0","/?"
|
||||
+ "\xb8\xa8","1!","2\"","3\xb9","4;","5%","6:","7?","8*","9(","0)","-_","=+",
|
||||
+ "\xe9\xc9","\xf6\xd6","\xf3\xd3","\xea\xca","\xe5\xc5","\xed\xcd","\xe3\xc3","\xf8\xd8","\xf9\xf9","\xe7\xc7","\xf5\xd5","\xfa\xda",
|
||||
+ "\xf4\xd4","\xec\xcc","\xfb\xdb","\xe2\xc2","\xe0\xc0","\xef\xcf","\xee\xce","\xeb\xcb","\xe4\xc4","\xe6\xc6","\xfd\xdd","\\/",
|
||||
+ "\xff\xdf","\xf7\xd7","\xf1\xd1","\xec\xcc","\xe8\xc8","\xf2\xd2","\xfc\xdc","\xe1\xc1","\xfe\xde",".,"
|
||||
};
|
||||
|
||||
/*** Russian keyboard layout (phantom key version) */
|
||||
--
|
||||
2.20.0
|
||||
|
1
patches/winex11-key_translation/definition
Normal file
1
patches/winex11-key_translation/definition
Normal file
@@ -0,0 +1 @@
|
||||
Fixes: [30984] Improve key translation.
|
@@ -0,0 +1,67 @@
|
||||
From 9099a135c1200d398e4a22e0c87bf7b494b82416 Mon Sep 17 00:00:00 2001
|
||||
From: Robert Walker <bob.mt.wya@gmail.com>
|
||||
Date: Tue, 11 Dec 2018 09:22:18 +1100
|
||||
Subject: [PATCH] winex11: Use active owner when sending messages
|
||||
|
||||
---
|
||||
dlls/winex11.drv/wintab.c | 13 +++++++------
|
||||
1 file changed, 7 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/dlls/winex11.drv/wintab.c b/dlls/winex11.drv/wintab.c
|
||||
index 3517bd53cef..440c8f5d249 100644
|
||||
--- a/dlls/winex11.drv/wintab.c
|
||||
+++ b/dlls/winex11.drv/wintab.c
|
||||
@@ -265,6 +265,7 @@ static int proximity_in_type;
|
||||
static int proximity_out_type;
|
||||
|
||||
static HWND hwndTabletDefault;
|
||||
+static HWND gActiveOwner;
|
||||
static WTPACKET gMsgPacket;
|
||||
static DWORD gSerial;
|
||||
static DWORD lastX = 0xffff;
|
||||
@@ -928,7 +929,7 @@ static BOOL motion_event( HWND hwnd, XEvent *event )
|
||||
gMsgPacket.pkNormalPressure = motion->axis_data[2];
|
||||
gMsgPacket.pkButtons = get_button_state(curnum);
|
||||
gMsgPacket.pkChanged = get_changed_state(&gMsgPacket);
|
||||
- SendMessageW(hwndTabletDefault,WT_PACKET,gMsgPacket.pkSerialNumber,(LPARAM)hwnd);
|
||||
+ SendMessageW(hwndTabletDefault,WT_PACKET,gMsgPacket.pkSerialNumber,(LPARAM)gActiveOwner);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -965,7 +966,7 @@ static BOOL button_event( HWND hwnd, XEvent *event )
|
||||
gMsgPacket.pkNormalPressure = button->axis_data[2];
|
||||
gMsgPacket.pkButtons = get_button_state(curnum);
|
||||
gMsgPacket.pkChanged = get_changed_state(&gMsgPacket);
|
||||
- SendMessageW(hwndTabletDefault,WT_PACKET,gMsgPacket.pkSerialNumber,(LPARAM)hwnd);
|
||||
+ SendMessageW(hwndTabletDefault,WT_PACKET,gMsgPacket.pkSerialNumber,(LPARAM)gActiveOwner);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -1021,7 +1022,7 @@ static BOOL proximity_event( HWND hwnd, XEvent *event )
|
||||
*/
|
||||
proximity_info = MAKELPARAM((event->type == proximity_in_type),
|
||||
(event->type == proximity_in_type) || (event->type == proximity_out_type));
|
||||
- SendMessageW(hwndTabletDefault, WT_PROXIMITY, (WPARAM)hwnd, proximity_info);
|
||||
+ SendMessageW(hwndTabletDefault, WT_PROXIMITY, (WPARAM)gActiveOwner, proximity_info);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -1038,12 +1039,12 @@ int CDECL X11DRV_AttachEventQueueToTablet(HWND hOwner)
|
||||
XDeviceInfo *target = NULL;
|
||||
XDevice *the_device;
|
||||
XEventClass event_list[7];
|
||||
- Window win = X11DRV_get_whole_window( hOwner );
|
||||
-
|
||||
- if (!win || !xinput_handle) return 0;
|
||||
+ Window win = X11DRV_get_whole_window(GetDesktopWindow());
|
||||
|
||||
TRACE("Creating context for window %p (%lx) %i cursors\n", hOwner, win, gNumCursors);
|
||||
|
||||
+ gActiveOwner = hOwner;
|
||||
+
|
||||
devices = pXListInputDevices(data->display, &num_devices);
|
||||
|
||||
X11DRV_expect_error(data->display,Tablet_ErrorHandler,NULL);
|
||||
--
|
||||
2.19.2
|
||||
|
@@ -1,18 +1,18 @@
|
||||
From 97251c147d843617cf2e3fcf3f273ea779d39742 Mon Sep 17 00:00:00 2001
|
||||
From af247c7d7c66b23aaa62054d2f7eeb20f8428e26 Mon Sep 17 00:00:00 2001
|
||||
From: Zebediah Figura <z.figura12@gmail.com>
|
||||
Date: Wed, 8 Aug 2018 20:00:15 -0500
|
||||
Subject: [PATCH 2/2] ntdll: Add a stub implementation of Wow64Transition.
|
||||
|
||||
---
|
||||
dlls/ntdll/loader.c | 9 ++++++++-
|
||||
dlls/ntdll/ntdll.spec | 1 +
|
||||
2 files changed, 9 insertions(+), 1 deletion(-)
|
||||
dlls/ntdll/loader.c | 10 +++++++++-
|
||||
dlls/ntdll/ntdll.spec | 1 +
|
||||
2 files changed, 10 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c
|
||||
index df206e8..e37aec2 100644
|
||||
index 631e8bd9..f7a64a80 100644
|
||||
--- a/dlls/ntdll/loader.c
|
||||
+++ b/dlls/ntdll/loader.c
|
||||
@@ -3493,15 +3493,17 @@ BOOL WINAPI DllMain( HINSTANCE inst, DWORD reason, LPVOID reserved )
|
||||
@@ -3546,15 +3546,17 @@ BOOL WINAPI DllMain( HINSTANCE inst, DWORD reason, LPVOID reserved )
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -31,23 +31,24 @@ index df206e8..e37aec2 100644
|
||||
NTSTATUS status;
|
||||
ANSI_STRING func_name;
|
||||
void (* DECLSPEC_NORETURN CDECL init_func)(void);
|
||||
@@ -3517,6 +3519,11 @@ void __wine_process_init(void)
|
||||
/* setup the load callback and create ntdll modref */
|
||||
wine_dll_set_callback( load_builtin_callback );
|
||||
|
||||
@@ -3575,6 +3577,12 @@ void __wine_process_init(void)
|
||||
MESSAGE( "wine: could not load kernel32.dll, status %x\n", status );
|
||||
exit(1);
|
||||
}
|
||||
+
|
||||
+ if ((status = load_builtin_dll( NULL, wow64cpuW, 0, 0, &wow64cpu_wm )) == STATUS_SUCCESS)
|
||||
+ Wow64Transition = wow64cpu_wm->ldr.BaseAddress;
|
||||
+ else
|
||||
+ WARN( "could not load wow64cpu.dll, status %#x\n", status );
|
||||
+
|
||||
if ((status = load_builtin_dll( NULL, kernel32W, 0, 0, &wm )) != STATUS_SUCCESS)
|
||||
{
|
||||
MESSAGE( "wine: could not load kernel32.dll, status %x\n", status );
|
||||
RtlInitAnsiString( &func_name, "__wine_kernel_init" );
|
||||
if ((status = LdrGetProcedureAddress( wm->ldr.BaseAddress, &func_name,
|
||||
0, (void **)&init_func )) != STATUS_SUCCESS)
|
||||
diff --git a/dlls/ntdll/ntdll.spec b/dlls/ntdll/ntdll.spec
|
||||
index d321c44..3a7a144 100644
|
||||
index c2e2fb1c..cb55df3a 100644
|
||||
--- a/dlls/ntdll/ntdll.spec
|
||||
+++ b/dlls/ntdll/ntdll.spec
|
||||
@@ -1034,6 +1034,7 @@
|
||||
@@ -1046,6 +1046,7 @@
|
||||
@ stdcall WinSqmIsOptedIn()
|
||||
@ stdcall WinSqmSetDWORD(ptr long long)
|
||||
@ stdcall WinSqmStartSession(ptr long long)
|
||||
@@ -56,5 +57,5 @@ index d321c44..3a7a144 100644
|
||||
@ stdcall -private ZwAccessCheck(ptr long long ptr ptr ptr ptr ptr) NtAccessCheck
|
||||
@ stdcall -private ZwAccessCheckAndAuditAlarm(ptr long ptr ptr ptr long ptr long ptr ptr ptr) NtAccessCheckAndAuditAlarm
|
||||
--
|
||||
2.7.4
|
||||
2.19.2
|
||||
|
||||
|
@@ -1 +1 @@
|
||||
Wine Staging 4.0-rc1
|
||||
Wine Staging 4.0-rc2
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user