mirror of
https://github.com/reactos/reactos.git
synced 2025-02-22 16:36:33 +00:00
[NTUSER] Improve NtUserQueryWindow (#3915)
- Improve NtUserQueryWindow function. - Add IMC structure. - Modify THREADINFO structure. CORE-11700
This commit is contained in:
parent
d78e9fbb45
commit
10c9aa067f
3 changed files with 37 additions and 8 deletions
|
@ -187,6 +187,14 @@ typedef struct _THRDESKHEAD
|
|||
PVOID pSelf;
|
||||
} THRDESKHEAD, *PTHRDESKHEAD;
|
||||
|
||||
typedef struct tagIMC
|
||||
{
|
||||
THRDESKHEAD head;
|
||||
struct tagIMC *pImcNext;
|
||||
ULONG_PTR dwClientImcData;
|
||||
HWND hImeWnd;
|
||||
} IMC, *PIMC;
|
||||
|
||||
typedef struct _PROCDESKHEAD
|
||||
{
|
||||
HEAD;
|
||||
|
|
|
@ -75,6 +75,8 @@ typedef struct _W32THREAD
|
|||
PVOID pUMPDObj;
|
||||
} W32THREAD, *PW32THREAD;
|
||||
|
||||
struct tagIMC;
|
||||
|
||||
#ifdef __cplusplus
|
||||
typedef struct _THREADINFO : _W32THREAD
|
||||
{
|
||||
|
@ -126,6 +128,10 @@ typedef struct _THREADINFO
|
|||
INT iCursorLevel;
|
||||
/* Last message cursor position */
|
||||
POINT ptLast;
|
||||
/* Input context-related */
|
||||
struct _WND* spwndDefaultIme;
|
||||
struct tagIMC* spDefaultImc;
|
||||
HKL hklPrev;
|
||||
|
||||
INT cEnterCount;
|
||||
/* Queue of messages posted to the queue. */
|
||||
|
|
|
@ -3932,8 +3932,9 @@ NtUserQueryWindow(HWND hWnd, DWORD Index)
|
|||
#define GWLP_CONSOLE_LEADER_PID 0
|
||||
#define GWLP_CONSOLE_LEADER_TID 4
|
||||
|
||||
PWND pWnd;
|
||||
DWORD_PTR Result;
|
||||
PWND pWnd, pwndActive;
|
||||
PTHREADINFO pti, ptiActive;
|
||||
DECLARE_RETURN(UINT);
|
||||
|
||||
TRACE("Enter NtUserQueryWindow\n");
|
||||
|
@ -3996,19 +3997,33 @@ NtUserQueryWindow(HWND hWnd, DWORD Index)
|
|||
Result = (pWnd->head.pti->MessageQueue == gpqForeground);
|
||||
break;
|
||||
|
||||
case QUERY_WINDOW_DEFAULT_IME:
|
||||
ERR("QUERY_WINDOW_DEFAULT_IME: FIXME\n");
|
||||
Result = 0;
|
||||
case QUERY_WINDOW_DEFAULT_IME: /* default IME window */
|
||||
if (pWnd->head.pti->spwndDefaultIme)
|
||||
Result = (DWORD_PTR)UserHMGetHandle(pWnd->head.pti->spwndDefaultIme);
|
||||
else
|
||||
Result = 0;
|
||||
break;
|
||||
|
||||
case QUERY_WINDOW_DEFAULT_ICONTEXT:
|
||||
ERR("QUERY_WINDOW_DEFAULT_ICONTEXT: FIXME\n");
|
||||
Result = 0;
|
||||
case QUERY_WINDOW_DEFAULT_ICONTEXT: /* default input context handle */
|
||||
if (pWnd->head.pti->spDefaultImc)
|
||||
Result = (DWORD_PTR)UserHMGetHandle(pWnd->head.pti->spDefaultImc);
|
||||
else
|
||||
Result = 0;
|
||||
break;
|
||||
|
||||
case QUERY_WINDOW_ACTIVE_IME:
|
||||
ERR("QUERY_WINDOW_ACTIVE_IME: FIXME\n");
|
||||
Result = 0;
|
||||
if (gpqForeground && gpqForeground->spwndActive)
|
||||
{
|
||||
pwndActive = gpqForeground->spwndActive;
|
||||
pti = PsGetCurrentThreadWin32Thread();
|
||||
if (pti->rpdesk == pwndActive->head.rpdesk)
|
||||
{
|
||||
ptiActive = pwndActive->head.pti;
|
||||
if (ptiActive->spwndDefaultIme)
|
||||
Result = (DWORD_PTR)UserHMGetHandle(ptiActive->spwndDefaultIme);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
|
|
Loading…
Reference in a new issue