Gambas 3.21.0

What's new?

Among the hundreds of fixes and enhancements, the main features of this release are the following:

In the development environment

  • A new GUI theme with configurable roundess, flatness and contrast.

  • A better debugging of web applications.

  • A image editor with better selection and grid drawing, and with faster shape loading.

  • A new process manager that displays all Gambas interpreter currently running on the system.

  • Project tree filter has been fixed.

  • Version control now allows to commit files individually.

  • Version control allows to cherry-pick commits.

  • The IDE is now colorized according to the current branch.

In the core language

Otherwise

  • Support for recent versions of gcc.

Compilation and installation

Read the instructions there.

If everything was fine, type "gambas3" to run the development environment.

Enjoy it !

Changelog

CONFIGURATION

  • Italian translation of mime and desktop files.

  • Fix README and README.md files.

  • Update AUTHORS file.

  • Add Hasan Merkit as Turkish translator to the AUTHORS file.

  • Switch bytecode version to 3.21.

  • Add -std=gnu17 flag in acinclude.m4 to compile with recent versions of gcc.

  • Define -std=gnu17 compilation flag only on gcc versions that know it.

  • Define bool C type using typedef instead of a preprocessor define.

  • Explicitly check if the _Bool datatype is native.

  • Define the bool datatype only if _Bool is not a native datatype.

DEVELOPMENT ENVIRONMENT

About dialog

  • Workaround a GTK+ quirk that makes the window enlarge horizontally up to the screen width.

  • Disable animations on the hidden GridView.

  • Some redesign.

Code & text editor

  • Diff mode works again.

  • Use thousand separators when displaying cursor position.

  • The procedure combo didn't shrink anymore.

  • Do not allow diff mode for locked files.

  • Handle editor locations that can be prefixed with style flags now in the procedure list.

  • Add the ability to paste as help comments in the paste special dialog.

  • The procedure popup now follows the new styled theme.

  • Fix the drawing of the "declarations" entry in the procedure list.

  • Fix some drawing and keyboard handling in the procedure list.

  • Add a filter in the procedure list.

  • Always show the filter in the procedure list.

  • If the procedure list displays only one name, hitting Return or Enter key automatically selects it.

  • Fix editor layout in split mode.

  • Procedure combo colors are defined correctly now.

  • Fix local variable type detection.

  • Fix error message colors.

  • Always use a white background when printing editor contents.

  • Correctly show and hide the current debugger position on splitted editor views.

  • The event completion triggered when hitting _ on a function declaration is back.

  • Support for json highlighting.

  • Support for the new xml highlighting.

  • ESC key does not open the search panel anymore.

  • Fix breakpoint synchronization between the editors and the debugger.

  • Editor location style prefix is correctly handled now.

  • Some tweaks in procedure list drawing.

  • Better drawing of private methods in the procedure popup.

Connection editor

  • Fix request editor layout.

  • Some cosmetic changes.

  • Display the database name in the connection button.

Console output

  • Rework the undock feature.

Database editor

  • Fix table copying.

Debugger

  • Fix a crash occuring when clicking in a void stack backtrace list.

  • Fix background color of error label on dark theme.

  • Fix error message colors.

  • The hexadecimal button now works on the contents tab of expression windows too.

  • Use styled borders.

  • Fix debugger expression window layout.

  • Fix automatic layout of stack backtrace and breakpoints list.

  • Make the stack backtrace always visible.

  • Add a button for undocking the debugger panel.

  • Values that just changed are displayed using the theme highlight color for the foreground, not the background.

  • Some layout fixed of debugger windows.

  • Do not emit the q command on stop if the debugger is running.

  • External debugging does not stop automatically anymore.

  • Prevent a crash is the debugged process terminates while the IDE is quitting.

  • Fix a possible crash when there is an error before the startup function is called.

  • Open the console immediately as soon as something is written in it.

  • Save debug windows configuration each time the Stop button is pressed in external debugging mode, otherwise the current configuration is lost the next time a running process is caught.

  • Fix parsing of collection keys in debugger windows, thanks to the new Split() syntax.

  • Don't allow to remove breakpoints while the debugger is running.

  • As gb.httpd embedded HTTP server component does not serialize requests anymore, the debugger now uses external debugging to debug projects using that component, directly or indirectly.

  • Fix debugging when the internal HTTP server is used.

  • Fix firefox profile name used for debugging web applications.

  • Prevent a possible recursion when opening the project location dialog.

Debugger configuration dialog

  • Redesign debug configuration dialog.

  • Add a toggle for disabling JIT compiler cache.

  • Add automatic file completion to argument list.

  • Make it a bit larger.

  • Allow to toggle the "Use HTTP server" debugging option when gb.web.gui component is used.

Editor highlighting

  • Fix specific IDE highlighting files.

  • Highlighting themes automatically adapt to the previous background color.

  • Remove default highlighting themes. They were moved to the gb.highlight component.

  • Fix highlighting theme initialization.

  • Support for new oblique style property.

  • Add CSV files highlighting.

File information dialog

  • Fix version control label position.

  • Fix layout.

Form editor

  • Fix toolbox refresh, when sometimes no tab were selected.

  • Fix a possible crash when dropping a control on the background from the toolbox.

  • Redraw arrangement icons.

  • Display the control help when selecting a control.

  • Draw panel borders correctly.

  • Draw the background color of containers.

  • Fix how Panel is rendered.

  • Controls can define a _SimilarApply property that list the properties applied when the control is changed into another one.

  • Draw border of unknown controls correctly.

  • Redesign and fix gradient tab.

  • Rework background drawing.

  • Make the control change routine more robust to properties that are not compatible between the old and the new control type.

  • Fix layout.

  • Make current menu readable in the menu editor.

  • Ensure that the width of the left column of the property sheet can be wide enough.

  • Workaround the QT6 bug that make control with one pixel width or height invisible to mouse events.

  • Creating a control works correctly again.

  • Fix the layout of the WebForm font selection dialog.

  • The backward-compatible property conversion is now done in the family classes.

  • Support for the new WebForm Font class.

  • Remove all ScrollView workarounds that are not needed anymore.

  • Add a placeholder text in the search field of the hierarchy tab.

  • Display the controls of the libraries used by the project in the toolbox.

  • Fix toolbox refresh.

  • The font chooser dialog allows to explicitly toggle is we want to use the default font family or an explicit one.

  • All properties whose name ends with "Text" are translatable by default.

Help browser

  • Fix offline help browser in dark mode.

  • Implement the readme wiki command.

  • No need to do anything specific in dark mode anymore.

  • Some CSS fixes for offline mode.

  • Fix GUI components help.

Icon selection dialog

  • Display the number of displayed stock icons.

Image editor

  • Fix "magic wand" selection tool.

  • The arrow keys can be used for moving the image when the "move" tool is enabled.

  • Fix "polygon" drawing tool, and allow 3 and 4 sides.

  • Take dark theme into account when drawing available shapes.

  • "ellipse", "rectangle" and "polygon" tool now uses the ALT key for centering. SHIFT is for ignoring snapping.

  • Use the invert stock icon everywhere.

  • Always use ALT instead of SHIFT for resizing tools.

  • Fix how grid state is saved.

  • Remove diagonal grids, they are useless.

  • Make the shape delete button smaller.

  • Draw shapes with solid lines.

  • Correctly detect shape points located on the shape extents.

  • Optimize the loading of shapes.

  • The "line" tool automatically starts at the last point of the current selection if available.

  • Choosing a color now automatically selects the color tab in the property sheet.

  • Opened selections now use their first and last poins as magnets.

  • Fix magnet representation on dark and light modes.

  • The unselect selection button now unselects only the current shape if only a shape is selected.

  • If SHIFT is pressed, then all points of the selection are magnets.

  • Colorize action now always apply a 100% brightness increase first.

  • Choose an accurate height for the font selector in the property panel.

  • Draw grid lines in a more visible way.

  • Draw selection bolder and in yellow so that it is more visible.

  • Rework background drawing.

