Commit Graph

1623 Commits

Author SHA1 Message Date
Timo Kreuzer
f85e19ecfb [GDI32] Relax an ASSERT
This prevents an assertion failure in gdi32_winetest
2026-05-08 19:30:33 +00:00
Timo Kreuzer
1cf31524d5 [REACTOS] Stop using non-conforming swprintf / vswprintf
Use the underscored versions instead.
2026-05-07 06:27:58 +00:00
Doug Lyons
1dc2e6de72 [USER32][COMCTL32] EDIT control: Fix vertical scrolling past line number 32767 (#8930)
CORE-19305

Change how WM_VSCROLL is handled to allow higher line counts to be passed to EDIT_WM_VScroll.
Use the GetScrollInfo() function to determine vertical scroll position and pass this to EDIT_WM_VScroll.
---------
Co-authored-by: Jose Carlos Jesus <zecarlos1957@hotmail.com>
2026-05-06 19:11:58 -05:00
Doug Lyons
049085f106 [GDI32] Fix pptviewer '97 and calls to PolylineTo and PolyBezierTo (#8902)
CORE-20553

Fix PolylineTo and PolyBezierTo based on Wine 10.0.
Include starting point in the "POINTS" variable being passed to PolylineTo and PolyBezierTo.
Handle the starting point as the origin for drawing the lines.
2026-05-04 20:53:32 -05:00
Katayama Hirofumi MZ
5ab1ff188c [NTUSER][ENG] Remove needless comments (#8896)
JIRA issue: N/A
2026-04-24 07:02:23 +09:00
Katayama Hirofumi MZ
eb9a73c975 [NTUSER] IntImmProcessKey: Use KF_... flags (#8897)
A tiny refactoring for code readability.
JIRA issue: CORE-19268
Use HIWORD macro and KF_...
constants.
2026-04-23 22:53:36 +09:00
Timo Kreuzer
9d1418fcb6 [NDK][NTDLL][KERNEL32] Improve tick count to ms calculation
Use an inline function to do the calculation (optimized for 32/64 bit).
2026-04-23 11:58:15 +00:00
Katayama Hirofumi MZ
40252ff735 [KERNEL32][CONSRV][SDK] Implement ConsoleIMERoutine (#8862)
Preparing for Console IME.
JIRA issue: CORE-18923
- Add IntRegQueryValue,
  IntPathQuoteSpacesW, and
  GetConsoleIMECommandLine helper
  functions.
- Add ConsoleIMERoutine function.
- Modify ConnectInfo.ImeRoutine in
  ConDllInitialize function.
- Modify kernel32.spec to add
  ConsoleIMERoutine.
- Add ConsoleIMERoutine prototype
  to <wincon_undoc.h>.
- Connect ImeRoutine in
  ConSrvConnect function.
Co-authored-by: Hermès BÉLUSCA - MAÏTO <hermes.belusca-maito@reactos.org>
2026-04-21 17:52:19 +09:00
Katayama Hirofumi MZ
9533ad790a [WINSRV] ConioWriteConsole: Modify update rect for CJK (#8859)
Correctly displaying Asian characters
on Asian Console.
JIRA issue: CORE-18972
Modify the update rectangle for Chinese,
Japanese, and Korean.
2026-04-17 00:59:34 +09:00
Katayama Hirofumi MZ
747b3c0cc0 [IMM32] Implement WINNLSTranslateMessage (#8852)
Completing the IME messaging framework.
JIRA issue: CORE-19268
- Fix corner cases at ImmGenerateMessage and
  ImmTranslateMessage functions.
- Implement WINNLSTranslateMessage function.
2026-04-14 11:23:18 +09:00
Max Korostil
feb9febaae [WIN32KNT_APITEST][NTUSER] Fix NtUserConvertMemHandle BSOD (#7878)
Fix NtUserConvertMemHandle BSOD.

JIRA issue: CORE-18121
2026-04-12 19:10:34 -05:00
Katayama Hirofumi MZ
215d409f52 [IMM32][NTUSER][SDK] Implement ImmSendIMEMessageExA/W (#8850)
Supporting Win3.x IMM.
JIRA issue: CORE-19268
- Move <wine/ime.h> to psdk <ime.h>.
- Add some constants to
  <imm32_undoc.h>.
- Implement ImmSendIMEMessageExA
  and ImmSendIMEMessageExW
  functions.
2026-04-11 09:45:38 +09:00
Katayama Hirofumi MZ
61fb4db34c [SDK][IMM32][NTUSER] Delete <jpnvkeys.h> and use <wine/ime.h> instead (#8847)
Follow-up of #8846. Now <jpnvkeys.h>
is useless. Minor refactoring and
standardation.
JIRA issue: CORE-19268
- Replace <jpnvkeys.h> usage with
  <wine/ime.h> and fix
  VK_DBE_ENTERIMECONFIGMODE
  naming.
- Remove duplicated
  WM_IME_REPORT/IR_* and
  UNDETERMINESTRUCT definitions
  now provided by wine/ime.h.
- Introduce win3send.c half-
  implementing
  ImmSendIMEMessageExA/W.
- Add CMake option
  IMM_WIN3_SUPPORT (default: ON).
2026-04-10 08:30:56 +09:00
Katayama Hirofumi MZ
ce73ba4426 [IMM32][SDK] ImmGetCompositionString: Support GCS_PRIVATE (#8844)
Prepare for CTF IME support.
JIRA issue: CORE-19268
- Add GCS_PRIVATE (0x8000) constant,
  COMPSTR_PRIVATE structure, and
  CtfImmIsGuidMapEnable prototype
  to <imm32_undoc.h>.
- Implement GCS_PRIVATE index in
  ImmGetCompositionStringA/W.
2026-04-10 07:10:11 +09:00
Katayama Hirofumi MZ
4671b481a3 [NTGDI][FREETYPE] FontLink: Request sub-font sizes (#8806)
A bug fix of FontLink'ed glyph size.
JIRA issue: CORE-20470
- Add FONTLINK_ENTRY structure
  and g_FontLinkEntries variable.
- Delete font-link cache mechanism.
- Don't access the registry while
  rendering is in progress.
- Request sub-font sizes while
  drawing FontLink text.
2026-04-07 14:06:50 +09:00
Katayama Hirofumi MZ
45a4f95b04 [NTGDI][FREETYPE] Revert 'font look-up cache #8641' (#8816)
#8641 introduced some bugs. We revert it.
JIRA issue: CORE-20538
- Delete FONT_LOOKUP_CACHE and
  s_FontLookupCacheList.
- Delete FontLookUp_... functions.
- Revert FontLink_PrepareFontInfo and
  TextIntRealizeFont functions.
2026-04-01 19:23:17 +09:00
Katayama Hirofumi MZ
863203030f [IMM32][SDK] Rename CLIENTIMC_UNKNOWN2 as CLIENTIMC_LOCKED (#8807)
Improve code readability.
JIRA issue: CORE-19268
- Rename CLIENTIMC_UNKNOWN2
  flag as CLIENTIMC_LOCKED.
- Delete unused
  CLIENTIMC_UNKNOWN4 flag.
- Fix the return value of
  Imm32AssignNewLayout function.
2026-03-30 04:39:26 +09:00
Katayama Hirofumi MZ
75e1d78fe9 [IMM32][SDK] imemenu.c: Rewrite IME Menu feature (#8769)
There were some design difference
comparing to Windows. Improve
IME Menu compatibility.
JIRA issue: CORE-20142
- Re-implement IME Menu.
- Modify
  ImmPutImeMenuItemsIntoMappedFile
  prototype.
2026-03-29 11:33:23 +09:00
Alex Mendoza
d5697b231c [IMM32] Ensure minimum size in Imm32CreateInputContext (#8791)
Ensure minimum size of hPrivate
in Imm32CreateInputContext, just
like Imm32SelectInputContext does
2026-03-28 19:41:40 +09:00
Katayama Hirofumi MZ
b7510137d9 [IMM32] Fix Imm32AssignNewLayout (#8764)
Fix behavior of IME installation.
JIRA issue: CORE-19268
Rewrite Imm32AssignNewLayout function.
2026-03-28 09:11:13 +09:00
Alex Mendoza
f76ed0625b [IMM32] ImmEnumInputContext: Add IS_IMM_MODE check (#8768) 2026-03-25 16:51:13 +09:00
Katayama Hirofumi MZ
ed0b44f3b9 [IMM32] ImmGetDescriptionW: Check IS_IME_HKL (#8762)
Tougher system.
JIRA issue: CORE-19268
2026-03-25 09:36:59 +09:00
Katayama Hirofumi MZ
4ca47af13f Revert "[IMM32] ImmInstallIMEW: Use uppercase filename" (#8767)
Reverts #8763.
We should consider case-sensitive
file-systems we have.
2026-03-24 09:45:11 +09:00
Katayama Hirofumi MZ
8b3663d2b6 [IMM32] ImmGetGuideLineAW: Fix return value for error (#8766)
The function has to return zero on error.
JIRA issue: CORE-19268
Return zero on error (in GGL_STRING and GGL_PRIVATE).
2026-03-24 06:50:16 +09:00
Katayama Hirofumi MZ
0c7d3f20fa [IMM32] Fix Imm32ReconvertWideFromAnsi (#8758)
Fix recoversion feature.
JIRA issue: CORE-19268
- Replace pSrc with pDest in
  Imm32ReconvertWideFromAnsi.
2026-03-23 23:34:00 +09:00
Katayama Hirofumi MZ
35d30ec5fe [IMM32] ImmSetConversionStatus: Check IS_CICERO_COMPAT_DISABLED (#8760)
Improve IME compatibility.
JIRA issue: CORE-19268
- Check IS_CICERO_COMPAT_DISABLED's
  value.
- Initialize dwOldConversion and
  dwOldSentence variables.
2026-03-23 23:28:58 +09:00
Katayama Hirofumi MZ
e2ef2c9923 [IMM32] ImmEnumInputContext: Validate hIMC (#8761)
Tougher system.
JIRA issue: CORE-19268
Check hIMC and gpsi in
ImmEnumInputContext function.
2026-03-23 22:43:33 +09:00
Katayama Hirofumi MZ
cad71d733f [IMM32] Fix Imm32IsSystemJapaneseOrKorean (#8757)
The if-condition for Japanese or
Korean was wrong.
JIRA issue: CORE-19268
Replace logical operator || with
operator &&.
2026-03-23 22:33:51 +09:00
Katayama Hirofumi MZ
3b619baeb5 [IMM32] ImmGenerateMessage: Always use SendMessageW (#8765)
SendMessageA for IME message
won't work in some situations.
JIRA issue: CORE-19268
Always use SendMessageW instead of
SendMessageA in ImmGenerateMessage.
2026-03-23 22:23:47 +09:00
Katayama Hirofumi MZ
d47c613c26 [IMM32] ImmInstallIMEW: Use uppercase filename (#8763)
Avoid data inconsistencies in
interoperability.
JIRA issue: CORE-19268
Call CharUpperW in ImmInstallIMEW
function.
2026-03-23 22:16:51 +09:00
Katayama Hirofumi MZ
0566a0f699 [NTGDI][GDI32][FREETYPE] Rewrite GetGlyphIndicesA/W (#8747)
JIRA issue: CORE-20505
- NtGdiGetGlyphIndicesW function simply calls
  NtGdiGetGlyphIndicesWInternal function.
- NtGdiGetGlyphIndicesWInternal allocates buffer
  and calls GreGetGlyphIndicesW function.
- Add GreGetGlyphIndicesW definition in freetype.c.
- Modify GetGlyphIndicesA function.
2026-03-23 12:05:19 +09:00
Doug Lyons
16a65a0df2 [NTUSER][COMCTL32] Fix ListBox background color setting (#8665)
CORE-20433

The brush returned from WM_CTLCOLORLISTBOX message is ignored when painting the background. This bug can be found at https://bugs.winehq.org/show_bug.cgi?id=2948

Fixed by handling backgound painting in LISTBOX_PaintItem and LISTBOX_Paint functions.

Patch by @I_Kill_Bugs
2026-03-22 22:38:36 +01:00
Ahmed Arif
057d978fcb [USER32] button.c Fix extra-byte layout on x64 (#8733)
One visible case is the setup LiveCD error dialog, where the message box button can appear with a wrong bold/garbled look instead of the normal default-pushbutton appearance.

## Root cause

`win32ss/user/user32/controls/button.c` stores button state with  `GetWindowLongPtrW` / `SetWindowLongPtrW`, but the control extra-byte layout was still defined as if the first slot were only `sizeof(LONG)` 

On 64-bit builds, that causes the stored state to overlap the cached font, image, and UI-state fields.
2026-03-16 13:01:44 +01:00
Katayama Hirofumi MZ
e6328fbf1e [NTGDI][FREETYPE][SDK] Rewrite NtGdiGetCharABCWidthsW (#8704)
Refactor and improve readability.
JIRA issue: CORE-20505
- Add GreGetCharABCWidthsW helper function.
- Rewrite NtGdiGetCharABCWidthsW by using
  GreGetCharABCWidthsW.
2026-03-13 18:24:26 +09:00
Ratin Gao
36ffee8ea3 [WIN32SS:NTUSER] Implement SharedUserData->LastSystemRITEventTickCount (#8537)
This field was introduced in NT5.1, records the tick count of the last user input
(system-wide), updated at most once per minute (or once per second since NT6.0).

Unlike `GetLastInputInfo` which is designed for providing session-specific
user input information, `SharedUserData->LastSystemRITEventTickCount` provides
system-wide time, used by:
- [Task Schedule (TASK_EVENT_TRIGGER_ON_IDLE)](https://learn.microsoft.com/en-us/windows/win32/taskschd/i)
- [Inactivity Monitoring](https://learn.microsoft.com/en-us/windows/win32/devnotes/inactivity-monitoring)
- Maybe some places I don't know...

See also:
- [KUSER_SHARED_DATA - Geoff Chappell](https://www.geoffchappell.com/studies/windows/km/ntoskrnl/inc/api/ntexapi_x/kuser_shared_data/index.htm)
- [TASK_TRIGGER_TYPE enumeration - Microsoft Learn](https://learn.microsoft.com/en-us/windows/win32/api/mstask/ne-mstask-task_trigger_type)
- [Task Scheduler: idle conditions](https://learn.microsoft.com/en-us/windows/win32/taskschd/i)
- [GetLastInputInfo function - Microsoft Learn](https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getlastinputinfo)
- [Inactivity Monitoring](https://learn.microsoft.com/en-us/windows/win32/devnotes/inactivity-monitoring)

## Proposed changes

Before this PR, `SharedUserData->LastSystemRITEventTickCount` is never used
and always 0, `gpsi->dwLastSystemRITEventTickCountUpdate` is never used too.
After this PR, `SharedUserData->LastSystemRITEventTickCount` updates correctly
by using `gpsi->dwLastSystemRITEventTickCountUpdate` to record previous update
time, the behavior is the same as on Windows.
2026-03-08 18:58:37 +01:00
Hermès Bélusca-Maïto
e22f447467 [WIN32SS:NTUSER] Implement EnableHexNumpad support (#8680)
Supplements commit cac013abef (PR #8104).
CORE-5680

The `EnableHexNumpad` string value is specified in the
`HKEY_CURRENT_USER\Control Panel\Input Method` registry key.

When enabled, the user can enter codepoints in hexadecimal form, using:
- `Alt .xxx` ('dot' prefix), for current ANSI codepage (ACP) codepoints;
- `Alt +xxx` ('plus' prefix), for Unicode codepoints.

These two modes complement the known `Alt xxx` and `Alt 0xxx` decimal forms
for entering codepoints in the current OEM or ACP codepage, respectively.
2026-03-08 18:35:37 +01:00
Hermès Bélusca-Maïto
03b1e240bf [VIDEOPRT] Deduplicate the IntIsVgaSaveDriver(Name) functionality (#8718)
- Initialize the device extension `IsVgaDriver` field with a single
  `IntIsVgaSaveDriver()` call when the video device extension is first
  initialized in `IntVideoPortCreateAdapterDeviceObject()`.

- The `IsVgaDriver` field can then be used wherever we previously
  invoked `IntIsVgaSaveDriver()` (see e.g. in resource.c)

NOTE: It may be possible to move the `IsVgaDriver` field to the driver
extension structure instead, if it's not possible for miniport drivers
to influence this during calls `VideoPortInitialize()` with a custom-made
registry path (2nd parameter) containing a "\\VgaSave" substring...
(To be investigated.)

Addendum to commits 08a6834075 and 0511e9d869.
2026-03-08 17:24:20 +01:00
Hermès Bélusca-Maïto
1de8b4f0ce [DDK][VIDEOPRT] VideoPortDebugPrint(): Fix the debug filter being used; update SAL annotations (#8718)
- Use the `DPFLTR_VIDEO_ID` debug filter ID, which is the same as what
  Windows' videoprt.sys uses, so that tools and people who debug can
  easily interoperate between the two.
  Addendum to commits 11c95f7b5d (r19801) and 5b799176ba (r31477).

- Use SAL2 annotations.
2026-03-08 15:25:09 +01:00
Hermès Bélusca-Maïto
e6f7e89ccd [VIDEOPRT] Fix a debug print newline (#8718) 2026-03-08 15:24:55 +01:00
Hermès Bélusca-Maïto
f4786c1b91 [VIDEOPRT] Fix INT10h support initialization (#8717)
This problem was noticed by Zombiedeth.

Addendum to commit 89d5a3dbb8 (PR #8451).

There exist buggy 3rd-party miniport drivers, like those for the NVIDIA GeForce
8400 GS card (`nv4_mini.sys` from `181.22_geforce_winxp_32bit_english_whql.exe`)
that invoke the VideoPort Int10 routines (either `VideoPortInt10()`, or the
INT10 interface via `VideoPortQueryServices()`) from their `HwFindAdapter()`
callback (invoked via `VideoPortInitialize()`) or from their `DriverEntry()`.

However, at this point, the VideoPort Int10 services are not fully initialized:
on the x86 port, the VDM memory isn't mapped until later, when the `\Device\VideoX`
is opened by Win32k as part of its initialization in the context of the CSRSS process.

Additionally on the x86 ReactOS port since commit 89d5a3dbb8 (PR #8451), the
X86 emulator is used by default, unless either a registry setting is set to
disable the emulator, or the HAL (e.g. the NT5.x HAL) doesn't export the X86
emulator routines; in these cases the VDM is employed instead.
In the NT5.x builds VideoPort imports the HAL X86 emulator routines at runtime,
since it has to handle their possible absence. However, this importing was
previously delayed up until VideoPort initialized the Int10 services (when
`\Device\VideoX` is opened the first time by Win32k from CSRSS), meaning,
these services and the X86 emulator imports weren't initialized until then.
When booting ReactOS in these conditions with the NVIDIA driver installed,
its too-early `VideoPortInt10()` call was invoking the X86 emulator with no
imports set up, which resulted in the invocation of a NULL function pointer,
leading to a BSOD.

## Proposed changes

- Make the existing `IntInitializeInt10()` function support two invocations:
  * When invoked the first time, it initializes the X86 emulator support, by
    importing the HAL emulator routines, if applicable.
  * When invoked the second+ time, it maps the VDM memory space (done when
    `Device\VideoX` is opened by Win32k/CSRSS initialization).

- Actually perform the first `IntInitializeInt10()` invocation in the
  `if (!FirstInitialization)` block of `VideoPortInitialize()`.

- Set a `VDMAddressSpaceInitialized` flag to TRUE only when the VDM memory
  space is mapped (during the second `IntInitializeInt10()` invocation).
  Check this flag in both `IntInt10CallBiosV86()` and `IntInt10CallBiosEmu()`
  (x86 build only).

- Adjust two returned status values in `IntInitializeVideoAddressSpace()`.
2026-03-08 15:13:54 +01:00
Katayama Hirofumi MZ
06ae7ec211 [FREETYPE][NTGDI][GDI32][GDI32_APITEST] Rewrite GetCharWidth etc. (#8690)
Refactoring and improve readability.
JIRA issue: CORE-20505
- Add GreGetCharWidthW helper
  function.
- Rewrite NtGdiGetCharWidthW
  using GreGetCharWidthW.
- Refactor NtGdiGetGlyphIndicesW.
- Improve sanity check of
  GetCharWidthA/W/I,
  GetCharWidth32A/W, and
  GetCharWidthFloatA/W.
- Add GetCharWidth testcase to
  gdi32_apitest.
2026-03-01 20:12:45 +09:00
Katayama Hirofumi MZ
80bd460836 [SDK][KBSWITCH][CONIME][IMM32][NTUSER][MSCTFIME][MSUTB] Define LANGID_... (#8691)
Follow-up of #8678. Commonize the definition of
LANGID_... values.
JIRA issue: CORE-20243
- Define LANGID_... values for CJK in <cjkcode.h> and
  use it.
2026-02-27 10:02:23 +09:00
Katayama Hirofumi MZ
0c4091cd04 [FREETYPE][NTGDI] Update FreeType from 2.10.0 to 2.10.4 (#8671)
Modernize modules.
JIRA issue: CORE-17390
- Update FreeType to 2.10.4.
- Delete ChangeLog.
- Delete sdk/lib/3rdparty/freetype/src/gxvalid
  (useless for us).
- Delete sdk/lib/3rdparty/freetype/src/otvalid
  (useless for us).
- Keep ReactOS hacks on FreeType.
- Adapt ntgdi/freetype.c to new FreeType.
2026-02-26 09:32:57 +09:00
Katayama Hirofumi MZ
f7ef944dca [NTGDI][FREETYPE] Refactor NtGdiGetGlyphIndicesW (#8682)
Make code faster and improve readability.
JIRA issue: N/A
- Avoid buffer allocation by using
  stack variables if possible.
- Add IntGetFontDefaultChar helper
  function and use it.
2026-02-26 08:56:02 +09:00
Hermès Bélusca-Maïto
1aab8a87c4 [SHELL32][NTUSER] Fix "accessability" typo 2026-02-21 17:32:32 +01:00
Hermès Bélusca-Maïto
7a505166b9 [WIN32SS:NTUSER] Validate the gpsi pointer when getting/setting the caret blink time 2026-02-21 17:32:32 +01:00
Petru Răzvan
cac013abef [NTUSER] Implement inserting characters with the Alt+Numpad method (#8104)
Implement the Alt+Numpad method for inserting characters with their
OEM (Alt+xxx) or their current ANSI codepage (Alt+0xxx) codes.

CORE-5680

For reference, see:
- https://en.wikipedia.org/wiki/Alt_code
- https://devblogs.microsoft.com/oldnewthing/20240702-00/?p=109951

Co-authored-by: Hermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
2026-02-17 21:35:54 +01:00
Max Korostil
c65740eeb3 [WIN32KNT_APITEST][NTUSER] Fix NtUserCreateAcceleratorTable memory corruption (#7888)
CORE-18122

- Check if `EntriesCount` can overflow the required memory size.
- Add an apitest for `NtUserCreateAcceleratorTable`.
2026-02-16 14:19:30 +01:00
Katayama Hirofumi MZ
f9c7221a1e [NTGDI][FREETYPE] Follow-up of #8641 (#8658)
Follow-up of #8641. Reduce freetype.c lines.
JIRA issue: CORE-19898
- Follow @HBelusca's review in #8641.
- Move some codes in freetype.c into utils.c.
2026-02-07 08:08:30 +09:00
Nathan Giovannini
4f15235d89 [NTUSER] Fix assertion failure in UserDerefObjectCo (#8659)
Ensure we dereference the same parent window object after a user-mode callback. We cache spwndParent in a local before sending messages so a parent change during the callback no longer trips the LIFO reference check.

- Capture the parent window in a local in IntDefWindowProc (WM_APPCOMMAND) and IntSendParentNotify.
- Use the local for UserRefObjectCo, co_IntSendMessage, and UserDerefObjectCo to prevent object mismatches when the parent changes mid-callback.

CORE-17331
2026-02-05 12:50:37 +03:00