Gambas Documentation
Application Repository
Code Snippets
Compilation & Installation from source code
Components
Controls pictures
Deprecated components
Developer Documentation
Development Environment Documentation
Documents
About The Best Formula In The World
Architecture details
Benchmarks
Books
By Reference Argument Passing
Compatibility between versions
Creating And Using Libraries
Database Datatype Mapping
Database Request Quoting
Date & time management
Dates and calendars
DBus and Gambas
Differences Between Shell And Exec
Differences From Visual Basic
Distributions & Operating Systems
Drag & Drop
DrawingArea Internal Behaviour
External functions datatype mapping
Frequently Asked Questions
Gambas Farm Server Protocol
Gambas Mailing List Netiquette
Gambas Markdown Syntax
Gambas Naming Conventions
Gambas Object Model
Gambas Scripting
Gambas Server Pages
Gambas Unit Testing
Gambas Wiki Markup Syntax
Getting Started With Gambas
Getting Started With The IDE
Hall Of Fame
Housekeeping, cleaning up
Image Management In Gambas
Including Help Comments in Source Code
Installation from binary packages
Interpreter limits
Introduction
Just In Time Compiler
Just In Time Compiler (old version)
License
Localisation and Internationalization
Mailing Lists & Forums
Network Programming
ODBC Component Documentation
PCRE Pattern Syntax
Porting from Gambas 2 to Gambas 3
Previous News
Project Directory Structure
Release Notes
Gambas 2.23.0
Gambas 2.23.1
Gambas 2.24.0
Gambas 3.0.0
Gambas 3.1.0
Gambas 3.1.1
Gambas 3.2.0
Gambas 3.2.1
Gambas 3.3.0
Gambas 3.3.1
Gambas 3.3.2
Gambas 3.3.3
Gambas 3.3.4
Gambas 3.4.0
Gambas 3.4.1
Gambas 3.4.2
Gambas 3.5.0
Gambas 3.5.1
Gambas 3.5.2
Gambas 3.5.3
Gambas 3.5.4
Gambas 3.6.0
Gambas 3.6.1
Gambas 3.6.2
Gambas 3.7.0
Gambas 3.7.1
Gambas 3.8.0
Gambas 3.8.1
Gambas 3.8.2
Gambas 3.8.3
Gambas 3.8.4
Gambas 3.9.0
Gambas 3.9.1
Gambas 3.9.2
Gambas 3.10.0
Gambas 3.11.0
Gambas 3.11.1
Gambas 3.11.2
Gambas 3.11.3
Gambas 3.11.4
Gambas 3.12.0
Gambas 3.12.1
Gambas 3.12.2
Gambas 3.13.0
Gambas 3.14.0
Gambas 3.14.1
Gambas 3.14.2
Gambas 3.14.3
Gambas 3.15.0
Gambas 3.15.1
Gambas 3.15.2
Gambas 3.16.0
Gambas 3.16.1
Gambas 3.16.2
Gambas 3.16.3
Gambas 3.17.0
Gambas 3.17.1
Gambas 3.17.2
Gambas 3.17.3
Gambas 3.18.0
Gambas 3.18.1
Gambas 3.18.2
Gambas 3.18.3
Gambas 3.18.4
Gambas 3.19.0
Gambas 3.19.1
Gambas 3.19.2
Gambas 3.19.3
Gambas 3.19.4
Gambas 3.19.5
Gambas 3.19.6
Gambas 3.20.0
Gambas 3.20.1
Gambas 3.20.2
Gambas 3.20.3
Gambas 3.20.4
Gambas 3.21.0
Gambas 3 RC1
Gambas 3 RC2
Gambas 3 RC3
Gambas 3 RC4
Gambas 3 RC5
Gambas 3 RC6
Gambas 3 RC7
Reporting a problem, a bug or a crash
Rich Text Syntax
Screenshots
Text highlighting definition file syntax
The Program has stopped unexpectedly by raising signal #11
Wayland and Gambas
WebPage Syntax
Web site home page
What Is Gambas?
Window & Form Management
Window Activation & Deactivation
Window Life Cycle
XML APIs
Error Messages
Gambas Playground
How To's
Language Index
Language Overviews
Last Changes
Learning topics
Lexicon
README
Search the wiki
To Do
Topics
Tutorials
Wiki License
Wiki Manual

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.

  • The debugger panel can be undocked, and put on another screen if needed.

  • 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 bool C type using typedef instead of a preprocessor define.

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

DEVELOPMENT ENVIRONMENT

About dialog

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

  • Disable animations on the hidden GridView.

  • New design with styled borders.

Code & text editor

  • Diff mode works again.

  • Use thousand separators when displaying cursor position.

  • Do not allow diff mode for locked files.

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

  • 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 split editor views.

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

  • Support for json highlighting.

  • Support for the new xml highlighting.

  • Fix breakpoints synchronization between the editors and the debugger.

  • Editor location style prefix is correctly handled now.

Console output

  • Rework the undock feature.

Database editor

  • Fix request editor layout.

  • Some cosmetic changes.

  • Display the database name in the connection button.

  • Fix table copying.

Debugger

  • Fix a crash occurring 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 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.

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

  • External debugging does not stop automatically anymore.

  • Prevent a crash if 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 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.

  • 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 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.

  • 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.

  • 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 whether 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.

  • 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 points 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 breakpoints list.

  • Fix the behavior 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.

  • 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.

  • Theme background color is now chosen between a fixed number of predefined colors.

  • Fix background color buttons check mark drawing.

  • Make the dialog without margin.

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

  • 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 opacity.

  • Redesign the highlighting tab.

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

  • 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 default 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.

Procedure popup

  • The procedure combo didn't shrink anymore.

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

  • 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.

  • Better drawing of private methods in the procedure popup.

Process manager

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

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.

  • Invert project icons when a dark theme is used.

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 searching 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 search 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.

  • Fix 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 versions are displayed.

Tips dialog

  • Make wizard buttons larger.

Translation workspace

  • Some layout fixes.

Version control

  • Allow to individually check the files to commit.

  • Single file version control information dialog works again.

  • 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 scroll bar 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.

  • Update some messages.

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

  • Add a "cherry-pick" button.

  • Split the history tab toolbar.

  • 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.

  • 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.

  • 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 behavior.

  • 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 the gitignore file to its last version.

  • 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 memory 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 file descriptor will be signaled again and again.

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

  • Update gbx3 man page.

  • 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 ... syntax.

  • 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 checks 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 ... syntax.

  • 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.

  • 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.

FARM SERVER

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

SELF TESTER

  • Plan tests to ensure each will run.

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 no field has been set.

  • 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 is 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 fail over solution.

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

  • Don't use desktop portal by default, 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 independently.

  • 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.

ColorPalette

  • 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.

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

  • Move a debugging message displayed when GB_STOCK_DEBUG environmental variable 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 style sheets 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 pad 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 style sheets 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 pad 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 behavior 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 case insensitive 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 executions.

  • 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 socket 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 behavior 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.