Main window

  • Add a toggle button and a menu entry in the View menu that displays the breakpoint list.

  • Fix the behaviour of the search button on the main window.

  • Fix main window icon.

  • Fix halt icon in View menu.

  • Do not show the warnings panel automatically anymore after a compilation.

  • Print the number of warnings in the corresponding bottom panel button.

  • Use the new styled borders everywhere.

  • Make workspace and side panel buttons a bit bigger.

  • Fix "View browser" menu entry visibility management.

  • Add a process manager tool to display the gambas interpreter processes currently running on the system.

  • Display compilation and making executable duration time with three decimal digits, as the compiler is so fast. :-)

  • Use an arrow instead of a dot to separate project paths from project names in the recent project menu.

Make executable dialog

  • Use styled borders.

  • Add a global option that copies the executable path into the clipboard when an executable is made.

  • Layout and GUI fixes.

Open project dialog

  • Some little design fixes.

  • Layout fixes.

Options dialog

  • Correctly save the "Automatically revert non important files" settings.

  • Use new SpinBox MinText property to display "Number of CPUs" instead of a zero value in the number of background jobs option.

  • Fix refresh when options change.

  • Add a button to define the background color of the editors and terminals.

  • Don't use a too big editor font for displaying options.

  • Relayout the highlighting tab.

  • Theme background color is now chosen between a fixed number of pre-defined colors.

  • Fix background color buttons check mark drawing.

  • Make the dialog without margin.

  • Some design changes.

  • Backgrounds now follow the brightness slider and the dark theme.

  • Cosmetic changes.

  • Fix title fonts.

  • Add options for choosing the background and the selection types.

  • Store theme options settings in their own slot.

  • Add an option to toggle flat borders.

  • Uncompress the offline documentation using a background task.

  • Light backgrounds are less saturated.

  • Remove the selection shape option.

  • Add an option to define the style contrast.

  • Redesign the highlighthing tab.

  • Add a option to always use a white background on image previews in dark mode.

  • Some relayout. Move the "image preview background" option in the "Interface" tab.

  • Use a yellow color for the "new documentation available" message.

  • If uncompressing the online help fails, display a detailed error message.

Packager

  • Add QT6 support packaging. Fix other support packaging.

  • Update AppImage defaut configuration.

  • Add support for OBS syntax in appimage ubuntu repository.

  • Fix message label layout during packaging.

  • Fix version control command output displayed in error message dialogs.

Process manager

  • Stop watching processes when the window is hidden.

  • Refresh processes each second.

Profile editor

  • Fix background color of duration column in the code viewer.

Project browser

  • Clicking on the directory browser works correctly again.

Project management

  • Don't crash when closing a project if reverting non important files fails. Display a message instead.

  • Ignore unknown inherited classes when loading information about a component or a project.

  • Draw project boxes rounded and bigger.

  • Fix drawing of "Open in another window" button in project boxes.

  • Correctly import class list from *.list description file.

  • Don't put the .desc directory inside the source archive.

  • Removing compilation files now removes the description files too.

  • Display a warning message when creating the executable if there are compilation warnings.

  • Save and restore class descriptions directory when making the executable.

Project open dialog

  • Fix how Open in another window button is rendered inside project boxes.

  • Better drawing of "open in new window" button.

Project properties dialog

  • Add 3.21 version to the bytecode list.

  • Some relayout.

Project tree

  • Rework filters so they are reliable.

  • Lock the project tree during refresh.

  • Do not lock the project tree between project changes.

  • Fix breakpoint icon in the project tree top bar.

  • Correctly reset project tree filter when loading a project.

Report editor

  • CReportBrush class now handles transparent colors in gradients correctly.

Search panel

  • Hitting ENTER or SHIFT+ENTER in the search field now moves to the next or previous find when we are searchin inside the current function or current file.

  • Fix background color of last column.

  • Opening the search panel now always starts with a void search field.

  • Fill the searcha and replace fields combos with previous values in the right order.

  • The title of the callers list is now a button that moves back to the called function when clicked.

  • Always hide the panel when searching for callers.

  • Fix callers list refresh.

  • Fix search in current function when nothing is found.

  • Use the new AutoResize property on the search location combo-box.

  • Prevent a possible crash during status refresh.

  • Print a warning if the estimated character width is null, and use the width of the 0 character instead.

  • Ignore search results whose source code has been removed.

  • Hide the search result list only if the search panel is explicitly hidden. Not if the IDE window is minimized.

  • Don't refresh the search list if the bottom panel is hidden.

  • Fix a possible crash when displaying a search result having no line position.

Software farm

  • Don't crash when uninstalling a project installed from the software farm from the welcome dialog or the project open dialog.

  • Check that the project archive is smaller than 128 MB before publishing it to the farm server.

  • Fix checksum of published projects.

  • Check downloaded software checksum without case sensitivity.

  • Fixed Gambas Farm installed desktop files not creating a menu entry

System information dialog

  • Some redesign.

  • Add the value of Application.DarkTheme.

  • Add a message about information anonymizing.

  • Enhance how program version are displayed.

Tips dialog

  • Make wizard buttons larger.

Translation workspace

  • Some layout fixes.

Version control

  • Allow to individually check the files to commit.

  • Partial commit diff refresh is faster with git.

  • Single file version control information dialog works again.

  • Partial commit works correctly now.

  • All modified files can be indiviually committed, not just the source code files.

  • Always show the push-only (without commit) button.

  • The diff view is correctly refreshed when checking a form file whose only code has changed.

  • Do not show horizontal scrollbar in the branch list.

  • The current branch color is applied to the GUI.

  • Replace some toggle buttons by check boxes.

  • Add the ability to cherry pick a commit from the history tab popup menu. Cherry-picking is automatically aborted if the git cherry-pick command returns any error.

  • Fix crash when opening the history popup menu.

  • Show terminal during the cherry-pick.

  • Update cherry-pick confirmation message.

  • Cherry-picking now reloads the project files.

  • Update some messages.

  • Add a "cherry-pick" button.

  • Add a button to synchronize the branch displayed in the history (fast-forward only).

  • Split the history tab toolbar.

  • Layout fixes.

  • Some layout fixes.

  • Take the .environment file into account in version control (i.e. ignore it).

  • Draw the current branch without a background, letting the Style.Color property do the job.

  • Add application icon and project icon to gitignore. They are generated, so no real need to put them under version control.

Welcome dialog

  • Draw selected button with a frame.

  • Don't invert big Gambas head on dark themes.

  • Draw a disable image for disabled buttons.

  • Add a button that displays system information.

  • Use style to draw buttons.

  • Fix dialog width again.

  • Some redesign.

  • Use a small space between buttons.

  • Fix welcome logo and welcome background color.

  • Do not show the menu bar with the welcome dialog.

  • Remove shadows around the welcome dialog.

Miscellaneous

  • Update French translation.

  • Update Simplified Chinese translation.

  • Update German translation.

  • No need to call Stock.Refresh in Application_Change anymore, as it is done automatically now.

  • Invert project icons when a dark theme is used.

  • Fix incorrect icon references in the main form.

  • Update control icons for dark mode.

  • Environment chooser: Replace a ToolButton by a MenuButton, so that disabled text is grayed out.

  • Update Gambas icons to thin theme.

  • Remove some icons not used anymore.

  • Update default project icon.

  • Update Gambas logo icons.

  • Make the project icon points at Gambas application icon in gb.form.stock.

  • Update Gambas fonts.

  • Support for new gb.gui.qt.webview component.

  • Theme management now uses the new TextHighlighterTheme.Adapt() method and its new behaviour.

  • Fix terminal and search result list colors.

  • Add Tango color theme.

  • Redraw some backgrounds that were too opaque.

  • Creating a class with a name length smaller than two characters now raises an error.

  • The warning panel button is highlighted.

  • Correctly upgrade to version 8 of gitignore file.

  • Rework the background drawing routine.

  • Update financial support list.

  • Use the new After Do statement.

  • Don't crash when showing the properties of a broken symbolic link project file.

  • Optimize the switching of image preview background.

  • Update error message list.

  • Correctly refresh theme background color on system colors change.

  • Add an --update command-line option for updating a project by opening it.

  • Try to print all messages on the error output when using command-line actions.

  • Use gb.clipper2 instead of gb.clipper.

WIKI

  • Fix page width.

  • New upload interface for image pages.

  • Dark mode.

  • Change how titles are displayed.

  • Fixes for the new wiki server.

  • Support for the new password system of the bugtracker.

  • Automatically detect and display the since command of each symbol in the class symbols list.

  • Add a vertical space between the different letters of the index.

  • Code blocks now have a light background.

  • The since command is displayed alone on its line if it is at the beginning of the line.

  • Some CSS fixes for spacing between different markups.

