============================================================================ xoblite™ -> an advanced "extended shell" for Microsoft® Windows® 10/11 Copyright © 2002-2025 Karl Henrik Henriksson [qwilk/@xoblite] Copyright © 2001-2004 The Blackbox for Windows Development Team ============================================================================ ################################################ xoblite bb5 | RC6 preview | 0.25.4.22 ########## === Note: The list of changes below is not yet finalized nor complete as of the RC6 preview release; stay tuned... === [changed Taskbar.cpp 2025-04-22 qwilk] - Updated the taskbar mid click handling to also include the recently introduced half-screen window tiling options: - Mid click (without any modifier keys) to Maximize/restore ("zoom") the window == the same action as before - Ctrl+Mid click to tile the window to the left half of the screen (hint: the Ctrl key sits to the left of the Alt key) - Alt+Mid click to tile the window to the right half of the screen (hint: the Alt key sits to the right of the Ctrl key) - Shift+Mid click to tile the window, cycling between the left-right-top-bottom half of the screen with each click. - ...for a list of all taskbar mouse click actions, see https://xoblite.net/shell/?Taskbar [added *.cpp/h 2025-04-14 qwilk] - At long last, the xoblite source code documentation is now available at http://xoblite.net/shell/?SourceCode -> You can use this tool together with the file references in this changes file to look into the specifics of each change, and more! :D [changed BBApi.cpp 2025-03-08 qwilk] - Added workaround for newer Termius builds no longer appearing on the *box taskbar (cf. other WS_SYSMENU related fixes below) [changed Broams.cpp, Taskbar.cpp/h, Desktop.cpp/h 2025-02-20 qwilk] - Added another hotkey'able bro@m to also bring a window back from tiled to its (previously internally saved) non-tiled "floating" state: @xoblite Window Float - A nice set of hotkeys for the combined new window tile/non-tile and existing workspace capabilities could then be e.g.: *Hotkey CtrlAltWin Left @xoblite Window Tile Left -> Tile the window to the left half of the screen *Hotkey CtrlAltWin Right @xoblite Window Tile Right -> Tile the window to the right half of the screen *Hotkey CtrlAltWin Up @xoblite Window Float -> Move the window back to its non-tiled position and dimensions *Hotkey CtrlAltWin Down @xoblite Workspaces Next -> Change to the next workspace (in numerical order) - Support for a new optional sound effect .wav for tile/non-tile operations - default path $Blackbox$\sounds\tile.wav - has also been added - (As a dev sidenote, I also moved all window handling functions over from Desktop.cpp/h to Taskbar.cpp/h to better match their modern-day belongings.) [changed Broams.cpp, Desktop.cpp/h, Settings.h 2025-02-14 qwilk] - Added support for quick and flexible window tiling via hotkey-able bro@ms: - "Default" placement centered at 2/3 of screen size: @xoblite Window Tile Center - 1/2 of screen size tiling options: @xoblite Window Tile - 1/3 of screen size tiling options: @xoblite Window Tile - 1/4 of screen size tiling options: @xoblite Window Tile - 1/6 of screen size tiling options (nb. special mid-section options to complement the 1/3 options above) @xoblite Window Tile [changed Broams.cpp 2025-02-14 qwilk] - Added support for quickly changing to any available workspace (i.e. not just the Next/Previous workspace like before) via hotkey-able bro@ms: @xoblite Workspaces [changed Blackbox.cpp, BBApi.cpp 2025-02-14 qwilk] - Added workaround for some newer Mozilla Firefox builds no longer appearing on the *box taskbar (thanks user bpi95310 for the heads-up) (information for developers: these builds no longer have the WS_SYSMENU flag set and hence weren't passing the BBAPI IsAppWindow() checks.) [information *.sln/vcproj 2025-02-09 qwilk] - Eventually migrating the project over from the now ~legacy Visual Studio Community 2019 to the still current Visual Studio Community 2022 after the release of 0.25.2.9 (RC6 preview build with updated core binaries only) [changed ConfigMenu.cpp 2024-01-21 qwilk] - Added a "Session" submenu to the Configuration menu, containing the classic "Shutdown menu" items, making them always available (read: regardless of menu.rc configuration) [changed Blackbox.cpp 2024-01-06 qwilk] - Re-added the xoblite icon to the system tray when running under Explorer: - Left clicking the icon brings the toolbar, if not hidden, to the front and focused - Right clicking the icon minimizes all windows (cf. Alt+Right clicking on the toolbar taskbar) - Mid clicking on the icon ...QWERTYUIOP_TO_BE_DECIDED :) [changed Taskbar.cpp/h 2023-xx-xx qwilk] - Miscellaneous polishing/tweaks related to task handling under Windows 11 [changed PopupDialog.cpp/h 2022-12-02 qwilk] - Adaptive font size in popup dialog window based on the amount of text (i.e. number of rows) [changed Broams.cpp/h 2022-11-30 qwilk] - Added run box support for generic string editing followed by a specified callback bro@m upon pressing Enter: @Callback @xxxxx yyyyy (e.g. @Callback @xWebViewer URL ) [changed StringItem.cpp 2022-11-30 qwilk] - Changed the mouse click behaviour of string editing menu items as follows: - Left click now executes the command+parameters associated with the menu item (i.e. what previously only happened after editing finished) - Right click now opens the string editor (after editing, click on the "OK" button or press enter to execute the command + updated parameters) [changed Hotkeys.cpp 2022-11-17 qwilk] - Keyboard auto-repeat no longer yields multiple hotkey notifications (added MOD_NOREPEAT flag to modifiers) [changed *.cpp/h 2022-11-10 qwilk] - Instead of a simple boolean disabled (1x) / enabled (2x) setting, the HiDPI scaling factor is now an integer parameter with a range from 1x up to a new ultra high resolution *4x*! :D - It is still configurable from the Configuration/Global menu (but renamed "HiDPI scaling factor"), and saved as a xoblite.rc global setting: xoblite.hidpi.scaling.factor: <1-4> - ...plus matching overall rendering adjustments and improvements all over the place (including e.g. higher resolution glyph rendering etc) [changed Settings.cpp/h 2022-11-06 qwilk] - Completed memory caching+lookups also for window title/label/button/grip/handle style settings (i.e. as a legacy fetch/draw complement to core managed drawing methods) [changed Broams.cpp, PopupDialog.cpp 2022-11-05 qwilk] - Added broam @xoblite About Hide (this hides any open popup dialog window, useful e.g. during multi-step @Script's) [changed BBApi.cpp, StringItem.cpp 2022-11-05 qwilk] - String editing menu items with a title ending with "..." no longer previews the string to edit in the menu item title [changed Menu.cpp 2021-11-20 qwilk] - Re-enabled support for pinning of plugin menus (nb. only one plugin at a time allowed for now) [changed PluginMenu.cpp 2021-11-11 qwilk] - Added a "Get plugins..." (pointing to the xoblite.net plugins page) menu item to the Plugins submenu for improved ecosystem discoverability... ;) [changed PluginMenu.cpp 2021-11-11 qwilk] - For developers: For improved readability, it is now possible to include separators in pluginInfo(PLUGIN_BROAMS) bro@ms lists by specifying @--- as the item's command [changed BBApi.cpp/h 2021-11-08 qwilk] - For developers: Updated the plugin API definition of the preliminary function DrawTextEvolved() to allow Unicode (if != NULL) or ANSI (fallback) strings as input -> bool DrawTextEvolved(HDC hdc, RECT* rect, LPSTR styleElement, LPWSTR textUnicode, LPSTR textANSI, unsigned int fontHeightOverride, unsigned int format, bool getSize); [changed Settings.cpp/h, BBApi.cpp, Broams.cpp, xDesignerGUI.cpp/h 2021-11-04 qwilk] - Added adaptive parsing and caching of all window styling related parameters (hint: ...upcoming new plugin! 8) ) - Furthermore, you can now use Alt+Select in Designer Mode to select the different window styling elements for editing [changed BBApi.h, *.cpp 2021-06-10 qwilk] - Enabled automatic template overloads of some standard CRT functions with more secure variants (e.g. strcpy -> strcpy_s, sprintf -> sprintf_s, etc) - Manually replaced all remaining and non-overloadable standard CRT function calls with more secure variants (e.g. strncpy -> strncpy_s, strcat -> strcat_s, etc) - For more information, see e.g. https://docs.microsoft.com/en-us/cpp/c-runtime-library/security-features-in-the-crt and https://docs.microsoft.com/en-us/cpp/c-runtime-library/secure-template-overloads ) [added Compatibility.manifest 2021-05-31 qwilk] - Added a basic application manifest with default OS version compatibility settings to allow proper detection of Windows 8.1/10 (and possibly beyond?) [changed MenuCommon.cpp 2021-05-29 qwilk] - Added a workaround for empty menus/folders previously crashing the shell if menu titles+grips were simultaneously disabled (i.e. no title/frame/grip oddball scenario) [changed PluginMenu.cpp 2021-05-25 qwilk] - Fixed a stupid (and old?!) bug crashing the shell upon navigating to certain Configuration/Plugins submenus with no plugins loaded... [changed Settings.cpp 2021-05-21 qwilk] - Another experimental feature: Add an "auto" tag to any style element appearance string, and it will dynamically/automatically pick up to 8 colours from the desktop wallpaper... 8) [changed MenuCommon.cpp/h, Menu.cpp/h, BBApi.cpp 2021-05-21 qwilk] - Added experimental (== subject to change) support for user specified menu title/frame/active/grip images (i.e. 24 bpp RGB PNG/BMP/etc to be used instead of a regular *box gradient upon rendering) - Example: menu.title.appearance: $CurrentTheme$\MenuTitle.png - Note that borders, margins etc continue to function as normal; only the gradient itself is in this case replaced with the specified image [changed Sounds.cpp/h, Hotkeys.cpp 2021-05-02 qwilk] - Added a dedicated sound effect for hotkeys ("hotkey.wav") [changed Settings.cpp/h, Broams.cpp 2021-05-02 qwilk] - Fixed an issue related to the taskbar buttons not being properly updated upon Designer Mode dynamic style parameter changes [changed MenuCommon.cpp/h 2021-04-27 qwilk] - Added experimental (== subject to change) support also for user specified menu indicator images (e.g. PNG in 32 bpp ARGB or 24 bpp RGB format, BMP in 24 bpp RGB format), 10x10 (or 5x5 for non-HiDPI) pixels, cf. menu bullets as per below - Example: menu.indicator.appearance: $CurrentTheme$\MenuIndicator.png [changed MenuCommon.cpp/h, Settings.cpp/h 2021-04-26 qwilk] - Added experimental (== subject to change) support for user specified menu bullet images (e.g. PNG in 32 bpp ARGB or 24 bpp RGB format, BMP in 24 bpp RGB format) to be used instead of the regularly drawn built-in menu bullet types (nb. the path may/should include e.g. $CurrentTheme$ or $Blackbox$ etc for portability) - Example: menu.bullet: $CurrentTheme$\MenuBullet.png - The image will be automatically resized to exactly 10x10 (or 5x5 for non-HiDPI) pixels when drawn, but the quality (and performance in case of larger images) will typically be better if you pre-shrink it to 10x10 pixels using an image editor. - Different images for menu.frame and menu.active bullets can also be specified, but then using the new image-bullets-only parameters... menu.frame.bullet: menu.active.bullet: ...respectively, while the existing style parameter menu.bullet.position: continues to specify the position for both of them. - Finally, note that image type bullets are currently not yet directly supported by the xoblite Designer Mode, i.e. manual editing of the style file is needed. [changed Broams.cpp/h, Blackbox.cpp 2021-04-25 qwilk] - Added a xoblite super-powered "run box" capable of executing regular commands, single bro@ms, as well as @Script command scripts! :D (nb. a quick web search using DuckDuckGo can also be initiated from the run box, by entering ? ) - It is opened using the bro@m... @xoblite Run ...which in turn is by default mapped to the hotkey Ctrl+Alt+Win+Space, *if* this combination hasn't already been assigned to something else by the user. - When the run box is open, press Return/Enter to execute the entered command, or Escape to close the run box *without* executing any entered command. [changed Blackbox.cpp/h 2021-04-25 qwilk] - Periodical checks for updates is now performed both on launch as well as on resume from sleep/hibernate (because logged in sessions can be looong nowadays) - Added support for non-archive/files update links for plugins, i.e. a simple link to a website which may then of course also feature docs/changes/etc. [changed Taskbar.cpp 2021-04-17 qwilk] - Changed/remapped some of the mouse click on taskbar actions to improve overall usability and access to new functionality - For more information, see the related online documentation at http://xoblite.net/shell/?Taskbar [changed Taskbar.cpp/h, BBApi.cpp/h 2021-04-12 qwilk] - Added Unicode support for the toolbar's taskbar/windowlabel plus the workspaces menu task handling submenus (nb. prior releases of xoblite were and bb4win in general is for legacy reasons otherwise mostly ANSI only) [changed Blackbox.cpp, Settings.cpp/h, Toolbar.cpp/h, Desktop.cpp/h 2021-04-12 qwilk] - Re-enabled the long ago disabled optional time/date locale support, now used for both the toolbar clock and the desktop date widget - xoblite.rc configuration setting changed from xoblite.toolbar.locale: to xoblite.timedate.locale: to reflect this, where the supplied locale is a language-location tag, e.g. en-US, es-ES, de-DE, fr-FR, sv-SE, zh-CN, ja-JP, etc. - Falls back of course to using the operating system's current time/date locale if not configured [changed Toolbar.cpp, ToolbarMenu.cpp, Broams.cpp, Settings.cpp/h, 2021-04-12 qwilk] - Going crazy with yet another old tradition, it is now possible to allow size asymmetry between the toolbar workspace label and clock... ;) - Configurable from the Configuration/Toolbar menu ("Other elements"), and saved as a xoblite.rc theme-specific setting: xoblite.toolbar.allow.asymmetry: [changed Taskbar.cpp/h, Workspaces.cpp, Settings.cpp/h 2021-04-07 qwilk] - Added the option to show each task's workspace on the taskbar, see "Show task workspace" in the Configuration/Toolbar/Taskbar menu, saved as xoblite.taskbar.show.task.workspace: in xoblite.rc (theme-specific setting) [changed Hotkeys.cpp/h, 2021-04-06 qwilk] - Added support for the Plus, Minus, Command and Period keys (nb. these are keys that are valid for any keyboard/country/region) - Added support for the OEM1-OEM8 and OEM102 keys (nb. these are keys that vary by keyboard/country/region) - Added support for the F13-F24 keys (nb. these are keys typically only available via keyboard vendor SW re-mapping, e.g. of "G1-G6" keys) [changed Taskbar.cpp/h, 2021-04-06 qwilk] - Added support for toggling an application's visibility on all workspaces ("stickiness") by Ctrl+Left clicking on its taskbar button (+ experimental: a yellow gradient indicator will be shown for stickied tasks, or a yellow/red gradient indicator for stickied *and* high priority tasks) [changed Broams.cpp, 2021-04-05 qwilk] - Added new more flexible Explorer toggling related bro@ms: @xoblite Explorer Toggle (cf. the legacy @xoblite ToggleExplorer) @xoblite Explorer Show @xoblite Explorer Hide - Tip: The latter two could e.g. be mapped to the newly added (see below) toolbar button down/up or left/down overrides, as applicable depending on your chosen Explorer taskbar placement (e.g. if the Explorer taskbar is located in its default position at the bottom of the screen, you could map the down button to Hide, and the up button to Show as per above) [changed Toolbar.cpp, Settings.cpp/h, 2021-04-05 qwilk] - Inspired by the previously added mouse click on desktop action overrides, the toolbar button actions are now configurable from the Configuration/Toolbar menu ("Other elements") too, and saved as xoblite.rc theme-specific settings: xoblite.toolbar.downbutton.override: xoblite.toolbar.upbutton.override: xoblite.toolbar.leftbutton.override: xoblite.toolbar.rightbutton.override: - As with the desktop click overrides, holding down the Alt key while clicking on a button will fall back to the default action [changed Toolbar.cpp, ToolbarMenu.cpp, Broams.cpp, Settings.cpp/h, 2021-04-04 qwilk] - Made it possible to individually hide/show the toolbar workspace label, down/up buttons, left/right buttons and clock - Configurable from the Configuration/Toolbar menu ("Other elements"), and saved as xoblite.rc theme-specific settings: xoblite.toolbar.label.hidden: xoblite.toolbar.downup.buttons.hidden: xoblite.toolbar.leftright.buttons.hidden: xoblite.toolbar.clock.hidden: [changed Toolbar.cpp/h, 2021-04-04 qwilk] - Changed the toolbar workspace selection (i.e. leftmost pair) buttons to use down/up glyphs, to differentiate them from the toolbar mode selection (i.e. rightmost pair) left/right buttons [changed BBApi.cpp 2021-02-24 qwilk] - Added support for (optional) "gradient style borders" for plugins using MakeGradientEvolved() based rendering ################################################ xoblite bb5 | RC4+ update | 0.21.2.14 ########## [changed Desktop.cpp, DesktopMenu.cpp, Settings.cpp/h, Broams.cpp 2021-02-06 qwilk] - Since adding support for optional xoblite.rc configurable X1 and X2 mouse click on desktop action overrides seemingly didn't bring about the apocalypse, I have now added support also for Right and Mid mouse click on desktop action overrides... ;) (xoblite.desktop.rclick.override: and xoblite.desktop.mclick.override: respectively, as theme-specific settings) - Directly editable from the Configuration/Desktop menu ("Mouse click overrides") - As a safeguard, for all overrides, holding down the Alt key while clicking will fall back to the default action [changed MenuCommon.cpp 2021-02-06 qwilk] - Back by popular demand, I have resurrected the support for menu .rc [include] items which I've never ever used myself... :) - Syntax example: [include] ("$Blackbox$\menu-include.rc") [changed Blackbox.cpp 2021-02-06 qwilk] - Hitting the F1 aka "help" key when the desktop has the keyboard focus now opens the xoblite online documentation [changed Blackbox.cpp/h, Broams.cpp 2021-01-05 qwilk] - Improved the Explorer taskbar hiding functionality, including continuously re-hiding it if it re-appears... :) [changed Taskbar.cpp/h 2021-01-04 qwilk] - Made it possible to easily toggle the process priority of an application, from its default to *HIGH* and back, using Ctrl+Left click on its taskbar button (a "red" indicator is shown for such prioritized tasks) [changed Toolbar.cpp 2020-12-28 qwilk] - Added support for horizontal touchpad/mouse swipe-scrolling of visible taskbar items (previously vertical only) (developer details: this requires parsing of WM_MOUSEHWHEEL in addition to the regular WM_MOUSEWHEEL message) ######################################################## xoblite bb5 | RC4 | 0.20.12.13 ########## [changed *.cpp/h 2020-12-13 qwilk] - Lots of minor fixes and overall polishing... :D [changed BBApi.cpp 2020-11-14 qwilk] - Added a workaround for potential WoW64 redirection issues when launching certain .lnk files from the menu or elsewhere [changed MenuCommon.cpp 2020-11-11 qwilk] - Menu [path] items ending with .url now gets their extension removed too (previously this was done only for .lnk menu items) [changed Broams.cpp 2020-11-08 qwilk] - Added new broam @xoblite Toolbar MoveToTop (this moves a non-alwaysontop toolbar to the top of the z-order, cf. the previously available MoveToMouse broam but without re-positioning of the toolbar) [changed BBApi.cpp 2020-10-28 qwilk] - Added a small workaround to make Visual Studio Code and Microsoft Teams show up on the taskbar [...again?] (developer details: many otherwise valid Chrome_WidgetWin_1 class windows do not set the WS_SYSMENU flag we usually check as part of the BBApi function IsAppWindow() called when new windows are created) [changed Toolbar.cpp/h, Taskbar.cpp/h, Settings.cpp/h, Broams.cpp 2020-10-25 qwilk] - Added the option to have a mousewheel scrollable taskbar with a configurable maximum number of simultaneously visible items [changed Toolbar.cpp, Taskbar.cpp, Workspaces.cpp/h 2020-10-25 qwilk] - Significant toolbar performance optimization through eliminating unnecessary updates etc [changed Menu.cpp/h 2020-10-21 qwilk] - Significant menu performance optimization through extended caching of gradients etc (was pretty fast before but now even better :D) [changed Alpha.cpp/h, Menu.cpp, Toolbar.cpp 2020-10-21 qwilk] - Generalized the previously toolbar-only corner rounding pixel pre-shuffling in order to be able to use it also for the menu... 8) [changed Themes.cpp 2020-10-16 qwilk] - Added support for .otf format fonts as theme fonts [changed Broams.cpp, xDesignerGUI.cpp 2020-10-16 qwilk] - Added a few colour adjusting "tools" to the Designer Mode: Darken/Lighten/Greyscale/Sepia/Invert/Flip (all accessible via related new bro@ms or the xDesignerGUI plugin menu) [changed Menu.cpp, Settings.cpp, Broams.cpp 2020-10-16 qwilk] - Added support for 1-8 colour menu separators (nb. Solid/Horizontal/MirrorHorizontal/SplitHorizontal/SuperHorizontal only) [changed Taskbar.cpp 2020-10-13 qwilk] - Open non-pinned menus will now close automatically when focus moves to another application [changed Settings.cpp/h, Broams.cpp, FolderItem.cpp 2020-10-13 qwilk] - Menu rounded corners have graduated from their previously experimental status after some further polishing: - Now configurable from the Configuration/Menu submenu, settings saved as xoblite.menu.rounded in xoblite.rc (theme specific setting) - For rounded menus, a gap between menus (based on the menu.frame borderWidth or marginWidth or a default) is automatically added [changed Desktop.cpp, DesktopMenu.cpp, Settings.cpp/h, Broams.cpp 2020-10-10 qwilk] - Added support for optional xoblite.rc configurable X1 and X2 mouse click on desktop action overrides (xoblite.desktop.x1click.override: and xoblite.desktop.x1click.override: respectively, as theme-specific settings) - Directly editable from the Configuration/Desktop menu ("Mouse click overrides") [changed Broams.cpp 2020-10-10 qwilk] - Changed the set style/theme bro@ms from @xoblite SetStyle/SetTheme <...> to @xoblite Set Style/Theme <...> respectively ######################################################## xoblite bb5 | RC3+ | 0.20.9.28 ########## [changed Menu.cpp/h, MenuCommon.cpp/h 2020-09-28 qwilk] - Added support for keyboard search based on the *first* character of menu item titles [changed *.cpp/h 2020-09-26 qwilk] - Workspaces: Mousewheel changing is now configurable via the Workspaces menu - Desktop: The workspace indicator can now be hidden [changed Workspaces.cpp 2020-09-20 qwilk] - Workspaces window enumeration now disregards Rainmeter widgets (i.e. window class "RainmeterMeterWindow") [changed Settings.cpp/h 2020-09-20 qwilk] - Removed a few zombie references to obsolete blackbox.rc settings (e.g. opaque window moving, window focus model...) [changed Blackbox.cpp, Broams.cpp, MenuCommon.cpp, StringItem.cpp + xDesignerGUI.cpp 2020-09-20 qwilk] - Changed all broadcast message (bro@m) calls from PostMessage to SendMessage to avoid potential race conditions ######################################################## xoblite bb5 | RC3 | 0.20.9.13 ########## - First public release candidate phase (no tracking of changes during development) ######################################################## xoblite bb5 | RC2 | 0.20.6.xx ########## - Closed group release candidate phase (no tracking of changes during development) ######################################################## xoblite bb5 | RC1 | 0.19.10.14 ########## [added Wallpaper.cpp/h 2019-10-14 qwilk] - Integrated the functions of the old bsetbg.exe and bsetroot.exe wallpaper tools into xoblite itself (nb. the separation/modularity of these is no longer really needed, and this also avoids the need to call [potentially arbitrary] external, defined per style executables, which was never a good idea security-wise, etc) [changed Settings.cpp/h 2019-10-09 qwilk] - All applicable UI element positions and dimensions are now (re-)calculated relative to the desktop work area instead of to the screen, which means they will also adapt automatically to work area changes, e.g. if the Explorer taskbar is moved to another screen edge [changed *.cpp/h 2019-10-05 qwilk] - Hey, it already looks different!!! ;) - Seriously though, I will not document all the delta changes between bb4 and bb5 here (I think ;) ) ######################################################### xoblite bb4 | RC4 | 0.19.10.5 ########## [changed *.cpp/h 2019-10-05 qwilk] - xoblite will return. Expect different. Switching to *bb5* mode, stay tuned... :D ##################################################################################################