Changeset View
Changeset View
Standalone View
Standalone View
files/d3d9-helper.patch
| From dee2148a8c602ee534a6966032e00cb7b483f086 Mon Sep 17 00:00:00 2001 | From 801df94f3ef6e792dae55916a1fd796fec221232 Mon Sep 17 00:00:00 2001 | ||||
| From: Nick Sarnie <sarnex@gentoo.org> | From: Nick Sarnie <sarnex@gentoo.org> | ||||
| Date: Sun, 13 May 2018 09:51:17 -0400 | Date: Mon, 11 Jun 2018 21:09:04 -0400 | ||||
| Subject: [PATCH] D3D9 Helper | Subject: [PATCH] D3D9 Helper | ||||
| Signed-off-by: Nick Sarnie <sarnex@gentoo.org> | Signed-off-by: Nick Sarnie <sarnex@gentoo.org> | ||||
| --- | --- | ||||
| dlls/ntdll/loader.c | 205 ++++++++++++++++++++---- | dlls/ntdll/loader.c | 205 ++++++++++++++++++++---- | ||||
| dlls/ntdll/loadorder.c | 298 ++++++++++++++++++++++++++--------- | dlls/ntdll/loadorder.c | 298 ++++++++++++++++++++++++++--------- | ||||
| dlls/ntdll/ntdll_misc.h | 1 + | dlls/ntdll/ntdll_misc.h | 1 + | ||||
| programs/winecfg/Makefile.in | 1 + | programs/winecfg/Makefile.in | 1 + | ||||
| programs/winecfg/main.c | 12 +- | programs/winecfg/main.c | 12 +- | ||||
| programs/winecfg/resource.h | 5 + | programs/winecfg/resource.h | 5 + | ||||
| programs/winecfg/staging.c | 93 +++++++++++ | programs/winecfg/staging.c | 93 +++++++++++ | ||||
| programs/winecfg/winecfg.h | 1 + | programs/winecfg/winecfg.h | 1 + | ||||
| programs/winecfg/winecfg.rc | 10 ++ | programs/winecfg/winecfg.rc | 10 ++ | ||||
| 9 files changed, 522 insertions(+), 104 deletions(-) | 9 files changed, 522 insertions(+), 104 deletions(-) | ||||
| create mode 100644 programs/winecfg/staging.c | create mode 100644 programs/winecfg/staging.c | ||||
| diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c | diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c | ||||
| index 1a3dd801a1..9276b5b17d 100644 | index 3e00ec6314..e026581352 100644 | ||||
| --- a/dlls/ntdll/loader.c | --- a/dlls/ntdll/loader.c | ||||
| +++ b/dlls/ntdll/loader.c | +++ b/dlls/ntdll/loader.c | ||||
| @@ -100,6 +100,7 @@ struct builtin_load_info | @@ -100,6 +100,7 @@ struct builtin_load_info | ||||
| { | { | ||||
| const WCHAR *load_path; | const WCHAR *load_path; | ||||
| const WCHAR *filename; | const WCHAR *filename; | ||||
| + const WCHAR *fakemodule; | + const WCHAR *fakemodule; | ||||
| NTSTATUS status; | NTSTATUS status; | ||||
| ▲ Show 20 Lines • Show All 58 Lines • ▼ Show 20 Lines | @@ -1045,7 +1047,7 @@ static WINE_MODREF *alloc_module( HMODULE hModule, LPCWSTR filename ) | ||||
| wm->ldr.TlsIndex = -1; | wm->ldr.TlsIndex = -1; | ||||
| wm->ldr.LoadCount = 1; | wm->ldr.LoadCount = 1; | ||||
| - RtlCreateUnicodeString( &wm->ldr.FullDllName, filename ); | - RtlCreateUnicodeString( &wm->ldr.FullDllName, filename ); | ||||
| + RtlCreateUnicodeString( &wm->ldr.FullDllName, fakemodule ? fakemodule : filename ); | + RtlCreateUnicodeString( &wm->ldr.FullDllName, fakemodule ? fakemodule : filename ); | ||||
| if ((p = strrchrW( wm->ldr.FullDllName.Buffer, '\\' ))) p++; | if ((p = strrchrW( wm->ldr.FullDllName.Buffer, '\\' ))) p++; | ||||
| else p = wm->ldr.FullDllName.Buffer; | else p = wm->ldr.FullDllName.Buffer; | ||||
| RtlInitUnicodeString( &wm->ldr.BaseDllName, p ); | RtlInitUnicodeString( &wm->ldr.BaseDllName, p ); | ||||
| @@ -1657,7 +1659,7 @@ static void load_builtin_callback( void *module, const char *filename ) | @@ -1676,7 +1678,7 @@ static void load_builtin_callback( void *module, const char *filename ) | ||||
| return; | return; | ||||
| } | } | ||||
| - wm = alloc_module( module, fullname ); | - wm = alloc_module( module, fullname ); | ||||
| + wm = alloc_module( module, fullname, builtin_load_info->fakemodule ); | + wm = alloc_module( module, fullname, builtin_load_info->fakemodule ); | ||||
| RtlFreeHeap( GetProcessHeap(), 0, fullname ); | RtlFreeHeap( GetProcessHeap(), 0, fullname ); | ||||
| if (!wm) | if (!wm) | ||||
| { | { | ||||
| @@ -1867,8 +1869,8 @@ static BOOL is_valid_binary( HMODULE module, const pe_image_info_t *info ) | @@ -1886,8 +1888,8 @@ static BOOL is_valid_binary( HMODULE module, const pe_image_info_t *info ) | ||||
| /****************************************************************************** | /****************************************************************************** | ||||
| * load_native_dll (internal) | * load_native_dll (internal) | ||||
| */ | */ | ||||
| -static NTSTATUS load_native_dll( LPCWSTR load_path, LPCWSTR name, HANDLE file, | -static NTSTATUS load_native_dll( LPCWSTR load_path, LPCWSTR name, HANDLE file, | ||||
| - DWORD flags, WINE_MODREF** pwm, struct stat *st ) | - DWORD flags, WINE_MODREF** pwm, struct stat *st ) | ||||
| +static NTSTATUS load_native_dll( LPCWSTR load_path, LPCWSTR name, LPCWSTR fakemodule, | +static NTSTATUS load_native_dll( LPCWSTR load_path, LPCWSTR name, LPCWSTR fakemodule, | ||||
| + HANDLE file, DWORD flags, WINE_MODREF** pwm, struct stat *st ) | + HANDLE file, DWORD flags, WINE_MODREF** pwm, struct stat *st ) | ||||
| { | { | ||||
| void *module; | void *module; | ||||
| HANDLE mapping; | HANDLE mapping; | ||||
| @@ -1911,7 +1913,7 @@ static NTSTATUS load_native_dll( LPCWSTR load_path, LPCWSTR name, HANDLE file, | @@ -1930,7 +1932,7 @@ static NTSTATUS load_native_dll( LPCWSTR load_path, LPCWSTR name, HANDLE file, | ||||
| /* create the MODREF */ | /* create the MODREF */ | ||||
| - if (!(wm = alloc_module( module, name ))) | - if (!(wm = alloc_module( module, name ))) | ||||
| + if (!(wm = alloc_module( module, name, fakemodule ))) | + if (!(wm = alloc_module( module, name, fakemodule ))) | ||||
| { | { | ||||
| if (module) NtUnmapViewOfSection( NtCurrentProcess(), module ); | if (module) NtUnmapViewOfSection( NtCurrentProcess(), module ); | ||||
| return STATUS_NO_MEMORY; | return STATUS_NO_MEMORY; | ||||
| @@ -1979,8 +1981,8 @@ static NTSTATUS load_native_dll( LPCWSTR load_path, LPCWSTR name, HANDLE file, | @@ -1998,8 +2000,8 @@ static NTSTATUS load_native_dll( LPCWSTR load_path, LPCWSTR name, HANDLE file, | ||||
| /*********************************************************************** | /*********************************************************************** | ||||
| * load_builtin_dll | * load_builtin_dll | ||||
| */ | */ | ||||
| -static NTSTATUS load_builtin_dll( LPCWSTR load_path, LPCWSTR path, HANDLE file, | -static NTSTATUS load_builtin_dll( LPCWSTR load_path, LPCWSTR path, HANDLE file, | ||||
| - DWORD flags, WINE_MODREF** pwm ) | - DWORD flags, WINE_MODREF** pwm ) | ||||
| +static NTSTATUS load_builtin_dll( LPCWSTR load_path, LPCWSTR path, LPCWSTR fakemodule, | +static NTSTATUS load_builtin_dll( LPCWSTR load_path, LPCWSTR path, LPCWSTR fakemodule, | ||||
| + HANDLE file, DWORD flags, WINE_MODREF** pwm ) | + HANDLE file, DWORD flags, WINE_MODREF** pwm ) | ||||
| { | { | ||||
| char error[256], dllname[MAX_PATH]; | char error[256], dllname[MAX_PATH]; | ||||
| const WCHAR *name, *p; | const WCHAR *name, *p; | ||||
| @@ -2000,6 +2002,7 @@ static NTSTATUS load_builtin_dll( LPCWSTR load_path, LPCWSTR path, HANDLE file, | @@ -2019,6 +2021,7 @@ static NTSTATUS load_builtin_dll( LPCWSTR load_path, LPCWSTR path, HANDLE file, | ||||
| */ | */ | ||||
| info.load_path = load_path; | info.load_path = load_path; | ||||
| info.filename = NULL; | info.filename = NULL; | ||||
| + info.fakemodule = fakemodule; | + info.fakemodule = fakemodule; | ||||
| info.status = STATUS_SUCCESS; | info.status = STATUS_SUCCESS; | ||||
| info.wm = NULL; | info.wm = NULL; | ||||
| @@ -2198,6 +2201,108 @@ done: | @@ -2217,6 +2220,108 @@ done: | ||||
| return status; | return status; | ||||
| } | } | ||||
| +#if defined(__i386__) | +#if defined(__i386__) | ||||
| +#define CURRENT_ARCH IMAGE_FILE_MACHINE_I386 | +#define CURRENT_ARCH IMAGE_FILE_MACHINE_I386 | ||||
| +#elif defined(__x86_64__) | +#elif defined(__x86_64__) | ||||
| +#define CURRENT_ARCH IMAGE_FILE_MACHINE_AMD64 | +#define CURRENT_ARCH IMAGE_FILE_MACHINE_AMD64 | ||||
| +#elif defined(__arm__) | +#elif defined(__arm__) | ||||
| ▲ Show 20 Lines • Show All 92 Lines • ▼ Show 20 Lines | |||||
| + return ext_header.FileHeader.Machine; | + return ext_header.FileHeader.Machine; | ||||
| + } | + } | ||||
| + | + | ||||
| + return 0; | + return 0; | ||||
| +} | +} | ||||
| /*********************************************************************** | /*********************************************************************** | ||||
| * open_dll_file | * open_dll_file | ||||
| @@ -2244,7 +2349,7 @@ static HANDLE open_dll_file( UNICODE_STRING *nt_name, WINE_MODREF **pwm, struct | @@ -2263,7 +2368,7 @@ static HANDLE open_dll_file( UNICODE_STRING *nt_name, WINE_MODREF **pwm, struct | ||||
| */ | */ | ||||
| static NTSTATUS find_dll_file( const WCHAR *load_path, const WCHAR *libname, | static NTSTATUS find_dll_file( const WCHAR *load_path, const WCHAR *libname, | ||||
| WCHAR *filename, ULONG *size, WINE_MODREF **pwm, | WCHAR *filename, ULONG *size, WINE_MODREF **pwm, | ||||
| - HANDLE *handle, struct stat *st ) | - HANDLE *handle, struct stat *st ) | ||||
| + HANDLE *handle, struct stat *st, BOOL check_arch ) | + HANDLE *handle, struct stat *st, BOOL check_arch ) | ||||
| { | { | ||||
| UNICODE_STRING nt_name; | UNICODE_STRING nt_name; | ||||
| WCHAR *file_part, *ext, *dllname; | WCHAR *file_part, *ext, *dllname; | ||||
| @@ -2289,20 +2394,41 @@ static NTSTATUS find_dll_file( const WCHAR *load_path, const WCHAR *libname, | @@ -2308,20 +2413,41 @@ static NTSTATUS find_dll_file( const WCHAR *load_path, const WCHAR *libname, | ||||
| if (RtlDetermineDosPathNameType_U( libname ) == RELATIVE_PATH) | if (RtlDetermineDosPathNameType_U( libname ) == RELATIVE_PATH) | ||||
| { | { | ||||
| - /* we need to search for it */ | - /* we need to search for it */ | ||||
| - len = RtlDosSearchPath_U( load_path, libname, NULL, *size, filename, &file_part ); | - len = RtlDosSearchPath_U( load_path, libname, NULL, *size, filename, &file_part ); | ||||
| - if (len) | - if (len) | ||||
| + while (load_path) | + while (load_path) | ||||
| { | { | ||||
| Show All 29 Lines | |||||
| + if (*handle) goto found; | + if (*handle) goto found; | ||||
| + | + | ||||
| + next: | + next: | ||||
| + load_path = strchrW(load_path, ';'); | + load_path = strchrW(load_path, ';'); | ||||
| + if (load_path) load_path++; | + if (load_path) load_path++; | ||||
| } | } | ||||
| /* not found */ | /* not found */ | ||||
| @@ -2350,8 +2476,10 @@ overflow: | @@ -2369,8 +2495,10 @@ overflow: | ||||
| * Load a PE style module according to the load order. | * Load a PE style module according to the load order. | ||||
| * The loader_section must be locked while calling this function. | * The loader_section must be locked while calling this function. | ||||
| */ | */ | ||||
| -static NTSTATUS load_dll( LPCWSTR load_path, LPCWSTR libname, DWORD flags, WINE_MODREF** pwm ) | -static NTSTATUS load_dll( LPCWSTR load_path, LPCWSTR libname, DWORD flags, WINE_MODREF** pwm ) | ||||
| +static NTSTATUS load_dll( LPCWSTR load_path, LPCWSTR libname, LPCWSTR fakemodule, | +static NTSTATUS load_dll( LPCWSTR load_path, LPCWSTR libname, LPCWSTR fakemodule, | ||||
| + DWORD flags, WINE_MODREF** pwm ) | + DWORD flags, WINE_MODREF** pwm ) | ||||
| { | { | ||||
| + BOOL data = flags & (LOAD_LIBRARY_AS_DATAFILE | LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE); | + BOOL data = flags & (LOAD_LIBRARY_AS_DATAFILE | LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE); | ||||
| enum loadorder loadorder; | enum loadorder loadorder; | ||||
| WCHAR buffer[64]; | WCHAR buffer[64]; | ||||
| WCHAR *filename; | WCHAR *filename; | ||||
| @@ -2368,7 +2496,7 @@ static NTSTATUS load_dll( LPCWSTR load_path, LPCWSTR libname, DWORD flags, WINE_ | @@ -2387,7 +2515,7 @@ static NTSTATUS load_dll( LPCWSTR load_path, LPCWSTR libname, DWORD flags, WINE_ | ||||
| size = sizeof(buffer); | size = sizeof(buffer); | ||||
| for (;;) | for (;;) | ||||
| { | { | ||||
| - nts = find_dll_file( load_path, libname, filename, &size, pwm, &handle, &st ); | - nts = find_dll_file( load_path, libname, filename, &size, pwm, &handle, &st ); | ||||
| + nts = find_dll_file( load_path, libname, filename, &size, pwm, &handle, &st, !data ); | + nts = find_dll_file( load_path, libname, filename, &size, pwm, &handle, &st, !data ); | ||||
| if (nts == STATUS_SUCCESS) break; | if (nts == STATUS_SUCCESS) break; | ||||
| if (filename != buffer) RtlFreeHeap( GetProcessHeap(), 0, filename ); | if (filename != buffer) RtlFreeHeap( GetProcessHeap(), 0, filename ); | ||||
| if (nts != STATUS_BUFFER_TOO_SMALL) return nts; | if (nts != STATUS_BUFFER_TOO_SMALL) return nts; | ||||
| @@ -2388,6 +2516,25 @@ static NTSTATUS load_dll( LPCWSTR load_path, LPCWSTR libname, DWORD flags, WINE_ | @@ -2407,6 +2535,25 @@ static NTSTATUS load_dll( LPCWSTR load_path, LPCWSTR libname, DWORD flags, WINE_ | ||||
| } | } | ||||
| main_exe = get_modref( NtCurrentTeb()->Peb->ImageBaseAddress ); | main_exe = get_modref( NtCurrentTeb()->Peb->ImageBaseAddress ); | ||||
| + | + | ||||
| + /* handle dll redirection */ | + /* handle dll redirection */ | ||||
| + if (!fakemodule) | + if (!fakemodule) | ||||
| + { | + { | ||||
| + BYTE buffer2[sizeof(KEY_VALUE_PARTIAL_INFORMATION) + MAX_PATH * sizeof(WCHAR)]; | + BYTE buffer2[sizeof(KEY_VALUE_PARTIAL_INFORMATION) + MAX_PATH * sizeof(WCHAR)]; | ||||
| Show All 9 Lines | |||||
| + if (filename != buffer) RtlFreeHeap( GetProcessHeap(), 0, filename ); | + if (filename != buffer) RtlFreeHeap( GetProcessHeap(), 0, filename ); | ||||
| + return nts; | + return nts; | ||||
| + } | + } | ||||
| + } | + } | ||||
| + | + | ||||
| loadorder = get_load_order( main_exe ? main_exe->ldr.BaseDllName.Buffer : NULL, filename ); | loadorder = get_load_order( main_exe ? main_exe->ldr.BaseDllName.Buffer : NULL, filename ); | ||||
| if (handle && is_fake_dll( handle )) | if (handle && is_fake_dll( handle )) | ||||
| @@ -2410,22 +2557,22 @@ static NTSTATUS load_dll( LPCWSTR load_path, LPCWSTR libname, DWORD flags, WINE_ | @@ -2429,22 +2576,22 @@ static NTSTATUS load_dll( LPCWSTR load_path, LPCWSTR libname, DWORD flags, WINE_ | ||||
| if (!handle) nts = STATUS_DLL_NOT_FOUND; | if (!handle) nts = STATUS_DLL_NOT_FOUND; | ||||
| else | else | ||||
| { | { | ||||
| - nts = load_native_dll( load_path, filename, handle, flags, pwm, &st ); | - nts = load_native_dll( load_path, filename, handle, flags, pwm, &st ); | ||||
| + nts = load_native_dll( load_path, filename, fakemodule, handle, flags, pwm, &st ); | + nts = load_native_dll( load_path, filename, fakemodule, handle, flags, pwm, &st ); | ||||
| if (nts == STATUS_INVALID_IMAGE_NOT_MZ) | if (nts == STATUS_INVALID_IMAGE_NOT_MZ) | ||||
| /* not in PE format, maybe it's a builtin */ | /* not in PE format, maybe it's a builtin */ | ||||
| - nts = load_builtin_dll( load_path, filename, handle, flags, pwm ); | - nts = load_builtin_dll( load_path, filename, handle, flags, pwm ); | ||||
| Show All 11 Lines | + nts = load_builtin_dll( load_path, filename, fakemodule, handle, flags, pwm ); | ||||
| if (!handle) break; /* nothing else we can try */ | if (!handle) break; /* nothing else we can try */ | ||||
| /* file is not a builtin library, try without using the specified file */ | /* file is not a builtin library, try without using the specified file */ | ||||
| if (nts != STATUS_SUCCESS) | if (nts != STATUS_SUCCESS) | ||||
| - nts = load_builtin_dll( load_path, filename, 0, flags, pwm ); | - nts = load_builtin_dll( load_path, filename, 0, flags, pwm ); | ||||
| + nts = load_builtin_dll( load_path, filename, fakemodule, 0, flags, pwm ); | + nts = load_builtin_dll( load_path, filename, fakemodule, 0, flags, pwm ); | ||||
| if (nts == STATUS_SUCCESS && loadorder == LO_DEFAULT && | if (nts == STATUS_SUCCESS && loadorder == LO_DEFAULT && | ||||
| (MODULE_InitDLL( *pwm, DLL_WINE_PREATTACH, NULL ) != STATUS_SUCCESS)) | (MODULE_InitDLL( *pwm, DLL_WINE_PREATTACH, NULL ) != STATUS_SUCCESS)) | ||||
| { | { | ||||
| @@ -2435,7 +2582,7 @@ static NTSTATUS load_dll( LPCWSTR load_path, LPCWSTR libname, DWORD flags, WINE_ | @@ -2454,7 +2601,7 @@ static NTSTATUS load_dll( LPCWSTR load_path, LPCWSTR libname, DWORD flags, WINE_ | ||||
| nts = STATUS_DLL_NOT_FOUND; | nts = STATUS_DLL_NOT_FOUND; | ||||
| } | } | ||||
| if (nts == STATUS_DLL_NOT_FOUND && loadorder != LO_BUILTIN) | if (nts == STATUS_DLL_NOT_FOUND && loadorder != LO_BUILTIN) | ||||
| - nts = load_native_dll( load_path, filename, handle, flags, pwm, &st ); | - nts = load_native_dll( load_path, filename, handle, flags, pwm, &st ); | ||||
| + nts = load_native_dll( load_path, filename, fakemodule, handle, flags, pwm, &st ); | + nts = load_native_dll( load_path, filename, fakemodule, handle, flags, pwm, &st ); | ||||
| break; | break; | ||||
| } | } | ||||
| @@ -2468,7 +2615,7 @@ NTSTATUS WINAPI DECLSPEC_HOTPATCH LdrLoadDll(LPCWSTR path_name, DWORD flags, | @@ -2487,7 +2634,7 @@ NTSTATUS WINAPI DECLSPEC_HOTPATCH LdrLoadDll(LPCWSTR path_name, DWORD flags, | ||||
| RtlEnterCriticalSection( &loader_section ); | RtlEnterCriticalSection( &loader_section ); | ||||
| if (!path_name) path_name = NtCurrentTeb()->Peb->ProcessParameters->DllPath.Buffer; | if (!path_name) path_name = NtCurrentTeb()->Peb->ProcessParameters->DllPath.Buffer; | ||||
| - nts = load_dll( path_name, libname->Buffer, flags, &wm ); | - nts = load_dll( path_name, libname->Buffer, flags, &wm ); | ||||
| + nts = load_dll( path_name, libname->Buffer, NULL, flags, &wm ); | + nts = load_dll( path_name, libname->Buffer, NULL, flags, &wm ); | ||||
| if (nts == STATUS_SUCCESS && !(wm->ldr.Flags & LDR_DONT_RESOLVE_REFS)) | if (nts == STATUS_SUCCESS && !(wm->ldr.Flags & LDR_DONT_RESOLVE_REFS)) | ||||
| { | { | ||||
| @@ -2507,7 +2654,7 @@ NTSTATUS WINAPI LdrGetDllHandle( LPCWSTR load_path, ULONG flags, const UNICODE_S | @@ -2526,7 +2673,7 @@ NTSTATUS WINAPI LdrGetDllHandle( LPCWSTR load_path, ULONG flags, const UNICODE_S | ||||
| size = sizeof(buffer); | size = sizeof(buffer); | ||||
| for (;;) | for (;;) | ||||
| { | { | ||||
| - status = find_dll_file( load_path, name->Buffer, filename, &size, &wm, &handle, &st ); | - status = find_dll_file( load_path, name->Buffer, filename, &size, &wm, &handle, &st ); | ||||
| + status = find_dll_file( load_path, name->Buffer, filename, &size, &wm, &handle, &st, TRUE ); | + status = find_dll_file( load_path, name->Buffer, filename, &size, &wm, &handle, &st, TRUE ); | ||||
| if (handle) NtClose( handle ); | if (handle) NtClose( handle ); | ||||
| if (filename != buffer) RtlFreeHeap( GetProcessHeap(), 0, filename ); | if (filename != buffer) RtlFreeHeap( GetProcessHeap(), 0, filename ); | ||||
| if (status != STATUS_BUFFER_TOO_SMALL) break; | if (status != STATUS_BUFFER_TOO_SMALL) break; | ||||
| @@ -3429,7 +3576,7 @@ void __wine_process_init(void) | @@ -3448,7 +3595,7 @@ void __wine_process_init(void) | ||||
| /* setup the load callback and create ntdll modref */ | /* setup the load callback and create ntdll modref */ | ||||
| wine_dll_set_callback( load_builtin_callback ); | wine_dll_set_callback( load_builtin_callback ); | ||||
| - if ((status = load_builtin_dll( NULL, kernel32W, 0, 0, &wm )) != STATUS_SUCCESS) | - 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) | + if ((status = load_builtin_dll( NULL, kernel32W, NULL, 0, 0, &wm )) != STATUS_SUCCESS) | ||||
| { | { | ||||
| MESSAGE( "wine: could not load kernel32.dll, status %x\n", status ); | MESSAGE( "wine: could not load kernel32.dll, status %x\n", status ); | ||||
| exit(1); | exit(1); | ||||
| ▲ Show 20 Lines • Show All 561 Lines • ▼ Show 20 Lines | |||||
| + SendMessageW(GetParent(hDlg), PSM_CHANGED, 0, 0); | + SendMessageW(GetParent(hDlg), PSM_CHANGED, 0, 0); | ||||
| + return TRUE; | + return TRUE; | ||||
| + } | + } | ||||
| + break; | + break; | ||||
| + } | + } | ||||
| + return FALSE; | + return FALSE; | ||||
| +} | +} | ||||
| diff --git a/programs/winecfg/winecfg.h b/programs/winecfg/winecfg.h | diff --git a/programs/winecfg/winecfg.h b/programs/winecfg/winecfg.h | ||||
| index 110856a536..a94947439c 100644 | index f2c24a2012..bbe60e4c5c 100644 | ||||
| --- a/programs/winecfg/winecfg.h | --- a/programs/winecfg/winecfg.h | ||||
| +++ b/programs/winecfg/winecfg.h | +++ b/programs/winecfg/winecfg.h | ||||
| @@ -87,6 +87,7 @@ INT_PTR CALLBACK AppDlgProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) | @@ -89,6 +89,7 @@ INT_PTR CALLBACK AppDlgProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) | ||||
| INT_PTR CALLBACK LibrariesDlgProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); | INT_PTR CALLBACK LibrariesDlgProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); | ||||
| INT_PTR CALLBACK AudioDlgProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); | INT_PTR CALLBACK AudioDlgProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); | ||||
| INT_PTR CALLBACK ThemeDlgProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); | INT_PTR CALLBACK ThemeDlgProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); | ||||
| +INT_PTR CALLBACK StagingDlgProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); | +INT_PTR CALLBACK StagingDlgProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); | ||||
| INT_PTR CALLBACK AboutDlgProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); | INT_PTR CALLBACK AboutDlgProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); | ||||
| /* Drive management */ | /* Drive management */ | ||||
| diff --git a/programs/winecfg/winecfg.rc b/programs/winecfg/winecfg.rc | diff --git a/programs/winecfg/winecfg.rc b/programs/winecfg/winecfg.rc | ||||
| Show All 20 Lines | |||||
| + LTEXT "The following settings are experimental and may break stuff!\nMake sure to reset them again in case of a problem.\nGallium Nine requires MESA graphic drivers and AMD/Nvidia GPU.\n",IDC_STATIC,16,16,230,24 | + LTEXT "The following settings are experimental and may break stuff!\nMake sure to reset them again in case of a problem.\nGallium Nine requires MESA graphic drivers and AMD/Nvidia GPU.\n",IDC_STATIC,16,16,230,24 | ||||
| + CONTROL "Enable &Gallium Nine for better D3D9 graphic performance.",IDC_ENABLE_NATIVE_D3D9,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,40,230,8 | + CONTROL "Enable &Gallium Nine for better D3D9 graphic performance.",IDC_ENABLE_NATIVE_D3D9,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,40,230,8 | ||||
| +END | +END | ||||
| + | + | ||||
| LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL | LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL | ||||
| /* @makedep: winecfg.ico */ | /* @makedep: winecfg.ico */ | ||||
| -- | -- | ||||
| 2.17.0 | 2.17.1 | ||||
Copyright © 2015-2021 Solus Project. The Solus logo is Copyright © 2016-2021 Solus Project. All Rights Reserved.