EXAMPLES

  • Update examples projects.

  • Remove the "MoviePlayer" example, as it uses the deprecated Embedder control.

INTERPRETER

  • Add GB.CheckString() API.

  • Fix memoy misalignment on ARM 32 bits systems.

  • Do not crash when loading misaligned archive files on ARM 32 bits systems.

  • Fix JIT implementation of the &= operator.

  • Add GB.FromUnicode() and GB.IntegerToString() APIs.

  • GB.SplitDate() now takes one more argument to tell if the result must be in the local timezone or in UTC.

  • Array.Clear() does not crash anymore on static arrays. It just voids them now.

  • The -T option without arguments works as expected now.

  • Fix conversion to Variant routine that didn't work on 32 bits systems.

  • Make the interpreter compile with C23.

  • If poll() signals a file descriptor with POLLHUP or POLLERR, immediately remove the watch, otherwise the fd will be signaled again and again.

  • Ensure that all pending JIT compilation is finished before forking.

  • Update gbx3 manpage.

  • Rework breakpoint management so that breakpoints inside _init static initializer function work as expected.

  • Add new Clamp() function that clamps a value between a minimum bound and a maximum bound.

  • Don't search for Application_Log in the startup class if it has not yet been loaded.

  • Avoid false positives in circular reference detection by freeing objects differently.

  • Fix compilation on recent gcc.

  • Add a component hook called inside the child process after a fork.

  • Fix the error message raised when reading a floating point value on the stack.

  • Implement AFTER DO..., AFTER DO... and EVERY DO ... syntaxes.

  • AFTER DO now cannot be run again if its previous call has not been triggered yet.

  • Redesign the GB_TIMER structure to save a bit of memory, while adding some flag.

  • Process.Exist() is a new static method that returns if a process exists with a specific id.

  • Correctly release breakpoints set by external debugging.

  • If an object has a __DebugCount property, it will be used by the debugger instead of Count for knowing the number of elements to display.

  • Don't print deprecation messages while evaluating for the debugger.

  • File.RealPath(Path, True) now correctly returns the path unchanged if it starts with .../.

  • Rework how error messages are displayed. Try to always prefix messages with the name of the program.

  • Do not raise an error if the load of an exported class at startup fails. Print a warning message instead.

  • The Is operator now returns FALSE if its first argument is not an object, instead of raising an error.

  • The Is operator now correctly check that its second argument is actually a class.

  • GB.ExistClassLocal() and GB.FindClassLocal() API now take the length of the symbol to lookup as argument.

  • When some object cannot be freed at program exit, print the list of pending allocations before forcing release them.

  • Correctly print the warning message if an error occurs while loading the exported classes of a component.

  • Add FromHtml() routine.

  • Tokenize() is a new subroutine that splits a string into tokens.

  • Take skipped optional subroutine arguments into account.

  • NInStr() is a new routine that searches for a pattern into a string and returns the number of matches.

  • Add String.NInStr(), the UTF-8 sister method of NInStr().

  • When running a child process is an pseudo-terminal, we try initializing the child terminal several times, as it sometimes fails.

  • Split() now uses \ for escaping the right escape character if its escape argument is twice the same character.

  • File.Load() on a directory path does not raise a spurious "Out of memory" error anymore.

COMPILER

  • Add new Clamp() function.

  • Make the compile more clever in making the difference between a keyword and an identifier.

  • Add AFTER DO..., AFTER DO... and EVERY DO ... syntaxes.

  • Add a limit of 255 AFTER / EVERY instructions by class.

  • Don't mismatch the first written FAST and UNSAFE functions options as global options.

  • Be more tolerant when detecting EXEC keyword.

  • Non important little code fixes.

  • Automatically remove all bytecode and description files before compiling everything.

  • Do not remove description file if the -d option is not used.

  • Add FromHtml() routine.

  • Tokenize() is a new subroutine that splits a string into tokens.

  • Allow to skip optional arguments when calling a subroutine.

  • NInStr() is a new routine that searches for a pattern into a string and returns the number of matches.

ARCHIVER

  • Do not emit misaligned archive files anymore.

  • Fix some warning messages.

INFORMER

  • Describe the -f option in the help and in the man page.

SELF-TESTER

  • Plan tests to ensure each will run.

FARM SERVER

  • Use a settings file located in the home directory of the user running the CGI script.

GAMBAS-PACKAGE-CONFIG

  • Fix package descriptions.

  • Disable gb.pdf in openSUSE TumbleWeed.

  • Disable gb.sdl and gb.sdl.sound on openSUSE Tumbleweed.

  • Correctly disable gb.sdl.sound on openSUSE Tumbleweed.

  • Add support for debian 13 aka debian testing for the moment.

  • Fix debian control and rules files.

  • Ignore
    Unknown command @{package}
    @
    commands when the corresponding package is disabled.

  • Add support for Ubuntu 25.04.

GB.ARGS

  • Update Italian translation.

GB.CLIPPER

  • This component is now deprecated.

GB.CLIPPER2

  • Update to Clipper2 1.5.4.

GB.DB

  • Update to the new GB.SplitDate() API.

GB.DB.MYSQL

  • Update to the new GB.SplitDate() API.

  • Correctly identify TINYINT(1) as Boolean Gambas datatype in all cases.

GB.DB.ODBC

  • Update to the new GB.SplitDate() API.

GB.DB.POSTGRESQL

  • Update to the new GB.SplitDate() API.

GB.DB.SQLITE2

  • Update to the new GB.SplitDate() API.

  • Fix an incorrect function declaration.

GB.DB.SQLITE3

  • Update to the new GB.SplitDate() API.

GB.DB2

Connection

  • The Subst(), Exec(), Find()... methods now substitute the same way as in gb.db.

  • Fix Tables.Add() method.

  • Fix Create() and Edit() methods.

Field

  • Fix Table property.

Index

  • Fix Table property.

Result

  • Field names are correctly quoted now when calling the Update() method.

  • Fix a spurious comma in Update() request.

  • Retrieve the current driver from the connection once for each method.

  • Update() does not crash anymore when not setting any field.

  • All() now correctly deals with numeric fields having a NULL value.

Table

  • Fix Fields.Add() method.

Miscellaneous

  • A null value is always translated into a SQL NULL. It's never passed to the driver formatting routine.

  • Fix component name in warning or debug messages.

  • Check that a connection is opened before calling the database driver everywhere it is needed.

  • Redesign the links between the different objects so that their validity behaves the same as gb.db.

GB.DB2.MYSQL

  • Don't prefix fields defined with AS with a dot in query results.

  • Correctly identify TINYINT(1) as Boolean Gambas datatype in all cases.

GB.DB2.SQLITE3

  • Correctly return fields of system tables.

  • Add some new SQLite3 error messages.

  • Fix debug message prefix.

GB.DBUS

  • Fix use of "Every" as an argument name in DBusSignal.class

  • Add the name of the interface in the "Unknown interface" error message.

GB.DBUS.TRAYICON

  • Fix a compilation warning.

GB.DEBUG

  • Update to the new GB.SplitDate() API.

  • Rework breakpoint management so that breakpoints inside _init static initializer function work as expected.

  • Do not automatically stop the Read event when there is no data to read on the debugger pipe.

  • Add process identifier in debugging messages.

  • Fix a possible crash caused by the string argument of the Read event being incorrectly forged.

GB.DESKTOP

  • Add warning messages when some desktop portal methods fail, and use xdg-util as a failover solution.

  • xdg-email uses its generic method on KDE6, otherwise attachments do not work.

  • Don't use desktop portal by defaut, it is too unreliable.

  • DesktopFile: Add Type property, needed to fix Gambas Farm installed desktop files.

GB.DESKTOP.X11

  • Update project icon.

  • X11.MoveWindow() and X11.ResizeWindow() do not crash anymore if they are called first.

GB.DRAW

  • Paint.Shear() is a new method that shears the paint transformation matrix.

  • Paint.Rectangle() takes three new optional parameters that allow to define the radius of each border indepently.

  • A little optimization in Paint.Rectangle() when some borders have no radius.

