Skip to content

[Feature request] Have NPPM_DARKMODESUBCLASSANDTHEME also subclass TabControls #16668

@pryrt

Description

@pryrt

Is there an existing issue for this?

  • I have searched the existing issues

Description of the Issue

If a plugin's dialog has tab controls ("SysTabControl32"), when it calls NPPM_DARKMODESUBCLASSANDTHEME in Dark Mode, the dialog will go mostly dark, except the tab control, which is jarring. If that message also subclassed the SysTabControl32 (WC_TABCONTROL), it should allow plugins to have their tab controls in dialogs follow Dark Mode as well.

In #13596, I don't see any mention that tab controls were left out intentionally... but maybe there was a good reason that I don't know about for not including that. If so, we should talk about it, because the tab control being non-darkmode will cause problems with plugins that are trying to use the message to handle dark mode for their dialogs.

And I see in #16537 that adding other controls to Dark Mode has been accepted before, so I'm hoping this is a reasonable request.


Steps to Reproduce

  1. Download the DLL artifact from the CollectionInterface plugin's darkModeTabControl build and install in plugins\CollectionInterface\CollectionInterface.dll
  2. Run Notepad++ in Dark Mode
  3. Plugins > CollectionInterface > Collection Interface: Download, and look at the glaringly white tab interface in the otherwise dark dialog box

Actual Behavior
(screenshot with "Cyan" tones in Dark Mode)

Image

Desired Behavior

Image

Describe the solution you'd like.

I can see that there's a NppDarkMode::subclassTabControl(hwnd) which Notepad++ uses internally to subclass (for example) the ShortcutMapper's tab control.

If DARKMODESUBCLASSANDTHEME (specifically, NppDarkMode::autoSubclassAndThemeChildControls() also called NppDarkMode::subclassTabControl(hwnd); (or equivalent) when it finds a WC_TABCONTROL in the dialog, it would make sure that tab controls are also properly subclassed for Dark Mode. (I say "or equivalent", because I see that the other calls in that function are passing in the NppDarkModeParams p, whereas the existing subclassTabControl() doesn't take that argument; I don't know if it would be better for some reason to add in that parameter to the function: my tests indicate it works as written, without that argument, but I am far from an expert on Dark Mode coding.)

Debug Information

Notepad++ v8.8.1   (64-bit)
Build time : Jun 11 2025 - 15:54:05
Scintilla/Lexilla included : 5.5.6/5.4.4
Boost Regex included : 1_85
Path : C:\usr\local\share\github\notepad-plus-plus\PowerEditor\visual.net\x64\Debug\Notepad++.exe
Command Line : 
Admin mode : OFF
Local Conf mode : ON
Cloud Config : OFF
Periodic Backup : ON
Placeholders : OFF
Scintilla Rendering Mode : SC_TECHNOLOGY_DIRECTWRITE (1)
Multi-instance Mode : monoInst
File Status Auto-Detection : cdEnabledNew (for current file/tab only)
Dark Mode : ON
Display Info : 
    primary monitor: 1920x1080, scaling 100%
    visible monitors count: 1
    installed Display Class adapters: 
        0000: Description - Intel(R) UHD Graphics 770
        0000: DriverVersion - 32.0.101.6556
OS Name : Windows 11 Home (64-bit)
OS Version : 24H2
OS Build : 26100.4061
Current ANSI codepage : 1252
Plugins : 
    CollectionInterface (1.0.99.99)

Anything else?

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions