mirror of
https://github.com/reactos/reactos.git
synced 2024-07-01 02:10:07 +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
|
@ -187,6 +187,14 @@ typedef struct _THRDESKHEAD
|
||||||
PVOID pSelf;
|
PVOID pSelf;
|
||||||
} THRDESKHEAD, *PTHRDESKHEAD;
|
} THRDESKHEAD, *PTHRDESKHEAD;
|
||||||
|
|
||||||
|
typedef struct tagIMC
|
||||||
|
{
|
||||||
|
THRDESKHEAD head;
|
||||||
|
struct tagIMC *pImcNext;
|
||||||
|
ULONG_PTR dwClientImcData;
|
||||||
|
HWND hImeWnd;
|
||||||
|
} IMC, *PIMC;
|
||||||
|
|
||||||
typedef struct _PROCDESKHEAD
|
typedef struct _PROCDESKHEAD
|
||||||
{
|
{
|
||||||
HEAD;
|
HEAD;
|
||||||
|
|
|
@ -75,6 +75,8 @@ typedef struct _W32THREAD
|
||||||
PVOID pUMPDObj;
|
PVOID pUMPDObj;
|
||||||
} W32THREAD, *PW32THREAD;
|
} W32THREAD, *PW32THREAD;
|
||||||
|
|
||||||
|
struct tagIMC;
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
typedef struct _THREADINFO : _W32THREAD
|
typedef struct _THREADINFO : _W32THREAD
|
||||||
{
|
{
|
||||||
|
@ -126,6 +128,10 @@ typedef struct _THREADINFO
|
||||||
INT iCursorLevel;
|
INT iCursorLevel;
|
||||||
/* Last message cursor position */
|
/* Last message cursor position */
|
||||||
POINT ptLast;
|
POINT ptLast;
|
||||||
|
/* Input context-related */
|
||||||
|
struct _WND* spwndDefaultIme;
|
||||||
|
struct tagIMC* spDefaultImc;
|
||||||
|
HKL hklPrev;
|
||||||
|
|
||||||
INT cEnterCount;
|
INT cEnterCount;
|
||||||
/* Queue of messages posted to the queue. */
|
/* 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_PID 0
|
||||||
#define GWLP_CONSOLE_LEADER_TID 4
|
#define GWLP_CONSOLE_LEADER_TID 4
|
||||||
|
|
||||||
PWND pWnd;
|
|
||||||
DWORD_PTR Result;
|
DWORD_PTR Result;
|
||||||
|
PWND pWnd, pwndActive;
|
||||||
|
PTHREADINFO pti, ptiActive;
|
||||||
DECLARE_RETURN(UINT);
|
DECLARE_RETURN(UINT);
|
||||||
|
|
||||||
TRACE("Enter NtUserQueryWindow\n");
|
TRACE("Enter NtUserQueryWindow\n");
|
||||||
|
@ -3996,19 +3997,33 @@ NtUserQueryWindow(HWND hWnd, DWORD Index)
|
||||||
Result = (pWnd->head.pti->MessageQueue == gpqForeground);
|
Result = (pWnd->head.pti->MessageQueue == gpqForeground);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case QUERY_WINDOW_DEFAULT_IME:
|
case QUERY_WINDOW_DEFAULT_IME: /* default IME window */
|
||||||
ERR("QUERY_WINDOW_DEFAULT_IME: FIXME\n");
|
if (pWnd->head.pti->spwndDefaultIme)
|
||||||
Result = 0;
|
Result = (DWORD_PTR)UserHMGetHandle(pWnd->head.pti->spwndDefaultIme);
|
||||||
|
else
|
||||||
|
Result = 0;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case QUERY_WINDOW_DEFAULT_ICONTEXT:
|
case QUERY_WINDOW_DEFAULT_ICONTEXT: /* default input context handle */
|
||||||
ERR("QUERY_WINDOW_DEFAULT_ICONTEXT: FIXME\n");
|
if (pWnd->head.pti->spDefaultImc)
|
||||||
Result = 0;
|
Result = (DWORD_PTR)UserHMGetHandle(pWnd->head.pti->spDefaultImc);
|
||||||
|
else
|
||||||
|
Result = 0;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case QUERY_WINDOW_ACTIVE_IME:
|
case QUERY_WINDOW_ACTIVE_IME:
|
||||||
ERR("QUERY_WINDOW_ACTIVE_IME: FIXME\n");
|
|
||||||
Result = 0;
|
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;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|
Loading…
Reference in a new issue