GB.EVAL

  • Highlight.IsFunction property correctly takes the UNSAFE keyword into account.

  • Be more tolerant when detecting EXEC keyword.

  • Better error message when an identifier that should be a class name is unknown.

  • Correctly parse class names in expressions.

  • Allow to skip optional arguments when calling a subroutine.

GB.EVAL.HIGHLIGHT

  • Fix default theme.

GB.FORM

ButtonBox

  • Redraw default filter images, so that they are visible on more background colors.

  • Ensure that the button is square unless if too wide.

ColorButton

  • Make disabled buttons more readable.

ColorChooser

  • Color component icons are now correctly refreshed on theme change.

  • Do not raise the Activate event when picking a color on the desktop.

  • Use styled border, and redesign the interface a bit.

  • Fix the drawing of the top standard colors palette.

ColorPaletter

  • Use styled border.

  • Mouse wheel scrolls the palette again.

Completion

  • Fix popup foreground color.

DateChooser

  • Use styled border. Some clean-up and redesign.

DirBrowser

  • Use styled border.

DirChooser & FileChooser

  • The bookmark button is now correctly hidden again when useless.

  • Relayout controls on styled border change.

  • Remove little gradient at the end of the directory browser.

  • Setting preview mode by code works as expected.

  • Use new styled borders when the Border property is TRUE.

DirView

  • Keep the current item at the same position when the contents changes, to avoid problems during mouse events.

DocumentView

  • Zooming with mouse wheel now uses the mouse position as zoom center point.

  • Mouse wheel works again.

  • Lighter default background.

FileProperties

  • Use styled border.

  • Fix layout.

FileView

  • Use new styled borders when the Border property is TRUE.

  • PreviewBackground is a new static property that allows to define the background color of image previews.

FontChooser

  • Add more characters in the text preview.

  • Font preview works correctly with gb.qt6 now.

  • Fix font preview in dark mode.

  • Support for decimal font size.

  • Interface sightly redesigned.

  • Fix layout.

  • Redesign the layout behavior.

  • DefaultOnly is a new property that allows to force the font family to be the default application one.

  • Support for the new Font Spacing property.

  • The letter spacing icon is now a button that resets the letter spacing to 0.

  • Do not give the focus to the size SpinBox automatically when the mouse cursor enters it.

  • Display the full font description instead of just the font family.

  • Do not raise spurious Activate events.

  • Use styled border.

  • Some interface redesign.

  • Some layout enhancement.

IconPanel

  • Rework the control layout when there is no border.

  • Uniformize how selection is drawn.

  • Highlight the background of the button panel when the Border property is unset.

  • Fix layout between border and borderless.

  • Fix how selected tab is drawn.

ImageView

  • Support styled border.

ListEditor

  • Use new styled borders when the Border property is TRUE.

  • Fix backgrounds for flat border style.

  • Fix text box background.

MenuButton

  • Don't use selected colors to draw the button when the Menu property is not defined.

  • Correctly react to system colors change.

  • Spurious frames should not be drawn anymore during menu popup.

  • Don't crash when restoring the focus if the previous focused control is now invalid.

  • Add a Draw event that allows to customize what is drawn inside the button.

  • Remove the Wait wayland workaround when opening the popup.

  • Change how the button is highlighted when the popup is opened.

  • Make disabled buttons more readable.

  • Fix background refresh when the system colors change.

  • Do not translate the contents one pixel bottom right when the button is pressed.

SidePanel

  • Remove the popup menu that could change the SidePanel options.

  • Support for styled border merges.

Stock

  • Rewrite the declaration of the Debug property.

SwitchButton

  • New look.

  • Some look tweaks.

  • Adapt look to styled border properties.

  • Better drawing contrast.

  • Fix contrast on extreme values of Style.Opacity.

TabPanel

  • The tab bar width was sometimes not correctly refreshed.

  • Add a Separator property that allows to hide the separator between the tab buttons and the contents when the Border property is FALSE.

  • Better tab bar buttons layout both with border and without border.

  • Fix layout and styled borders merge.

  • Draw current tab button with background color, and hovered buttons with selection color.

  • Draw current tab button and hovered tab button with the same width.

TableView

  • Do not put a flat solid background behind the cell editor.

  • Ignore cell padding when setting the size of the cell editor.

  • Use the cell font for the cell editor.

  • Do not put a flat solid background behind the cell editor.

  • Ignore cell padding when setting the size of the cell editor.

ValueBox

  • Fix mask for currency type.

Wizard

  • Wizard buttons are automatically resized according to the longer button caption.

Miscellaneous

  • The internal DocumentView test form now uses gb.poppler instead of gb.pdf.

  • Update French translation.

  • Update control icons for dark mode.

  • Update filter images so that they are visible inverted on dark themes.

  • Support for new background drawing system in many controls.

GB.FORM.DIALOG

  • Dialog.SelectFont: Use style borders.

  • Dialog.SelectFont: Use default application font when Dialog.Font is NULL.

  • Update project icon.

  • Fix layout of font dialog.

  • Fix layout of ask password dialog.

GB.FORM.EDITOR

TextEditor

  • Fix how margin modification markers are drawn so that it looks correct on dark mode.

  • Prevent a possible infinite recursion when setting the Theme property.

  • Prevent a possible infinite recursion when setting the Highlight property.

  • Highlight matching characters less.

  • Add json mode.

  • Fix highlighting of wrapped lines.

  • Fix GetLocation() method of Gambas mode.

  • Do not put breakpoints and bookmarks in the undo stack anymore.

  • Optimize drawing of wrapped long lines.

  • Use the control background now that there is no background color in highlighting theme anymore.

  • Paint indent lines with dashes. Use the highlight color for the current indent line.

  • Paint include background with hatches.

  • Replace TextHighligterTheme Adapt() method by the Background property.

  • Support for new oblique style property.

  • Draw selection, matching characters, indent lines... on top of the text.

  • Draw matching characters with dotted lines.

  • Draw matching characters and indent dotted lines larger on a light background.

  • Line numbers drawing now shows current line and selected lines.

  • TextEditor[].Highlight() is a new method that returns the result of the line highlighting.

  • Fix a possible crash while drawing, that may have triggered because of the new background drawing system.

  • Use new styled border.

  • Transparently keep BOM character when reading the Text property or using the Save() method if it was present when setting the Text property or using the Load() method.

  • Draw bold text a bit better on big font sizes.

  • The Border property returns the correct value.

  • Use a global styled border only when the preview is visible.

  • Fix look of find and goto panels.

  • Correctly update margin layout in all cases when ShowExpand property is set.

  • React to system color changes.

  • Selection highlight has better contrast according to Style.Opacity.

  • Fix and enhance location detection of javascript files.

  • Editor locations now can be prefixed by style flags.

GB.FORM.MDI

Toolbar

  • Support for Spring controls now they do not inherit Panel anymore.

  • Support for styled borders merge.

  • Fix layout when border is set.

  • Add Border property.

Toolbar configuration dialog

  • Correctly update the layout when a style border property has changed.

  • Toolbar elements are more visible now.

  • Use the new expander, spacer and separator stock icons.

  • Redesign toolbar configuration dialog.

Workspace

  • Workspace: Add Separator property.

Miscellaneous

  • Update Simplified Chinese translation. Avoid a duplicated translation of some word.

  • Update control icons for dark mode.

GB.FORM.MEDIA

  • MediaView: Setting Position property before playback now works as expected.

  • MediaView: Be sure to reset Startup position marker.

GB.FORM.PRINTER

  • Update project icon.

  • Redesign preview window using styled borders.

GB.FORM.STOCK

Stock icons

  • Add caps-lock icon.

  • Redraw identity icon in gambas-thin theme.

  • Add heal, histogram, text-letter-spacing icons.

  • Add lamp-off icon.

  • Add speed icon.

  • Update mahjongg icon in gambas-thin.

  • Redraw gambas icon in gambas-thin.

  • Redraw gambas-thin volume icon so that it is visible correctly on dark themes.

  • New python and perl icons.

  • Redraw equalizer icon.

  • Add expander, spacer and separator icons.

  • Fix wifi status icons in Gambas icon theme.

  • Add wifi-none icon.

  • Add a new battery-empty icon.

  • Change the color for battery-medium to yellow to have a better difference between each state.

  • Update language icon.

  • Add bird, cat and dog icons.

