Compare commits

...

14 Commits

Author SHA1 Message Date
Alistair Leslie-Hughes
c119ae9eeb Release v4.0rc2 2018-12-16 13:15:30 +11:00
Zebediah Figura
476caa4a5f ucrtbase-_o_: Add patch set. 2018-12-15 10:15:17 -06:00
Zebediah Figura
9982d2e0ee dwmapi-DwmGetTransportAttributes: Add patch set. 2018-12-15 10:10:07 -06:00
Zebediah Figura
2b2bf8ac06 user32-dialog_focus: Update patch. 2018-12-15 09:49:32 -06:00
Zebediah Figura
088524a29e newupdate.py: Fix path. 2018-12-15 09:46:36 -06:00
Zebediah Figura
31d525e567 newupdate.py: Also regenerate patchinstall.sh. 2018-12-13 19:03:58 -06:00
Zebediah Figura
7d26828643 krnl386.exe16-_lclose16: Remove.
This was fixed by 414c73feabb6d33be969f3927f8b3e8a8075bcd4.
2018-12-13 18:58:44 -06:00
Alistair Leslie-Hughes
3dc3c4e0e2 Updated winex11-key_translation patchset
Fixed Russian layout.
2018-12-13 08:41:49 +11:00
Alistair Leslie-Hughes
154875b4e9 Remove dinput-map_dik_codes patchset
This was pointed out this patchset isn't required.
The right approach is the correctly map the keyboard correctly
eg. winex11-key_translation patchset
2018-12-13 08:37:37 +11:00
Alistair Leslie-Hughes
66148cb9b2 Updated wintab32-improvements patchset 2018-12-11 13:43:44 +11:00
Alistair Leslie-Hughes
cfbf5f7b86 Added winex11-key_translation patchset 2018-12-11 13:43:44 +11:00
Alistair Leslie-Hughes
6f1b2ab35a Added dinput-map_dik_codes patchset 2018-12-11 13:43:44 +11:00
Zebediah Figura
550e67b8a2 Rebase against 76bc23d8c6c1b2857cb7a4d14c5931094a12a82a. 2018-12-10 19:53:30 -06:00
Zebediah Figura
e45211698d wow64cpu-Wow64Transition: Load wow64cpu.dll after kernel32.dll.
Fixes bug 46251.
2018-12-10 19:48:41 -06:00
21 changed files with 1691 additions and 303 deletions

View File

@@ -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

View File

@@ -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

View 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)

View File

@@ -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

View File

@@ -1 +0,0 @@
Fixes: [19184] Do not reassign default handles after they got closed

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View 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)

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -0,0 +1 @@
Fixes: [30984] Improve key translation.

View File

@@ -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

View File

@@ -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

View File

@@ -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