mirror of
https://gitlab.winehq.org/wine/wine-staging.git
synced 2024-11-21 16:46:54 -08:00
Rebase against 2a505efb1ca14f33503657eb070de6edd484b4f3.
This commit is contained in:
parent
daec2e3662
commit
08912e4896
@ -1,4 +1,4 @@
|
||||
From 92401268a87c4b5dd5dcb029303ced740b019a59 Mon Sep 17 00:00:00 2001
|
||||
From 7dccf4db15b800a7781fea24b357b5c804802993 Mon Sep 17 00:00:00 2001
|
||||
From: Zebediah Figura <z.figura12@gmail.com>
|
||||
Date: Mon, 31 Aug 2020 23:38:09 -0500
|
||||
Subject: [PATCH] ntdll: Reimplement the critical section fast path on top of
|
||||
@ -83,10 +83,10 @@ index c73fb09da47..6edf104c5e9 100644
|
||||
return ret;
|
||||
}
|
||||
diff --git a/dlls/ntdll/unix/loader.c b/dlls/ntdll/unix/loader.c
|
||||
index 6626e02139b..1fb2d79dc8e 100644
|
||||
index e9942c0ceeb..5abdc1dc545 100644
|
||||
--- a/dlls/ntdll/unix/loader.c
|
||||
+++ b/dlls/ntdll/unix/loader.c
|
||||
@@ -1811,9 +1811,6 @@ static struct unix_funcs unix_funcs =
|
||||
@@ -1822,9 +1822,6 @@ static struct unix_funcs unix_funcs =
|
||||
#endif
|
||||
DbgUiIssueRemoteBreakin,
|
||||
RtlGetSystemTimePrecise,
|
||||
@ -97,10 +97,10 @@ index 6626e02139b..1fb2d79dc8e 100644
|
||||
fast_RtlAcquireSRWLockExclusive,
|
||||
fast_RtlTryAcquireSRWLockShared,
|
||||
diff --git a/dlls/ntdll/unix/sync.c b/dlls/ntdll/unix/sync.c
|
||||
index d8663e47ee6..302698dc5b6 100644
|
||||
index 5e49593fa4a..84f7c937be3 100644
|
||||
--- a/dlls/ntdll/unix/sync.c
|
||||
+++ b/dlls/ntdll/unix/sync.c
|
||||
@@ -2497,115 +2497,6 @@ NTSTATUS WINAPI NtWaitForAlertByThreadId( const void *address, const LARGE_INTEG
|
||||
@@ -2553,115 +2553,6 @@ NTSTATUS WINAPI NtWaitForAlertByThreadId( const void *address, const LARGE_INTEG
|
||||
|
||||
#endif
|
||||
|
||||
@ -217,13 +217,13 @@ index d8663e47ee6..302698dc5b6 100644
|
||||
|
||||
/* Futex-based SRW lock implementation:
|
||||
diff --git a/dlls/ntdll/unix/unix_private.h b/dlls/ntdll/unix/unix_private.h
|
||||
index 15a4387bdc0..bac75ac2d13 100644
|
||||
index a721a29dc5a..c9793da8ec1 100644
|
||||
--- a/dlls/ntdll/unix/unix_private.h
|
||||
+++ b/dlls/ntdll/unix/unix_private.h
|
||||
@@ -97,9 +97,6 @@ extern void (WINAPI *pKiUserApcDispatcher)(CONTEXT*,ULONG_PTR,ULONG_PTR,ULON
|
||||
extern NTSTATUS (WINAPI *pKiUserExceptionDispatcher)(EXCEPTION_RECORD*,CONTEXT*) DECLSPEC_HIDDEN;
|
||||
@@ -104,9 +104,6 @@ extern NTSTATUS (WINAPI *pKiUserExceptionDispatcher)(EXCEPTION_RECORD*,CONTEXT*)
|
||||
extern void (WINAPI *pLdrInitializeThunk)(CONTEXT*,void**,ULONG_PTR,ULONG_PTR) DECLSPEC_HIDDEN;
|
||||
extern void (WINAPI *pRtlUserThreadStart)( PRTL_THREAD_START_ROUTINE entry, void *arg ) DECLSPEC_HIDDEN;
|
||||
extern void (WINAPI *p__wine_ctrl_routine)(void *) DECLSPEC_HIDDEN;
|
||||
-extern NTSTATUS CDECL fast_RtlpWaitForCriticalSection( RTL_CRITICAL_SECTION *crit, int timeout ) DECLSPEC_HIDDEN;
|
||||
-extern NTSTATUS CDECL fast_RtlpUnWaitCriticalSection( RTL_CRITICAL_SECTION *crit ) DECLSPEC_HIDDEN;
|
||||
-extern NTSTATUS CDECL fast_RtlDeleteCriticalSection( RTL_CRITICAL_SECTION *crit ) DECLSPEC_HIDDEN;
|
||||
|
@ -1,4 +1,4 @@
|
||||
From ef3f578935c35d108f1f44506a27c64741f30d12 Mon Sep 17 00:00:00 2001
|
||||
From 79a9bdf605de59b3f1800ef577327af6fa565b62 Mon Sep 17 00:00:00 2001
|
||||
From: Zebediah Figura <z.figura12@gmail.com>
|
||||
Date: Sun, 22 Nov 2020 20:51:10 -0600
|
||||
Subject: [PATCH] ntdll: Reimplement SRW locks on top of Win32 futexes.
|
||||
@ -74,15 +74,13 @@ index 4b92379a0ff..2edc9f8d558 100644
|
||||
-#endif
|
||||
-
|
||||
-static inline void srwlock_check_invalid( unsigned int val )
|
||||
+struct srw_lock
|
||||
{
|
||||
-{
|
||||
- /* Throw exception if it's impossible to acquire/release this lock. */
|
||||
- if ((val & SRWLOCK_MASK_EXCLUSIVE_QUEUE) == SRWLOCK_MASK_EXCLUSIVE_QUEUE ||
|
||||
- (val & SRWLOCK_MASK_SHARED_QUEUE) == SRWLOCK_MASK_SHARED_QUEUE)
|
||||
- RtlRaiseStatus(STATUS_RESOURCE_NOT_OWNED);
|
||||
-}
|
||||
+ short exclusive_waiters;
|
||||
|
||||
-
|
||||
-static inline unsigned int srwlock_lock_exclusive( unsigned int *dest, int incr )
|
||||
-{
|
||||
- unsigned int val, tmp;
|
||||
@ -122,7 +120,8 @@ index 4b92379a0ff..2edc9f8d558 100644
|
||||
-}
|
||||
-
|
||||
-static inline void srwlock_leave_exclusive( RTL_SRWLOCK *lock, unsigned int val )
|
||||
-{
|
||||
+struct srw_lock
|
||||
{
|
||||
- /* Used when a thread leaves an exclusive section. If there are other
|
||||
- * exclusive access threads they are processed first, followed by
|
||||
- * the shared waiters. */
|
||||
@ -135,7 +134,8 @@ index 4b92379a0ff..2edc9f8d558 100644
|
||||
- NtReleaseKeyedEvent( 0, srwlock_key_shared(lock), FALSE, NULL );
|
||||
- }
|
||||
-}
|
||||
-
|
||||
+ short exclusive_waiters;
|
||||
|
||||
-static inline void srwlock_leave_shared( RTL_SRWLOCK *lock, unsigned int val )
|
||||
-{
|
||||
- /* Wake up one exclusive thread as soon as the last shared access thread
|
||||
@ -167,9 +167,7 @@ index 4b92379a0ff..2edc9f8d558 100644
|
||||
- if (unix_funcs->fast_RtlAcquireSRWLockExclusive( lock ) != STATUS_NOT_IMPLEMENTED)
|
||||
- return;
|
||||
+ union { RTL_SRWLOCK *rtl; struct srw_lock *s; LONG *l; } u = { lock };
|
||||
|
||||
- if (srwlock_lock_exclusive( (unsigned int *)&lock->Ptr, SRWLOCK_RES_EXCLUSIVE ))
|
||||
- NtWaitForKeyedEvent( 0, srwlock_key_exclusive(lock), FALSE, NULL );
|
||||
+
|
||||
+ InterlockedIncrement16( &u.s->exclusive_waiters );
|
||||
+
|
||||
+ for (;;)
|
||||
@ -194,7 +192,9 @@ index 4b92379a0ff..2edc9f8d558 100644
|
||||
+ wait = TRUE;
|
||||
+ }
|
||||
+ } while (InterlockedCompareExchange( u.l, new.l, old.l ) != old.l);
|
||||
+
|
||||
|
||||
- if (srwlock_lock_exclusive( (unsigned int *)&lock->Ptr, SRWLOCK_RES_EXCLUSIVE ))
|
||||
- NtWaitForKeyedEvent( 0, srwlock_key_exclusive(lock), FALSE, NULL );
|
||||
+ if (!wait) return;
|
||||
+ RtlWaitOnAddress( &u.s->owners, &new.s.owners, sizeof(short), NULL );
|
||||
+ }
|
||||
@ -206,11 +206,11 @@ index 4b92379a0ff..2edc9f8d558 100644
|
||||
void WINAPI RtlAcquireSRWLockShared( RTL_SRWLOCK *lock )
|
||||
{
|
||||
- unsigned int val, tmp;
|
||||
+ union { RTL_SRWLOCK *rtl; struct srw_lock *s; LONG *l; } u = { lock };
|
||||
|
||||
-
|
||||
- if (unix_funcs->fast_RtlAcquireSRWLockShared( lock ) != STATUS_NOT_IMPLEMENTED)
|
||||
- return;
|
||||
-
|
||||
+ union { RTL_SRWLOCK *rtl; struct srw_lock *s; LONG *l; } u = { lock };
|
||||
|
||||
- /* Acquires a shared lock. If it's currently not possible to add elements to
|
||||
- * the shared queue, then request exclusive access instead. */
|
||||
- for (val = *(unsigned int *)&lock->Ptr;; val = tmp)
|
||||
@ -268,16 +268,16 @@ index 4b92379a0ff..2edc9f8d558 100644
|
||||
- return;
|
||||
+ union { RTL_SRWLOCK *rtl; struct srw_lock *s; LONG *l; } u = { lock };
|
||||
+ union { struct srw_lock s; LONG l; } old, new;
|
||||
|
||||
- srwlock_leave_exclusive( lock, srwlock_unlock_exclusive( (unsigned int *)&lock->Ptr,
|
||||
- - SRWLOCK_RES_EXCLUSIVE ) - SRWLOCK_RES_EXCLUSIVE );
|
||||
+
|
||||
+ do
|
||||
+ {
|
||||
+ old.s = *u.s;
|
||||
+ new = old;
|
||||
+
|
||||
+ if (old.s.owners != -1) ERR("Lock %p is not owned exclusive!\n", lock);
|
||||
+
|
||||
|
||||
- srwlock_leave_exclusive( lock, srwlock_unlock_exclusive( (unsigned int *)&lock->Ptr,
|
||||
- - SRWLOCK_RES_EXCLUSIVE ) - SRWLOCK_RES_EXCLUSIVE );
|
||||
+ new.s.owners = 0;
|
||||
+ } while (InterlockedCompareExchange( u.l, new.l, old.l ) != old.l);
|
||||
+
|
||||
@ -296,9 +296,7 @@ index 4b92379a0ff..2edc9f8d558 100644
|
||||
- return;
|
||||
+ union { RTL_SRWLOCK *rtl; struct srw_lock *s; LONG *l; } u = { lock };
|
||||
+ union { struct srw_lock s; LONG l; } old, new;
|
||||
|
||||
- srwlock_leave_shared( lock, srwlock_lock_exclusive( (unsigned int *)&lock->Ptr,
|
||||
- - SRWLOCK_RES_SHARED ) - SRWLOCK_RES_SHARED );
|
||||
+
|
||||
+ do
|
||||
+ {
|
||||
+ old.s = *u.s;
|
||||
@ -306,7 +304,9 @@ index 4b92379a0ff..2edc9f8d558 100644
|
||||
+
|
||||
+ if (old.s.owners == -1) ERR("Lock %p is owned exclusive!\n", lock);
|
||||
+ else if (!old.s.owners) ERR("Lock %p is not owned shared!\n", lock);
|
||||
+
|
||||
|
||||
- srwlock_leave_shared( lock, srwlock_lock_exclusive( (unsigned int *)&lock->Ptr,
|
||||
- - SRWLOCK_RES_SHARED ) - SRWLOCK_RES_SHARED );
|
||||
+ --new.s.owners;
|
||||
+ } while (InterlockedCompareExchange( u.l, new.l, old.l ) != old.l);
|
||||
+
|
||||
@ -392,10 +392,10 @@ index 4b92379a0ff..2edc9f8d558 100644
|
||||
|
||||
/***********************************************************************
|
||||
diff --git a/dlls/ntdll/unix/loader.c b/dlls/ntdll/unix/loader.c
|
||||
index 73f22b83b3d..09e8c849ac4 100644
|
||||
index e40bff5ba3e..d88be456bff 100644
|
||||
--- a/dlls/ntdll/unix/loader.c
|
||||
+++ b/dlls/ntdll/unix/loader.c
|
||||
@@ -1811,12 +1811,6 @@ static struct unix_funcs unix_funcs =
|
||||
@@ -1822,12 +1822,6 @@ static struct unix_funcs unix_funcs =
|
||||
#endif
|
||||
DbgUiIssueRemoteBreakin,
|
||||
RtlGetSystemTimePrecise,
|
||||
@ -409,10 +409,10 @@ index 73f22b83b3d..09e8c849ac4 100644
|
||||
ntdll_ceil,
|
||||
ntdll_cos,
|
||||
diff --git a/dlls/ntdll/unix/sync.c b/dlls/ntdll/unix/sync.c
|
||||
index 45472a72ed8..1e790962425 100644
|
||||
index 45b0b03bda0..82094813570 100644
|
||||
--- a/dlls/ntdll/unix/sync.c
|
||||
+++ b/dlls/ntdll/unix/sync.c
|
||||
@@ -117,8 +117,6 @@ static inline ULONGLONG monotonic_counter(void)
|
||||
@@ -118,8 +118,6 @@ static inline ULONGLONG monotonic_counter(void)
|
||||
|
||||
#define FUTEX_WAIT 0
|
||||
#define FUTEX_WAKE 1
|
||||
@ -421,7 +421,7 @@ index 45472a72ed8..1e790962425 100644
|
||||
|
||||
static int futex_private = 128;
|
||||
|
||||
@@ -132,16 +130,6 @@ static inline int futex_wake( const int *addr, int val )
|
||||
@@ -133,16 +131,6 @@ static inline int futex_wake( const int *addr, int val )
|
||||
return syscall( __NR_futex, addr, FUTEX_WAKE | futex_private, val, NULL, 0, 0 );
|
||||
}
|
||||
|
||||
@ -438,7 +438,7 @@ index 45472a72ed8..1e790962425 100644
|
||||
static inline int use_futexes(void)
|
||||
{
|
||||
static int supported = -1;
|
||||
@@ -159,16 +147,6 @@ static inline int use_futexes(void)
|
||||
@@ -160,16 +148,6 @@ static inline int use_futexes(void)
|
||||
return supported;
|
||||
}
|
||||
|
||||
@ -455,7 +455,7 @@ index 45472a72ed8..1e790962425 100644
|
||||
#endif
|
||||
|
||||
|
||||
@@ -2479,289 +2457,3 @@ NTSTATUS WINAPI NtWaitForAlertByThreadId( const void *address, const LARGE_INTEG
|
||||
@@ -2535,289 +2513,3 @@ NTSTATUS WINAPI NtWaitForAlertByThreadId( const void *address, const LARGE_INTEG
|
||||
}
|
||||
|
||||
#endif
|
||||
@ -746,13 +746,13 @@ index 45472a72ed8..1e790962425 100644
|
||||
-
|
||||
-#endif
|
||||
diff --git a/dlls/ntdll/unix/unix_private.h b/dlls/ntdll/unix/unix_private.h
|
||||
index 07ce95230f1..a0375afebf1 100644
|
||||
index f17d527b2ed..541d395a615 100644
|
||||
--- a/dlls/ntdll/unix/unix_private.h
|
||||
+++ b/dlls/ntdll/unix/unix_private.h
|
||||
@@ -97,12 +97,6 @@ extern void (WINAPI *pKiUserApcDispatcher)(CONTEXT*,ULONG_PTR,ULONG_PTR,ULON
|
||||
extern NTSTATUS (WINAPI *pKiUserExceptionDispatcher)(EXCEPTION_RECORD*,CONTEXT*) DECLSPEC_HIDDEN;
|
||||
@@ -104,12 +104,6 @@ extern NTSTATUS (WINAPI *pKiUserExceptionDispatcher)(EXCEPTION_RECORD*,CONTEXT*)
|
||||
extern void (WINAPI *pLdrInitializeThunk)(CONTEXT*,void**,ULONG_PTR,ULONG_PTR) DECLSPEC_HIDDEN;
|
||||
extern void (WINAPI *pRtlUserThreadStart)( PRTL_THREAD_START_ROUTINE entry, void *arg ) DECLSPEC_HIDDEN;
|
||||
extern void (WINAPI *p__wine_ctrl_routine)(void *) DECLSPEC_HIDDEN;
|
||||
-extern NTSTATUS CDECL fast_RtlTryAcquireSRWLockExclusive( RTL_SRWLOCK *lock ) DECLSPEC_HIDDEN;
|
||||
-extern NTSTATUS CDECL fast_RtlAcquireSRWLockExclusive( RTL_SRWLOCK *lock ) DECLSPEC_HIDDEN;
|
||||
-extern NTSTATUS CDECL fast_RtlTryAcquireSRWLockShared( RTL_SRWLOCK *lock ) DECLSPEC_HIDDEN;
|
||||
|
@ -51,7 +51,7 @@ usage()
|
||||
# Get the upstream commit sha
|
||||
upstream_commit()
|
||||
{
|
||||
echo "aadcff491fc9d823a90cee567c8e1d55cd9a589b"
|
||||
echo "2a505efb1ca14f33503657eb070de6edd484b4f3"
|
||||
}
|
||||
|
||||
# Show version information
|
||||
|
@ -1,14 +1,14 @@
|
||||
From 298b86133dd143722c0395474c0a98e89c0af937 Mon Sep 17 00:00:00 2001
|
||||
From b3e883936f94d291de16a551df25ebaa544fd22d Mon Sep 17 00:00:00 2001
|
||||
From: Ken Thomases <ken@codeweavers.com>
|
||||
Date: Tue, 11 Dec 2018 08:30:41 +1100
|
||||
Subject: [PATCH] winex11: Match keyboard in Unicode
|
||||
|
||||
---
|
||||
dlls/winex11.drv/keyboard.c | 163 ++++++++++++++++++++++--------------
|
||||
1 file changed, 98 insertions(+), 65 deletions(-)
|
||||
dlls/winex11.drv/keyboard.c | 161 ++++++++++++++++++++++--------------
|
||||
1 file changed, 97 insertions(+), 64 deletions(-)
|
||||
|
||||
diff --git a/dlls/winex11.drv/keyboard.c b/dlls/winex11.drv/keyboard.c
|
||||
index 37c96c926f4..95cb4100bc9 100644
|
||||
index 4db0dafb4ee..cba0dd44736 100644
|
||||
--- a/dlls/winex11.drv/keyboard.c
|
||||
+++ b/dlls/winex11.drv/keyboard.c
|
||||
@@ -37,6 +37,7 @@
|
||||
@ -65,13 +65,11 @@ index 37c96c926f4..95cb4100bc9 100644
|
||||
/**********************************************************************
|
||||
* X11DRV_KEYBOARD_DetectLayout
|
||||
*
|
||||
@@ -1433,8 +1464,8 @@ X11DRV_KEYBOARD_DetectLayout( Display *display )
|
||||
KeySym keysym = 0;
|
||||
@@ -1434,7 +1465,7 @@ X11DRV_KEYBOARD_DetectLayout( Display *display )
|
||||
const char (*lkey)[MAIN_LEN][4];
|
||||
unsigned max_seq = 0;
|
||||
- int max_score = 0, ismatch = 0;
|
||||
int max_score = INT_MIN, ismatch = 0;
|
||||
- char ckey[256][4];
|
||||
+ int max_score = INT_MIN, ismatch = 0;
|
||||
+ WCHAR ckey[256][4];
|
||||
|
||||
syms = keysyms_per_keycode;
|
||||
@ -145,12 +143,12 @@ index 37c96c926f4..95cb4100bc9 100644
|
||||
- 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_a(str));
|
||||
+ TRACE_(key)("mismatch for keycode %u, got %s\n", keyc, debugstr_wn(ckey[keyc], 4));
|
||||
mismatch++;
|
||||
score -= syms;
|
||||
}
|
||||
@@ -1613,9 +1633,11 @@ void X11DRV_InitKeyboard( Display *display )
|
||||
@@ -1576,9 +1596,11 @@ void X11DRV_InitKeyboard( Display *display )
|
||||
XKeyEvent e2;
|
||||
WORD scan, vkey;
|
||||
int keyc, i, keyn, syms;
|
||||
@ -163,7 +161,7 @@ index 37c96c926f4..95cb4100bc9 100644
|
||||
|
||||
/* Ranges of OEM, function key, and character virtual key codes.
|
||||
* Don't include those handled specially in X11DRV_ToUnicodeEx and
|
||||
@@ -1672,7 +1694,11 @@ void X11DRV_InitKeyboard( Display *display )
|
||||
@@ -1633,7 +1655,11 @@ void X11DRV_InitKeyboard( Display *display )
|
||||
/* Detect the keyboard layout */
|
||||
X11DRV_KEYBOARD_DetectLayout( display );
|
||||
lkey = main_key_tab[kbd_layout].key;
|
||||
@ -175,7 +173,7 @@ index 37c96c926f4..95cb4100bc9 100644
|
||||
|
||||
/* Now build two conversion arrays :
|
||||
* keycode -> vkey + scancode + extended
|
||||
@@ -1713,26 +1739,14 @@ void X11DRV_InitKeyboard( Display *display )
|
||||
@@ -1674,26 +1700,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);
|
||||
@ -207,7 +205,7 @@ index 37c96c926f4..95cb4100bc9 100644
|
||||
if (!ok) i--; /* we overshot */
|
||||
if (ok||(i>maxlen)) {
|
||||
maxlen=i; maxval=keyn;
|
||||
@@ -2350,7 +2364,7 @@ INT CDECL X11DRV_GetKeyNameText(LONG lParam, LPWSTR lpBuffer, INT nSize)
|
||||
@@ -2256,7 +2270,7 @@ INT CDECL X11DRV_GetKeyNameText(LONG lParam, LPWSTR lpBuffer, INT nSize)
|
||||
/***********************************************************************
|
||||
* X11DRV_KEYBOARD_MapDeadKeysym
|
||||
*/
|
||||
@ -216,7 +214,7 @@ index 37c96c926f4..95cb4100bc9 100644
|
||||
{
|
||||
switch (keysym)
|
||||
{
|
||||
@@ -2360,65 +2374,84 @@ static char KEYBOARD_MapDeadKeysym(KeySym keysym)
|
||||
@@ -2266,65 +2280,84 @@ static char KEYBOARD_MapDeadKeysym(KeySym keysym)
|
||||
#endif
|
||||
case 0x1000FE7E : /* Xfree's XK_Dtilde */
|
||||
return '~'; /* '? */
|
||||
@ -316,7 +314,7 @@ index 37c96c926f4..95cb4100bc9 100644
|
||||
*/
|
||||
}
|
||||
TRACE("no character for dead keysym 0x%08lx\n",keysym);
|
||||
@@ -2603,7 +2636,7 @@ INT CDECL X11DRV_ToUnicodeEx(UINT virtKey, UINT scanCode, const BYTE *lpKeyState
|
||||
@@ -2509,7 +2542,7 @@ INT CDECL X11DRV_ToUnicodeEx(UINT virtKey, UINT scanCode, const BYTE *lpKeyState
|
||||
|
||||
if (ret == 0)
|
||||
{
|
||||
@ -325,7 +323,7 @@ index 37c96c926f4..95cb4100bc9 100644
|
||||
|
||||
#ifdef XK_EuroSign
|
||||
/* An ugly hack for EuroSign: X can't translate it to a character
|
||||
@@ -2627,7 +2660,7 @@ INT CDECL X11DRV_ToUnicodeEx(UINT virtKey, UINT scanCode, const BYTE *lpKeyState
|
||||
@@ -2533,7 +2566,7 @@ INT CDECL X11DRV_ToUnicodeEx(UINT virtKey, UINT scanCode, const BYTE *lpKeyState
|
||||
dead_char = KEYBOARD_MapDeadKeysym(keysym);
|
||||
if (dead_char)
|
||||
{
|
||||
@ -335,5 +333,5 @@ index 37c96c926f4..95cb4100bc9 100644
|
||||
goto found;
|
||||
}
|
||||
--
|
||||
2.24.1
|
||||
2.30.2
|
||||
|
||||
|
@ -1 +1 @@
|
||||
649385e7d47091fa25b9114668075b06d2942e2f
|
||||
2a505efb1ca14f33503657eb070de6edd484b4f3
|
||||
|
Loading…
Reference in New Issue
Block a user