Mime types icons

  • Use js icon for text/javascript mime type.

  • Use archive icon for application/x-bzip2-compressed-tar mime type.

Application icons

  • Add some application icons.

  • Redraw suse application icon.

  • Add vim application icon.

  • Redraw X11 application icon.

  • Add application icon for hp tools.

  • Redraw minecraft application icon.

  • Add application icon for SubtitleComposer.

  • Add Brave application icon.

Miscellaneous

  • Icon map fixes. Right-to-left icon list fixes.

  • Defaut stock icons now use the gambas-thin theme.

  • Move a debugging message displayed when GB_STOCK_DEBUG environmental veriable is set.

  • Modify some gambas-thin icons that were not very readable when converted to dark mode.

  • Restore contrast in gambas-thin icons, and modify the dark theme generation so that the inverted icons are still readable.

  • Add some saturation to dark themes.

  • Rewrite application links file.

  • Update color inversion for dark theme to the new Color.Invert() algorithm.

  • Fix the declaration of the table icon in the icon map.

  • Better automatic conversion of icons to dark theme.

  • Add applications icons and modify icon map for KDE plasma widgets.

  • Fix icon map for battery icons.

  • Now the battery status is working great in all gambas icons exported themes.

  • Remove unused icons.

GB.FORM.TERMINAL

  • Use new styled borders when the Border property is TRUE.

GB.GEOM

  • Rectangle intersection with NULL now returns itself instead of raising an error.

GB.GTK

Application

  • Remove the Animations, Shadows, Theme properties.

  • The Change property is now writable. Writing it raises the Change event everywhere.

  • Call Stock.Refresh if Application.Theme changes.

  • Change events now automatically refresh the control they are sent to.

Border

  • Add Border.Styled constant.

CheckBox

  • Fix width computation on automatic resize.

Color

  • Fix light background color.

  • Fix light foreground color.

Container

  • Add ._Children hidden property for returning the direct children of a container ignoring its possible proxy.

  • ContainerChildren: Add First and Last properties.

Control

  • TopLevel is a new property that returns the top-level windows that contains the control.

  • Drop property is not proxied anymore.

  • Fix default naming of controls so that GTK+3 stylesheets work.

  • Control background is now drawn according to the possible NoBackground properties as expected.

Font

  • Add Spacing property for letter spacing.

Key

  • The "Windows" key is now associated with the Key.Meta flag like with Qt.

  • Key.Code returns the accurate values when hitting a numeric pas key with num. lock off.

  • Add Key.Clear constant used when hitting the 5 numeric pad key with num. lock off.

Mouse

  • Add LeftOnly, RightOnly, MiddleOnly properties, that return if a specific button is pressed and all the others are not.

  • State correctly returns the META key state now.

Paint

  • Fix matrix shear transformation.

  • Paint.Opacity is correctly saved by Paint.Save() and restored by Paint.Restore().

RadioButton

  • Fix width computation on automatic resize.

Style

  • BackgroundOf() and ForegroundOf() now correctly handle control proxies.

TabStrip

  • Fix TabStrip arrangement.

UserContainer

  • Add _NoBackground property to prevent the control from automatically drawing its background color.

  • _Container property now correctly handles properties proxied to the actual internal container.

UserControl

  • Add _NoBackground property to prevent the control from automatically drawing its background color.

  • Add _SetBorderSize() hidden method for defining the size of the control borders.

Window

  • The MouseUp event that can be raised by Window.ShowModal() has valid mouse event data now.

  • Fix a possible automatic increase of window size of 1 pixel horizontally and vertically.

  • Opacity property fixes.

  • Take the menu bar into account again when arranging windows.

  • Fix Window arrangement.

Miscellaneous

  • Don't call gtk_window_set_resizable() on popups, it makes their dimension incorrect.

  • Remove the popup left margin if it is not needed.

  • Remove Panel, HBox, VBox, HPanel and VPanel controls.

  • Change events now automatically refresh the control they are sent to.

  • Fix horizontal centered arrangement with right-to-left direction.

  • Clear the Pango fontconfig caches after a fork to prevent deadlocks.

  • The gb.gtk component is now deprecated.

  • Raise the Change events in one loop.

  • Remove ScrollBar control.

  • Adapt to the new GB_TIMER structure.

GB.GTK.OPENGL

  • The gb.gtk.opengl component is now deprecated.

GB.GTK3

Application

  • Remove the Animations, Shadows, Theme properties.

  • The Change property is now writable. Writing it raises the Change event everywhere.

  • Call Stock.Refresh if Application.Theme changes.

  • Change events now automatically refresh the control they are sent to.

Border

  • Add Border.Styled constant.

CheckBox

  • Fix width computation on automatic resize.

Color

  • Fix light background color.

  • Fix light foreground color.

Container

  • Add ._Children hidden property for returning the direct children of a container ignoring its possible proxy.

  • ContainerChildren: Add First and Last properties.

Control

  • TopLevel is a new property that returns the top-level windows that contains the control.

  • Drop property is not proxied anymore.

  • Fix default naming of controls so that GTK+3 stylesheets work.

  • Control background is now drawn according to the possible NoBackground properties as expected.

  • Correctly take fractional font point size into account in custom control CSS.

  • Fix generated css for fonts with an integer size.

Font

  • Add Spacing property for letter spacing.

Key

  • The "Windows" key is now associated with the Key.Meta flag like with Qt.

  • Key.Code returns the accurate values when hitting a numeric pas key with num. lock off.

  • Add Key.Clear constant used when hitting the 5 numeric pad key with num. lock off.

  • Key[] now returns the expected values.

Mouse

  • Add LeftOnly, RightOnly, MiddleOnly properties, that return if a specific button is pressed and all the others are not.

  • State correctly returns the META key state now.

Paint

  • Fix matrix shear transformation.

  • Paint.Opacity is correctly saved by Paint.Save() and restored by Paint.Restore().

RadioButton

  • Fix width computation on automatic resize.

Style

  • BackgroundOf() and ForegroundOf() now correctly handle control proxies.

TabStrip

  • Fix TabStrip arrangement.

  • TabStrip buttons do not shrink anymore as soon as a control internally using a GtkBox is created.

TextArea

  • TextArea: Workaround the utterly stupid broken design of GtkTextView so that setting the Text property works as expected.

TextBox

  • Remove round borders of flat TextBox.

UserContainer

  • Add _NoBackground property to prevent the control from automatically drawing its background color.

  • _Container property now correctly handles properties proxied to the actual internal container.

UserControl

  • Add _NoBackground property to prevent the control from automatically drawing its background color.

  • Add _SetBorderSize() hidden method for defining the size of the control borders.

Window

  • The MouseUp event that can be raised by Window.ShowModal() has valid mouse event data now.

  • Fix a possible automatic increase of window size of 1 pixel horizontally and vertically.

  • Opacity property fixes.

  • Take the menu bar into account again when arranging windows.

  • Fix Window arrangement.

  • StartResize() is a new method that asks the window manager to resize the window.

  • StartMove() is a new method that asks the window manager to move the window.

  • Use gtk_window_set_resizable(), so that client-side decorations do not draw a useless maximize button when the window is not resizable. Alas the stupid Gnome window manager continues to draw it in that case on the server side.

  • Fix non-resizable windows whose minimum size was always forced to the size of all inner widgets.

  • Resize the window back to its original size when setting the Transparent property.

Miscellaneous

  • Don't call gtk_window_set_resizable() on popups, it makes their dimension incorrect.

  • Remove the popup left margin if it is not needed.

  • Remove Panel, HBox, VBox, HPanel and VPanel controls.

  • Change events now automatically refresh the control they are sent to.

  • Fix horizontal centered arrangement with right-to-left direction.

  • Clear the Pango fontconfig caches after a fork to prevent deadlocks.

  • The gb.gtk component is now deprecated.

  • Raise the Change events in one loop.

  • Remove ScrollBar control.

  • Adapt to the new GB_TIMER structure.

  • Containers are now correctly refreshed when setting their background.

  • Fix mouse button tests and mouse management in popup menus.

GB.GTK3.WEBVIEW

WebView

  • Add Find(), FindNext() and FindPrevious() methods to search for a string.

  • Define the FindIgnoreCase constant.

  • The Link property is now accurate for Start and NewView events.

  • Always accept navigation requests on inner frames, without raising events.

  • Compile with WebKitGTK < 2.40.

GB.GUI.BASE

Application

  • Implement Theme, Animations and Shadows properties in Gambas.

  • Call Stock.Refresh if Application.Theme changes.

ComboBox

  • AutoResize is a new property that makes a read-only ComboBox resizes itself automatically to fit its contents.

  • Add Oxygen style workarounds for the popup placement.

  • Draw popup selection with a rounded box, and add more padding.

  • ADd a GTK+3 painting bug workaround when the popup is closed.

  • Fix drawing with flat borders.

  • Always use a border and text background.

  • Add horizontal padding in the popup according to the styled border radius.

  • Fix popup vertical size.

  • Fix popup selection drawing.

  • Fix popup border.

  • Really fix popup border.

  • Make the arrow a bit smaller.

  • Fix popup drawing.

  • One pixel less for borderless editable ComboBox.

  • Add ComboBox[].Display property that allows to display some rich text instead of the actual item text. Beware that sorting does not take it into account.

  • The Display property of the items is taken into account when sorting.

  • Fix popup border shape when it opens on top of the control.

Font

  • Rewrite some Font methods in Gambas and put them here.

  • Don't convert font family to lowercase.

  • ToString() now rounds letter spacing to one decimal.

  • Use no more than three decimal digits in font size.

GridView

  • Fix how current cell is drawn, and selection drawing.

  • Adapt default background to border flat style.

  • Correctly react to styled border changes.

  • Fix row refresh routine, and selection drawing.

  • Do not draw the bottom selection limit when it touches the gridview bottom border.

  • Choose a grid color adapted to the background style.

  • Fix how selection is drawn.

  • Selected color is more visible in flat style.

  • GridColor is a new property that returns the color used for drawing the grid.

  • Try to make the selected lines more visible.

IconView

  • Draw selection desaturated when the control is disabled.

  • Icon selection now follows styled border properties.

  • Do not crash anymore if Paint.ClipRect returns NULL during the Draw event handler.

  • Keep the current item at the same position as much as possible when the contents changes, to avoid problems during mouse events.

Label

  • Styled border support.

  • Spacing is a new property that adds padding to the left and right side of the Label.

ListBox

  • Draw selection normally.

  • Add ListBox[].Enabled property that allows to disable some listbox items.

  • Add ListBox[].Display property that allows to display some rich text instead of the actual item text. Beware that sorting does not take it into account.

  • The Display property of the items is taken into account when sorting.

Message

  • Fix flat message style.

  • Fix flat message style again.

  • Fix button panel background.

Panel

  • Draw background with the Style class when the Border property is set to Border.Raised, Border.Sunken or Border.Etched.

  • Fix padding management.

  • Fix padding management when new borders are used again.

  • Use Border.Styled for new border system.

  • Use the new _SetBorderSize() method to take the size of the border into account.

  • Do not take the hovered style flag into account when painting the background.

Picture

  • Make Stretch() arguments behave the same way as Image.Stretch().

PictureBox

  • Styled border support.

ProgressBar

  • Draw them rounded.

  • Follow the styled border properties.

ScrollArea

  • Add DefaultBackground property.

  • Draw background with the Style class.

  • Fix scrolling management when the language direction is right to left.

  • Fix styled border and clipping.

  • Add Shape property to let him use a custom border shape.

  • Fix clipping before calling the Draw event.

  • Fix drawing when the Shape property is set.

ScrollBar

  • The scrollbar button has now a minimum size.

  • Use Style.BorderColor to draw scrollbars.

  • Mouse wheel scrolls the scrollbar now.

  • Fix a possible overflow.

  • Fix a division by zero error.

  • Fix arrows colors.

ScrollView

  • Setting the Arrangement property recomputes the contents size immediately. It fixed the behaviour of automatic arrangement of controls drawn with a ScrollView in the IDE.

  • Use extra padding when the new background drawing system requires it.

Slider

  • Make the slider button one pixel smaller so that it is not cropped when the control has the focus.

  • Fix overflows in internal computations.

  • Make the button bigger if possible.

  • Use a button a little bit smaller.

SpinBox

  • Add MinText property. The SpinBox will display that text when its value is the minimum value.

  • Add Round property. The SpinBox value will be rounded to the value of that property.

  • Add Precision property. It is the number of decimal digit that will be displayed.

  • The value of the control is now a Float.

  • Forgot to define the default value of the Border property correctly.

  • Add ShiftStep property. It's the step value used when the SHIFT key is pressed.

  • Add Suffix and Prefix properties.

  • Add AutoResize property.

  • Update documentation.

  • Only the mouse left button can change the value.

  • Add ShiftStep property to the control property list.

  • Add Activate event.

Splitter

  • Prevent possible divisions by zero while computing layout.

  • Order children so that styled borders can be merged.

  • Make splitter work again.

Spring

  • Do not inherit Panel anymore.

Style

  • New system for drawing "styled" control borders and backgrounds.

  • Add Shape, BorderSize and BorderRadius properties.

  • Add Flat property. It is FALSE by default.

  • Add Opacity property.

  • The FramedSelection is now deprecated.

  • Add PaintSelection() method for drawing a selection frame according to the previous properties.

  • Add ClipBackground() method for creating a background clip region according to the previous properties.

  • Add PaintBackground() method for drawing a background according to the previous properties.

  • Add constants for the different shape types.

  • Add a list of shape options constants for squaring specific rounded borders, or hiding specific borders.

  • Paint focus frame even when the Style.BorderFlat property is set.

  • Make square border shapes the default, for backward-compatibility.

  • Use the same opacity for flat background in dark and light themes.

  • Add Color property to define the color used for drawing borders (Color.Foreground by default).

TreeView

  • In multiple selection mode, if ShowCheck is set, then the SPACE key toggles the selection of the current item.

  • In multiple selection mode, if ShowCheck is set, then there is no automatic selection anymore when the arrow keys are used.

  • Set the internal cursor when selecting a single item in multiple selection mode, and correctly raise the Select event.

  • Do nothing when trying to move an item before or after itself.

Miscellaneous

  • Update Italian translation.

  • Use $XDG_DATA_HOME for the last resort directory of the application desktop file.

  • Store the application desktop file inside one of the $XDG_DATA_DIR directories only if it is writable.

  • Try to standardize how selection is drawn in the different controls.

  • Implement Panel, HBox, VBox, HPanel and VPanel containers in Gambas.

  • Add support for background and selection drawn with the Style class in many controls.

  • Define _Similar property for container controls.

  • Automatically merge borders of contiguous controls arranged in the same direction (horizontally or vertically).

  • Rework message dialog layout in both normal and flat styles.

  • Changing HBox, VBox, HPanel and VPanel into other containers define the value of the Arrangement property.

  • ScrollBar control is now implemented in Gambas.

  • Replace timers by After Do where it was possible.

  • Fix symbolic link on gambas logo icon.

  • Only create the temporary application desktop file on wayland as it is a wayland workaround.

  • Add a wayland warning about the desktop file creation.

  • Update message default icons.

  • Use the new FromHtml() routine instead of String.FromHTML().

  • Update documentation.

GB.GUI.QT.OPENGL

  • Fix gb.gui.qt.opengl.component description file.

GB.GUI.QT.WEBVIEW

  • gb.gui.qt.webview is a new component that loads the webview component according to the GUI component loaded by gb.gui.qt.

GB.HIGHLIGHT

TextHighlighter

  • Commands can take options with that syntax: command(option,option...)

  • Implement ignorecase option for word, keyword and symbol commands.

  • symbol command can have children state.

  • Fix default state colors in highlighting files.

  • Print a warning if an highlighting state declares different default state colors.

  • Update color inversion for dark theme to the new Color.Invert() algorithm.

  • Forgot to add Label as a common state.

  • Print a warning if a non-common state has no default state color.

  • The colors of included highlightings are more visible in dark mode now.

  • Fix included highlighting colors again.

  • Do not merge highlighting of successive results of the Symbol command.

  • Use the File.RealPath() method instead of reimplementing the wheel when loading a theme.

TextHighlighterStyle

  • Add Oblique style property.

TextHighlighterTheme

  • AdaptToBackground() is a new method that adapt the theme colors to a specific background color according to its luminance.

  • Names is a new static property that returns the display names of the default themes.

  • List is a new static property that returns the list of default themes.

  • Include background colors are a little bit better.

  • Calling Adapt() without argument resets to the not-adapted initial style.

  • Adapt() keeps a save of the initial styles, so that you can call it several times.

  • Rename AdaptToBackground() method as Adapt().

  • Support for fake "Background" style for backward-compatibility.

  • Replace the Adapt() method by a Background property.

  • Correctly recompute the value of the Dark property in all cases when setting the theme background color.

  • Adapt a theme to a background color by fixing colors having not enough contrast.

  • Do not crash when initializing a theme.

  • Fix theme adaptation to background color.

  • Use new Oblique style property in themes for comments and documentation.

  • Better theme adaptation to background colors.

  • Allow .../ in the theme path.

CSS highlighter

  • Fix highlighting of identifiers starting with dashes.

CSV highlighter

  • Add CSV file highlighter.

  • Add default colors for CSV file columns.

Highlight highlighter

  • Make highlight highlighter takes command options into account.

  • Fix highlight highlighter.

Javascript highlighter

  • Fix regexp highlighting.

JSON highlighter

  • Add json highlighter.

Settings highlighter

  • Add settings highlighting for settings files.

SQL highlighter

  • Support for caseless keywords.

XML highlighter

  • Add XML syntax highlighting.

Miscellaneous

  • Add the default highlighting themes to the gb.highlight component.

  • Clean up default highlighting themes.

  • Update French translation.

  • Don't use pure blue colors in highlighting themes, as they are hard to read on dark backgrounds.

GB.HTTPD

  • Remove a useless test in GB_HTTPD_HOST environment variable management.

  • Pass the GB_JIT_DEBUG variable to CGI scripts.

  • Destroy timers outside of SIGCHLD handler, as the timer destruction function is not reentrant.

  • Pass more headers to the CGI script.

  • Don't serialize forks anymore. gb.httpd can be used as a true CGI-only HTTP server.

GB.IMAGE

  • Color inversion while keeping hue now just uses a 180° hue rotation on the inverted color, so that the action is reversible.

  • Color.Contrast() is a new method that returns the contrast between two colors as a number between 0 (same color) and 1 (maximum contrast).

  • Export blend color routine.

  • Color.Blend() takes an extra optional opacity argument.

  • Color.Opacity() is a new method that add some transparency to a color.

GB.JIT

  • Put all headers inside the translated code without using #include, so that the cache is not incorrectly used if the headers contents change.

  • Display compiler errors better.

  • If $PATH is not defined, define it using the directory where the compiler was found.

  • Prevent a crash at exit if the JIT temporary directory does not exist anymore for any reason.

  • Display the warning message about $XDG_RUNTIME_DIR being not set only in debugging mode.

  • use correct datatype in JIT method.

  • Add -std=gnu17 to the compiler flags, so that JIT code compiles on recent gcc or clang versions.

  • Add -std=gnu17 flag to all compiler exections.

  • Panic on AFTER / EVERY bytecode.

GB.LOGGING

  • Formatter: Replace CStr() by Str() when printing date.

  • Formatter: Add more non showable Backtrace steps.

  • FileHandler: Throw an error on non valid paths.

  • Logger: Stop using autom.FileHandler when sOutput is empty.

GB.MAP

  • Update control icon.

GB.MEDIA.FORM

  • Styled border support.

GB.NET

  • DnsClient: Fix host resolution when the host has both an IPv4 and IPv6 address.

  • Socket: Keep the status stocket after an internal error has been raised, so that the posted Error event gets it.

  • Socket: Fix Connect() method with no arguments.

GB.NET.CURL

  • HttpClient: Don't crash if the sending callback is called whereas the client has been stopped.

  • Fix compilation warnings, and possible incorrectly set options.

  • Correctly ensure that the value of all curl numerical options are passed as long.

GB.NET.SMTP

  • Don't put tests inside gb.net.smtp.

GB.OPENGL

  • Use libepoxy instead of GLEW if present.

GB.PCRE

  • Implement the RegExp.__DebugCount property that tells the debugger the real number of elements in the RegExp array.

GB.PDF

  • Fix compilation of gb.pdf on last poppler library.

GB.QT4

Application

  • Remove the Animations, Shadows, Theme properties.

  • The Change property is now writable. Writing it raises the Change event everywhere.

  • Call Stock.Refresh if Application.Theme changes.

  • Change events now automatically refresh the control they are sent to.

Border

  • Add Border.Styled constant.

CheckBox

  • Fix width computation on automatic resize.

Color

  • Fix light background color.

  • Fix light foreground color.

Container

  • Add ._Children hidden property for returning the direct children of a container ignoring its possible proxy.

  • ContainerChildren: Add First and Last properties.

  • FindChild() correctly finds controls on top first.

Control

  • TopLevel is a new property that returns the top-level windows that contains the control.

  • Drop is not proxied anymore.

  • Use the same default naming of controls as gb.gtk3.

  • Control background is now drawn according to the possible NoBackground properties as expected.

Font

  • Add Spacing property for letter spacing.

Key

  • Add Key.Clear constant used when hitting the 5 numeric pad key with num. lock off.

Mouse

  • Add LeftOnly, RightOnly, MiddleOnly properties, that return if a specific button is pressed and all the others are not.

Paint

  • Paint.LineWidth returns 1 when it has been set to 1.

  • Paint.DrawImage() takes Paint.Opacity into account correctly now.

RadioButton

  • Fix width computation on automatic resize.

Style

  • BackgroundOf() and ForegroundOf() now correctly handle control proxies.

TrayIcon

  • Fix a possible crash while freeing an X11 tray icon.

UserContainer

  • Add _NoBackground property to prevent the control from automatically drawing its background color.

  • _Container now correctly handles properties proxied to the actual internal container.

UserControl

  • Add _NoBackground property to prevent the control from automatically drawing its background color.

  • Add _SetBorderSize() hidden method for defining the size of the control borders.

Window

  • Opacity property fixes.

  • Center newly opened windows by default on X11.

  • Take the menu bar into account again when arranging windows.

Miscellaneous

  • The MouseUp event that can be raised by Window.ShowModal() has valid mouse event data now.

  • Fix global mouse coordinates after a mouse grab.

  • Remove Panel, HBox, VBox, HPanel and VPanel controls.

  • Fix horizontal centered arrangement with right-to-left direction.

  • The gb.qt4 component is now deprecated.

  • Remove ScrollBar control.

  • Adapt to the new GB_TIMER structure.

GB.QT4.EXT

  • TextEdit: Format.Color and Format.Background correctly take alpha channel and default color into account.

  • The gb.qt4.ext component is now deprecated.

GB.QT4.OPENGL

  • The gb.qt4.opengl component is now deprecated.

GB.QT4.WEBKIT

  • Update to the new GB.SplitDate() API.

  • The gb.qt4.webkit component is now deprecated.

GB.QT4.WEBVIEW

  • The gb.qt4.webview component is now deprecated.

GB.QT5

Application

  • Remove the Animations, Shadows, Theme properties.

  • The Change property is now writable. Writing it raises the Change event everywhere.

  • Call Stock.Refresh if Application.Theme changes.

  • Change events now automatically refresh the control they are sent to.

Border

  • Add Border.Styled constant.

CheckBox

  • Fix width computation on automatic resize.

Color

  • Fix light background color.

  • Fix light foreground color.

Container

  • Add ._Children hidden property for returning the direct children of a container ignoring its possible proxy.

  • ContainerChildren: Add First and Last properties.

  • FindChild() correctly finds controls on top first.

Control

  • TopLevel is a new property that returns the top-level windows that contains the control.

  • Drop is not proxied anymore.

  • Use the same default naming of controls as gb.gtk3.

  • Control background is now drawn according to the possible NoBackground properties as expected.

Font

  • Add Spacing property for letter spacing.

Key

  • Add Key.Clear constant used when hitting the 5 numeric pad key with num. lock off.

Mouse

  • Add LeftOnly, RightOnly, MiddleOnly properties, that return if a specific button is pressed and all the others are not.

Paint

  • Paint.LineWidth returns 1 when it has been set to 1.

  • Paint.DrawImage() takes Paint.Opacity into account correctly now.

RadioButton

  • Fix width computation on automatic resize.

Style

  • BackgroundOf() and ForegroundOf() now correctly handle control proxies.

TrayIcon

  • Fix a possible crash while freeing an X11 tray icon.

UserContainer

  • Add _NoBackground property to prevent the control from automatically drawing its background color.

  • _Container now correctly handles properties proxied to the actual internal container.

UserControl

  • Add _NoBackground property to prevent the control from automatically drawing its background color.

  • Add _SetBorderSize() hidden method for defining the size of the control borders.

Window

  • Opacity property fixes.

  • Center newly opened windows by default on X11.

  • Take the menu bar into account again when arranging windows.

  • StartResize() is a new method that asks the window manager to resize the window.

  • StartMove() is a new method that asks the window manager to move the window.

  • StartMove() and StartResize() require at least Qt 5.15.

Miscellaneous

  • The MouseUp event that can be raised by Window.ShowModal() has valid mouse event data now.

  • Fix global mouse coordinates after a mouse grab.

  • Remove Panel, HBox, VBox, HPanel and VPanel controls.

  • Fix horizontal centered arrangement with right-to-left direction.

  • Remove ScrollBar control.

  • Adapt to the new GB_TIMER structure.

  • Workaround popup positioning bug of QT5 on Wayland. Not perfect.

GB.QT5.EXT

  • TextEdit: Format.Color and Format.Background correctly take alpha channel and default color into account.

GB.QT5.WEBVIEW

WebView

  • Add Find(), FindNext() and FindPrevious() methods to search for a string.

  • Fix the Find() logic with case sensitivity.

  • Always raise the Finish event after the Error event.

  • The Link property is now accurate for Start events (but not for NewView events).

  • Always accept navigation requests on inner frames, without raising events.

  • Do compile with Qt version < 5.14.

  • Fix incorrect declaration of slot only used with QT6.

GB.QT6

Application

  • Remove the Animations, Shadows, Theme properties.

  • The Change property is now writable. Writing it raises the Change event everywhere.

  • Call Stock.Refresh if Application.Theme changes.

  • Change events now automatically refresh the control they are sent to.

  • Calls the event loop just after setting Application.Font, so that the effect is immediate like with Qt5.

Border

  • Add Border.Styled constant.

CheckBox

  • Fix width computation on automatic resize.

Color

  • Fix light background color.

  • Fix light foreground color.

Container

  • Add ._Children hidden property for returning the direct children of a container ignoring its possible proxy.

  • ContainerChildren: Add First and Last properties.

  • FindChild() correctly finds controls on top first.

Control

  • TopLevel is a new property that returns the top-level windows that contains the control.

  • Drop is not proxied anymore.

  • Use the same default naming of controls as gb.gtk3.

  • Control background is now drawn according to the possible NoBackground properties as expected.

  • Remove the wayland workaround in ScreenX and ScreenY properties, it seems not to be useful anymore.

Font

  • Add Spacing property for letter spacing.

Key

  • Add Key.Clear constant used when hitting the 5 numeric pad key with num. lock off.

Mouse

  • Add LeftOnly, RightOnly, MiddleOnly properties, that return if a specific button is pressed and all the others are not.

Paint

  • Paint.LineWidth returns 1 when it has been set to 1.

  • Paint.DrawImage() takes Paint.Opacity into account correctly now.

RadioButton

  • Fix width computation on automatic resize.

Style

  • BackgroundOf() and ForegroundOf() now correctly handle control proxies.

TrayIcon

  • Fix a possible crash while freeing an X11 tray icon.

UserContainer

  • Add _NoBackground property to prevent the control from automatically drawing its background color.

  • _Container now correctly handles properties proxied to the actual internal container.

UserControl

  • Add _NoBackground property to prevent the control from automatically drawing its background color.

  • Add _SetBorderSize() hidden method for defining the size of the control borders.

Window

  • Opacity property fixes.

  • Center newly opened windows by default on X11.

  • Take the menu bar into account again when arranging windows.

  • StartResize() is a new method that asks the window manager to resize the window.

  • StartMove() is a new method that asks the window manager to move the window.

Miscellaneous

  • The MouseUp event that can be raised by Window.ShowModal() has valid mouse event data now.

  • Fix global mouse coordinates after a mouse grab.

  • Remove Panel, HBox, VBox, HPanel and VPanel controls.

  • Fix horizontal centered arrangement with right-to-left direction.

  • Remove ScrollBar control.

  • Adapt to the new GB_TIMER structure.

  • Workaround a QT6 bug that quits the application when a standard file dialog is closed.

  • Apparently QT 6.9 does not have a global thread pool GUI-specific anymore.

GB.QT6.EXT

  • TextEdit: Format.Color and Format.Background correctly take alpha channel and default color into account.

  • Load the correct component interface and do not crash anymore.

GB.QT6.WEBVIEW

WebView

  • Add Find(), FindNext() and FindPrevious() methods to search for a string.

  • Fix the Find() logic with case sensitivity.

  • Always raise the Finish event after the Error event.

  • The Link property is now accurate for Start and NewView events.

  • Workaround Qt6 bug so that the request can be cancelled by stopping the Start event.

GB.REPORT2

  • Hidden object are now taken in the count of elements processed by the vertical container.

  • The container is not pushed on next page if its size is exactly the remaining space.

  • The ReportPanel with None arrangement correctly sets the index now.

GB.SCANNER

  • Update project icon.

GB.TEST

  • Fix some documentation comments.

  • When printing all project tests, display one test by line.

GB.UTIL

  • Shell.Copy: Fix the behaviour when the target is a directory.

  • Use File.RealPath() for decoding relative paths arguments of CSVFile and Shell.Copy().

GB.UTIL.WEB

  • The component now has a part written in C that provides an almost 20 times faster version of JSON.FromString().

  • Rewrite JSON.ToString() and JS() in C so that it is a lot faster.

  • JSON.ToString() now converts date values using the Javascript JSON format.

GB.VB

  • Update to the new GB.SplitDate() API.

GB.WEB

  • Request: Documentation fix.

GB.WEB.FEED

  • Update project icon.

GB.WEB.GUI

Align

  • IsLeft() and IsRight() methods take System.RightToLeft into account.

DrawingArea

  • Don't update explicitly on initialization, as the ResizeObserver already triggers it.

Font

  • A new class that represents a Paint and a Control font.

  • The string representation now follows the IDE convention.

  • Only the "size:xxx" property understand the <size>/<line height> CSS syntax.

  • Raise a Change event when one of its property changes.

  • The Font class has Underline and Strikeout properties.

Paint

  • Paint.Font set a css font string for painting text with WebDrawingArea.

  • Setting the Font or the Brush property makes a copy of their argument now.

  • Add Background property for the background color used for drawing.

  • Add Paint.FillText that draw filled text.

  • Add Paint.StrokeText, that draw stroked text.

  • Add Font property and DrawText() method for drawing text with alignment.

  • Add Opacity property.

PaintBrush

  • Add a Copy() method.

WebContainer

  • DeleteChildren() method acts on the _Container property.

  • Some methods can be called by the WebControl constructor, when the children array is not yet initialized.

WebControl

  • The Font Normal property is correctly taken into account.

  • The Font property now takes and return a Font object.

  • Changing the Font object returned by the Font property updates the font and the control.

  • Deleting a control now removes the pending refresh javascript code.

WebDateBox

  • Take the Enabled and the ReadOnly properties into account as expected.

  • Raise the Click event when a date is selected in the popup.

WebForm

  • Correctly generate <div> markups for embedded forms.

WebListBox

  • Raise the Click event as expected.

WebMenu

  • Popup sub-menus work correctly again.

WebScrollView

  • Update focus rectangle on scroll.

  • Implement a specific internal WebScrollViewContainer class, so that the control correctly refreshes.

WebTable

  • EnsureVisible() does not trigger a refresh if the row is already visible.

  • EnsureVisible() works correctly in all cases now.

  • Optimize table refresh when the selection changes.

Miscellaneous

  • Added new environment variable GB_HTTPD_HOST to set the binding of the embedded HTTP server.

  • Update French translation.

  • Automatically stops session processes if the server process disappears.

  • Make "favicon" a symbolic link.

  • Do not export test forms, as they are not put into the executable anymore.

  • Add documentation.