Gambas Documentation
Application Repository
Code Snippets
Compilation & Installation
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
Hall Of Fame
Housekeeping, cleaning up
Image Management In Gambas
Including Help Comments in Source Code
Interpreter limits
Introduction
Just In Time Compiler
Just In Time Compiler (old version)
License
Localisation and Internationalization
Mailing Lists & Forums
Naming Conventions
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 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
Variable Naming Convention
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
Lexicon
README
Search the wiki
To Do
Topics
Tutorials
Wiki License
Wiki Manual

Gambas 3.18.0

What's new?

There are almost one thousand of changes in this release since the 3.17.3 version.

The main features of this release are:
  • Many interpreter optimizations making it faster.

  • The debugger interface was moved to the left panel of the IDE.

  • A project browser was added to the IDE that allows to browse the project data files.

  • A DBus browser was added to the IDE.

  • Bool@(), Byte@()... functions can be the target of an affectation now.

  • Integer arithmetic and conversion now raise an error if overflow is detected. This can be disabled at runtime for backward-compatibility.

  • Properties can be write-only now.

  • The database component now allows to define connection options specific to the underlying database server.

  • The FileView control view modes have been redesigned and file preview has been enhanced.

  • Many stock icons have been added.

  • gb.hash is a new component that implements the Md5(), Sha1(), Sha256() and Sha512() functions, thanks to BusyBox.

  • Many enhancements and fixes to the Web application development component.

Compilation and installation

Read the instructions there.

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

Enjoy it !

Changelog

CONFIGURATION

  • New bytecode version 3.18.

  • Fix detection of C++11 and C++17 compilation flags.

  • Update configuration files to autoconf 2.71.

  • Update README and README.md files.

  • Make Makefile more silent.

  • Add 48x48 version of mimetypes and application icons.

  • Add m4/pkg.m4 to .gitignore list.

  • Do not use the default CFLAGS provided by autotools. Either use the CFLAGS provided on the command-line, or the default one of the project.

DEVELOPMENT ENVIRONMENT

Automatic completion

  • Take local variables declared inside loops into account.

  • Correctly ignore properties when completing the dot operator.

Code editor

  • Selecting an item in the procedure list failed sometimes at the first click.

  • Setting a breakpoint does not mark read-only files as modified anymore.

  • Fix keyword detection (ME, SUPER...) when analyzing an expression to jump to a definition.

  • Fix a possible crash in automatic completion of event handlers.

  • Use the gb.form.editor new goto line panel instead of the custom one.

  • Call the TextEditor.Reset() method when loading the contents, not to raise the Change event.

  • Procedure popup is larger now.

  • Paste special now automatically replaces no-break spaces by normal spaces.

Bottom panel

  • Add a DBus explorer.

  • Console output: Define the icon of the "raise to top" toolbar button.

Debugger

  • Allow to ignore up to eight processes in extern debugging mode.

  • Workaround gnome-terminal that is not able to hold its child process.

  • The console automatic show should work correctly when the console is undocked now.

  • Use the new TreeView item Span property, so that the headings of the debugger trees display correctly.

  • Move the terminal option from global configuration to debugging configuration.

  • Fix xfce4-terminal and mate-terminal support.

  • Closing the internal debugger browser now stops the debugger.

  • Ignore namespace when searching for current debugged class.

  • Display component name in stack backtrace.

  • Stack backtrace and variable list headers are not selectable anymore.

  • New way of storing breakpoints into configuration file.

  • Support for breakpoints inside components.

  • Clear the WebView when closing the debugger browser.

  • Allow to bypass the name check when searching for a component or library project location.

  • Fix a possible crash in stack display during debugging.

  • Allows internal browser to access clipboard from javascript code.

  • Sort local and global variables.

  • Clearing breakpoints outside of debugging mode now works correctly.

  • Use the new debugger stock icons.

  • Put the debugger in the left panel with the project tree.

  • Add a button to reset the location of component projects in the debugger configuration dialog.

  • Allow to choose the browser used for debugging web applications, between Firefox, Chromium or the internal debug browser.

  • Add an internal browser for debugging web applications.

  • The browser used for debugging is now run in its own process and in private mode. Create a custom profile in Firefox for that.

  • Support for debugging inside project components. Breakpoints inside components do not work correctly yet.

Color selection dialog

  • The color chooser dialog does not overflow anymore when selecting an alpha component greater or equal than 128.

File creation dialog

  • The dialog is now used for creating directories.

Form editor

  • Fix multicontainer menu icon.

  • Make the property sheet row height padding a bit larger, following Desktop.Scale.

  • Fix reading and writing of color properties so that they do not trigger an overflow. Forms must be updated and recompiled!

Help browser

  • Correctly handle project help links in online mode.

  • Information about project classes is correctly displayed again.

  • Fix tree refresh on project change.

  • Fix layout of IDE shortcuts help window.

  • Use the https URL for the Gambas web site.

  • Links to a class or a symbol of the current project now do not open in a new window anymore.

  • Fix the online help browser settings management.

  • Fix links to project classes and symbol documentation.

Image editor

  • Change default line join and line cap.

  • Selecting a position is more accurate.

  • Support for composition operation when pasting the clipboard.

  • Do not try to optimize the shape when using the line selection tool.

  • Make the resize / stretch dialog remember the last selected ratio.

  • Fix mouse button management during press and release events.

  • Add a toolbar button that expands or shrinks the selection of the paste frame to the image size.

Main window

  • Hide side panels handles.

  • Add a menu button to the main toolbar to choose the debug browser.

Make executable dialog

  • When making an executable, copy the executable path to the clipboard so that you can paste it to copy the file manually if you need.

Options dialog

  • Fix the list of different terminals.

  • Remove the ability to choose the external browser. The default one given by the environment is always used.

Packager

  • Fix an infinite recursion in category selection.

  • Switch Debian helper minimum version to 10.

  • Correctly ignore all components provided by the runtime when generating dependencies.

Pretty printer

  • A line with PRINT ending with a comma does not indent the next line.

Project browser

  • Add a project browser to the IDE, based on the FileView control.

  • Add a button that toggles the new project browser.

Project make executable dialog

  • When installing a library, do not add the vendor prefix if the project name already has it.

Project open dialog

  • Ignore .project files at the root of home folders.

Project properties dialog

  • Add local repository user and e-mail in git version control information.

Project tree

  • Component files now use the same sort than the project files.

  • Fix popup menu entries state according to context.

  • Fix visibility of version control information menu entry.

  • Fix a possible crash while opening a project.

  • Use a fixed size for the emblems.

  • Do not crash anymore when opening the Open with popup twice.

  • Change the icon for filtering compressed files.

  • Lock the project tree while closing the current project, so that it raises no deferred events.

Search

  • New result presentation.

Software farm dialog

  • Fix layout of project description.

  • Do not crash anymore when login to the farm.

System information dialog

  • Add the version of some programs.

  • Add librsvg to the system information.

Test suites support

  • Fix test result label colors.

Text editor

  • Call the TextEditor.Reset() method when loading the contents, not to raise the Change event.

  • Fix the zoom buttons of the preview toolbar.

  • Selecting an item in the procedure list failed sometimes at the first click.

  • Fix a crash in automatic completion.

Version control

  • Detect errors when git commit is impossible.

  • Better detection of ssh prompts.

  • Use kate if kwrite is not available as version control text editor.

  • Add a menu entry that opens a terminal at the root svn / git repository.

  • Add a menu entry that opens the file manager at the root svn / git repository.

  • Add a bookmark that points at the svn / git repository directory the current project is part of.

  • Support for creating branches.

  • Add fields to define your Git repository identity in Repository tab.

  • Move version control statistics to a new Repository tab in publish dialog.

  • Display the state of the file on top in the information dialog.

  • Check more editors for filling the EDITOR environment variable.

  • Fix the routine that associates a color with a branch name.

  • The command timeout is now 30 seconds instead of 15 seconds.

  • Remove the Revert all changes button in the bottom panel. It can be dangerous to leave it there.

  • Fix a possible crash triggered by version control initialization while opening another project.

Welcome dialog

  • Stop the media player when the form is closed.

  • Don't crash when stopping the medial player.

  • Try to compute the dialog size better.

  • Load and show the welcome dialog only if needed.

  • Fix project items layout.

Miscellaneous

  • Update French translation.

  • The list of translatable properties is now case insensitive.

  • Update module icons.

  • Update some control icons.

  • Update default compact layout.

  • Support for write-only properties.

  • Use the paste-special stock icon where appropriate.

  • Redesign the unique file name generation function.

  • Add gb.geom to the list of components.

  • Running a project does not remove disabled environment variables anymore.

  • Add the component name in IDE tab title for files from other projects.

  • Do not clear the version control and the test console when the project is reloaded.

  • Better find a web browser when opening an URL.

  • Support for gb.hash component.

  • Send crash reports to the mailing-list only if the attachment size is not too big, otherwise use my personal new e-mail address.

  • Default language of newly created project is the current system language now.

  • Start to fix and enhance automatic project documentation.

  • The Project menu has been reorganized.

  • Add a menu entry and a button to compile and create the executable without opening the executable configuration dialog.

  • Always open the project executable configuration if the executable file does not exist on disk.

  • Don't load the wiki documentation at exit if the wiki has never been used.

  • Add shell script test-fast in root dir for quick selftest.

  • Automatic local variable declaration is now enabled by default.

  • Redraw the icon of source files that must not be translated.

  • Hitting ESC does not crash anymore.

  • Disable all actions that could modify the source code while debugging.

  • Snow starts to fall one day before X-Mas now.

  • Extend the snow period until the Epiphany.

  • Use the new application stock icon for the farm dialog.

  • Draw the current branch button with a Label and its new border properties.

  • Fix colors constants overflow in all forms.

  • Fix icon size in the unsaved file dialog.

  • Add fuse_hiddenxxxx files to .gitignore

SELF-TESTER

  • Fix the tests that now overflow.

INTERPRETER

  • Array: Empty is a new property that returns if an array is empty.

  • Collection: Empty is a new property that returns if a collection is empty.

  • Allow to ignore up to 8 processes in external debugging mode.

  • WAIT 0 is now an equivalent of WAIT alone, but with processing of input events.

  • Program exit now can be hold by the debugger to workaround a missing feature of the Gnome terminal.

  • Fix GB_Wait() calls as the meaning of its argument changed.

  • Allow errors to propagate from event handlers when the event is internally raised by the interpreter. All events raised from a component written in Gambas through the Gambas API still do not propagate errors.

  • QUIT now ends the process brutally. C++ static exit routines from unloaded shared libraries are not called anymore, avoiding crashes.

  • Always flush buffered streams at exit even if the exit is immediate.

  • Application.Task is a new property that returns if we are executing a Task object.

  • GB.Every() API now creates a timer that is ignored by the event loop.

  • Add all comparison constants to gambas.h API header file.

  • Fix String[].FindSorted() and String[].ExistSorted() when using gb.Like or gb.Match comparison methods.

  • Replace a global variable by a function argument in CLASS_look() and CLASS_find() functions.

  • Add component name in debugger positions.

  • Add an API to retrieve the last error message.

  • The exported name of a class does not overwrite the name field of the class structure anymore, fixing the stack backtrace.

  • Remove a now useless flag in the internal class structure.

  • Support for breakpoints inside project components.

  • Support for write-only properties.

  • Add a class flag for bytecode strictly older than 3.18.

  • Remove useless LIKELY() and UNLIKELY() macros.

  • Enhance GB.SubstStringAdd() and add GB.SubstStringUnquote() API to support custom quoting in gb.db.

  • Optimize array access and basic arithmetic operator on integer and floats.

  • Fix compilation on non-C99 compiler.

  • Some optimizations of the main interpreter loop.

  • Fix optimization of dynamic variable reading.

  • Fix optimization of dynamic variable writing.

  • Always check bytecode version when the current class changes during interpreter execution loop.

  • Don't use 3.18 multiply and divide optimization if current bytecode version is lower than 3.18.

  • Various optimizations of the interpreter execution loop.

  • Avoid unneeded type conversions when manipulating local variables.

  • NULL can be serialized on streams correctly now.

  • Optimizations of local variables and argument assignments.

  • Optimization of small integer floating point constants.

  • Bool@(), Byte@()... functions can be the target of an affectation now.

  • Move some code outside of gbx_exec_loop.c source file.

  • Fix JIT compilation of class inheriting from another class.

  • Add an API for the JIT compiler that retrieves the address of an object or a class for external functions.

  • The timezone now can be specified in a string representing a date, by adding a space followed by "UTC" or "GMT", a plus or minus sign, the hours, and optionnaly a colon followed the minutes.

  • Fix Format$() on numbers when the format string uses "0" character in the exponant part and the exponant is negative.

  • The divide operator now raises "Mathematic error" when the numerator is infinity, and raises "Division by zero" error only if the numerator is zero.

  • Integer arithmetic and conversion now raise an error if overflow is detected.

  • Check for overflow detection only if the __has_builtin pseudo-macro is implemented by the compiler.

  • Avoid conversion to boolean when possible in conditional jumps.

  • Optimization of conditional jumps based on values known to be Boolean.

  • Prevent Add(), Remove() and Resize() methods on read-only arrays.

  • Check all child terminations when we detect that the SIGCHLD handler has been replaced by an idiotic library like glib.

  • System.IgnoreOverflow is a new property that allows to ignore overflows in arithmetic operations.

  • Replace most of boolean global interpreter flags by bit fields.

  • Don't use -O3. It makes benchmarks slower than using -O2.

COMPILER

  • Add the branch to the version number when it comes from a VERSION file.

  • Display bytecode statistics in verbose, no background task mode.

  • PROPERTY WRITE now declares a write-only property.

  • Does not crash anymore when a negative integer is used for the value of a floating point constant.

  • Remove useless LIKELY() and UNLIKELY() macros.

  • Forbid PROPERTY WRITE when compiled bytecode version is strictly lower than 3.18.

  • Free 14 bytecode slots by using ADD QUICK for numbers between -255 and 255 only.

  • Support for local variable manipulation optimization.

  • Optimization of small integer floating point constants.

  • Bool@(), Byte@()... functions can be the target of an affectation now.

  • Make the compiler more clever when deciding if an identifier is a reserved keyword or not.

  • Some optimizations in the parser.

  • Optimize jumps pointing at a JUMP bytecode.

  • The / operator correctly returns a Float if its arguments are Float.

  • Optimization of conditional jumps based on values known to be Boolean.

  • Workaround incorrect use of unsigned color constants by the IDE form editor.

  • Don't crash anymore if an error is raised while reading command-line arguments.

  • Fix parsing of Debug symbol in preprocessor lines.

  • Optimize variable initialization.

ARCHIVER

  • Add the -l option to list all files included in an archive.

BENCHMARKS

  • Port Python benchmarks to Python 3.

  • Add java benchmarks.

GB.COMPLEX

  • Raise a "Mathematic error" if the real or imaginary part of a complex number is not finite.

GB.DATA

  • Remove uses of deprecated LIKELY() macros.

GB.DB

  • Connection: Request substitution methods now support [&1] and `&1` quoting syntax to quote a table name or a column name.

  • Connection: It's now possible to specify the password in the connection URL.

  • Connection: The URL argument of the Connection constructor is now handled by the Gambas part.

  • Result: Editable is a new property that returns if the result is editable.

  • Connection: Options is a new property that allows to define the specific options of a connection.

GB.DB.FORM

  • DataSource: Prevent Save() method to call itself.

  • DataView: Custom column alignment is taken into account now.

  • DataView: Make blob editor fully translated.

  • Update control icons.

  • Update French translation.

GB.DB.MYSQL

  • Support for the Connection.Options property.

  • Use VARCHAR for string fields up to 65535 characters maximum length.

GB.DB.ODBC

  • Support for the Collection.Options property.

GB.DB.POSTGRESQL

  • Support for the Collection.Options property.

  • Fix a possible buffer overflow.

  • Support for partitioned tables.

GB.DB.SQLITE2

  • Support for the Collection.Options property.

GB.DB.SQLITE3

  • Support for the Collection.Options property.

GB.DBUS

  • DBusProxy: Fix symbol signature generation.

  • DBusProxy: Take annotations into account when generating signature.

  • DBusConnection: DBusConnection now returns the DBusApplication object registered on the specific bus.

  • DBusProxy: _GetSymbols() is a new undocumented method for decoding introspection.

  • DBusProxy: _GetSignature() is made public for getting the signature of a DBus method, property or signal, both in native or Gambas syntax.

  • Enhance conversion from DBus datatype to Gambas datatype.

GB.DBUS.TRAYICON

  • Raise the LayoutUpdated D-Bus signal when the current desktop is Cinnamon, otherwise the menu is not refreshed. Cinnamon seems to ignore the return value of the AboutToShow event.

GB.DEBUG

  • Program exit now can be hold by the debugger to workaround a missing feature of the Gnome terminal.

  • Add component name in debugger positions.

  • Do not display class name ^ prefix in backtraces.

  • Support for breakpoints inside project components.

  • Add a command to remove all breakpoints in one shot.

  • Fix incorrect printf format on 32-bits architectures.

  • Save errno before running the debugger, and restore it after.

  • The debugger now indicates if the printed information is from the current stack frame or from another one.

GB.DESKTOP

  • DesktopFile: GetIcon() now works correctly.

  • DesktopMime: Fix GetIcon() so that stock mime icons are preferred.

  • DesktopFile: Clean up the internal desktop file decoding method.

  • DesktopFile: Add an hidden method for clearing the internal cache.

  • DesktopFile: Fix FromMime() method that searched mime information files incorrectly.

GB.DESKTOP.X11

  • DesktopWindow: Activate() uses the X11 class directly now.

  • The component must require gb.desktop.

GB.DRAW

  • Paint: LineDashOffset is now a synonymous for the DashOffset property.

  • Paint: LineDash is now a synonymous for the Dash property.

  • Paint: Rectangle() with a border radius now works as expected with a negative width or height.

GB.EVAL.HIGHLIGHT

  • TextHighlighter: Fix ToHTML(), ToRichText() and ToANSI() methods.

  • TextHighlighter: Use <tt> instead of <pre> in ToHTML() method.

  • Update some CSS properties.

  • Check first for bracket after function keyword.

GB.FORM

DirBrowser

  • A new control that displays an horizontal directory browser.

DateBox

  • Editor is a new property that returns the internal MaskBox.

DirChooser

  • Find the best associated bookmark when setting the root directory.

  • Showing the toolbar now automatically updates its contents according to the current view.

  • Add the View property.

  • SHIFT + F5 now refreshes the preview cache.

  • Add a preview progress bar.

  • Add a menu entry that disables the preview size limit.

  • Default view is now Normal.

DirView

  • Display unwritable directories with a lock emblem.

  • Display directory custom icons.

FileChooser

  • Showing the toolbar now automatically updates its contents according to the current view.

  • Add the View property.

  • SHIFT + F5 now refreshes the preview cache.

  • Use the new Clipboard.CopyPaths() method.

  • Add a preview progress bar.

  • Add a menu entry that disables the preview size limit.

  • Default view is now Normal.

FileProperties

  • Use the new Trim property for the file name label.

  • Add file last access time.

FileView

  • Display a lock emblem on non-readable files in icon view mode.

  • Add a permission column in detailed view mode.

  • Add FileCount, DirCount and TotalSize properties, to get statistics on the current directory contents.

  • Add a Refresh event that triggers just after the FileView has refreshed its contents.

  • Correctly refresh icons on icon theme change.

  • Add a Selected property that returns if at least one item is selected.

  • Correctly set the item texts so that renaming works as expected in all cases.

  • Add a Rename event that allows to implement a custom file renaming.

  • Copy() is a new method that copy the selected elements to the clipboard as a "text/uri-list".

  • Automatic support of drag & drop.

  • Paths is a new property that returns the absolute paths of all selected elements.

  • Add a Filter event, that allows to filter what is displayed file by file.

  • The preview background task is now automatically stopped as soon as the control is hidden.

  • MaxPreviewSize is a new property that allows to define the size limit of previewed file.

  • The preview size limit does not apply to text files and video files.

  • Remove file details in icon view mode. It's ugly.

  • Fix preview refresh when the control is shown or hidden.

  • Fix a crash when filling the popup menu.

  • Add preview of webp image files.

  • The image file previews are now cached in the /tmp directory. The cache is cleared when the process terminates.

  • Fix generation of svg file previews.

  • Add column padding to the detailed view, as there is no implicit padding anymore in ColumnView.

  • Display directory custom icons.

  • Memorize a different icon size for Compact and Normal view.

  • The ShowDetailed property is now deprecated.

  • View is a new property that allows to define the view style between Normal, Compact, Detailed and Preview.

  • Generate thumbnails differently so that they are smooth on Qt.

  • Display icons for XDG user directories having no explicit .directory desktop file.

  • Add preview of text files and PDF files.

  • Add preview of video files if ffmpeg is installed.

  • Add preview of OpenOffice and EPub files.

  • Add the file mime icon on top of its preview, except for video and images.

  • Add line count in text files preview.

  • Add page count in PDF or OpenOffice files preview.

  • Correctly abort the preview background task when the Dir property changes.

  • Reload() method takes an optional boolean argument for refreshing the preview cache.

  • Do not forget to kill the preview background task is some cases.

FontChooser

  • Display font preview correctly in dark mode.

ListEditor

  • Add a Grid property that toggles a grid.

MenuButton

  • Don't crash anymore when triggering the MenuButton shortcut.

SidePanel

  • ShowButton is a new property that hides the little arrow buttons that toggle the panels, and also hides the side handle in transparent mode.

  • Fix layout according to the different combinations of Transparent, Separator and Border properties values.

Stock

  • Implement the ./ syntax for Gambas icon theme.

  • Update stock icons.

  • Fix icon map so that the generated Gambas icon theme is better.

  • Add icon for Gambas 3 application in Gambas icon set.

SwitchButton

  • Make the middle bar narrower.

TabPanel

  • Make ShowTabPanel property visible in the IDE.

  • Fix layout routine.

  • Inner container was one pixel too short vertically!

  • Fix container layout when ShowTabBar property is false.

  • Ensure that the current tab button is always visible even if the last tab is hidden.

ValueBox

  • SelectAll() is a new method that selects the text inside the ValueBox internal editor.

Miscellaneous

  • Bookmarks: Changing the bookmarks automatically updates all DirChooser and FileChooser controls.

  • Update French translation.

GB.FORM.EDITOR

  • TextEditor: The Remove() method now normalizes its arguments to avoid crashing if they are outside the document.

  • TextEditor: ShowFindPanel() and ShowGotoPanel() are now public methods for showing the action panels.

  • TextEditor: Add a panel to go to a specific line.

  • TextEditor: Add a default popup menu.

  • TextEditor: Setting the Breakpoint property correctly raises the Change event.

  • TextEditor: Raise the Change event when loading a file, settings the bookmarks or the disabled breakpoints.

  • TextEditor: Raise the Change event when setting the Text property.

  • TextEditor: Update French translation.

  • TextEditor: Redesign the goto panel.

  • TextEditor: Do not show the goto panel if there is only one line.

  • TextEditor: Application.MiddleClickPaste is taken into account.

GB.FORM.HTMLVIEW

  • HtmlView: Fix a crash triggered by the Clear() method.

  • Fix use of C++11 compilation flags.

GB.FORM.MDI

  • Toolbar: Configuring is a new property that returns if the toolbar is in configuration mode.

  • Use the new Cursor constants.

GB.FORM.PRINT

  • Update French translation.

  • Update the layout of the option panel.

GB.FORM.STOCK

  • Many icon added or redrawn.

  • Gambas icon theme does not inherit gnome icon theme anymore.

  • Fix Gambas IDE application icon in Gambas icon theme.

  • Gambas icon theme now can have specific icons for applications.

  • Update the list of icons that must be reversed with ltr languages.

GB.FORM.TERMINAL

  • TerminalView: Don't open the default popup if the Menu event handler exists.

  • TerminalView: Correctly update the popup menu when it opens.

  • TerminalView: Compute the character width so that non-fixed font characters are not truncated.

  • TerminalView: Use the new support of file paths in the Drag.Paste() method.

  • Update project icon.

GB.GEOM

  • Make the component visible.

  • Add ALIGN_MAKE() macro in gb.geom.h.

  • Add Expand() and Shrink() methods to the rectangle classes.

GB.GTK

  • SvgImage: Painting routine has been redesigned and is now faster.

  • TextArea: Modifying the contents by code now refreshes the control as expected.

  • TextArea: Fix drag and drop.

  • UserControl: Call the UserControl_Resize() public method on resize.

  • The WAIT instruction alone now ignores input events like Qt components.

  • Support for WAIT 0 syntax.

  • Remove the native ComboBox.

  • UserControl_Draw() event handler is called before drawing the control children.

  • UserControl._Focus is a new property that defines if a UserControl can take focus.

  • Allow calling WAIT alone during a keyboard event handler.

  • The new proxy of a control is now correctly unlinked if it was already the proxy of another control.

  • Closing the main window when it is persistent correctly quits the application.

  • Reparenting a window correctly triggers automatic arrangement.

  • The parent window of a modal window is now always the current active window.

  • Hide menu before destroying it, so that the top-level menu bar is correctly updated.

  • Container are now still arranged when they are hidden because of a null size.

  • Container hidden because of a null size do not disable arrangement.

  • Restarting a timer during its event handler should not lead to a possible crash anymore.

  • Menu.Parent is a new property that returns the parent menu of a menu, or NULL if the menu is a top-level one.

  • Fix menu relayout after the Show event has been handled..

  • Watcher now should finally raise their Show event correctly.

  • Setting the Drop property now acts on the proxy, and the DnD events are handled by the proxy first.

  • Update deferred arrangements before handling focus changes (and other posted routines).

  • Align.Make() is a new method that build an alignment constant from its horizontal and vertical parts.

  • Fix drag & drop management.

  • Popup menus are scrollable again.

  • Fix some use of deprecated functions.

  • Fix compilation with old versions of librsvg.

  • Fix some default control sizes.

  • WAIT now runs the deferred routines even if there is no pending GUI event.

  • Application.MiddleClickPaste is a new property that tells if middle click should paste. The global GTK+ settings is taken into account at application startup.

  • Paint.DrawText() and Paint.DrawRichText() do not move the current point anymore.

  • Fix value of Key.Shift, Key.Control, Key.Alt, Key.Meta and Key.Normal.

  • Control.Drag() now calls Drag(), so that text/uri mimetype is supported.

  • Correctly release the current grab when the debugger wakes up.

  • Starts program by assuming the clipboard has been modified.

GB.GTK3

  • SvgImage: Painting routine has been redesigned and is now faster.

  • TextArea: Modifying the contents by code now refreshes the control as expected.

  • TextArea: Fix drag and drop.

  • UserControl: Call the UserControl_Resize() public method on resize.

  • The WAIT instruction alone now ignores input events like Qt components.

  • Support for WAIT 0 syntax.

  • Remove the native ComboBox.

  • UserControl_Draw() event handler is called before drawing the control children.

  • UserControl._Focus is a new property that defines if a UserControl can take focus.

  • Allow calling WAIT alone during a keyboard event handler.

  • The new proxy of a control is now correctly unlinked if it was already the proxy of another control.

  • Closing the main window when it is persistent correctly quits the application.

  • Reparenting a window correctly triggers automatic arrangement.

  • The parent window of a modal window is now always the current active window.

  • Implement Application.ShowTooltips property.

  • Hide menu before destroying it, so that the top-level menu bar is correctly updated.

  • Container are now still arranged when they are hidden because of a null size.

  • Container hidden because of a null size do not disable arrangement.

  • Restarting a timer during its event handler should not lead to a possible crash anymore.

  • The changes in main window stylesheet do not apply to the embedded title bar anymore.

  • Menu.Parent is a new property that returns the parent menu of a menu, or NULL if the menu is a top-level one.

  • Fix menu relayout after the Show event has been handled..

  • Watcher now should finally raise their Show event correctly.

  • Setting the Drop property now acts on the proxy, and the DnD events are handled by the proxy first.

  • Update deferred arrangements before handling focus changes (and other posted routines).

  • Top-level window background color is correctly taken into account again.

  • Align.Make() is a new method that build an alignment constant from its horizontal and vertical parts.

  • Fix drag & drop management.

  • Popup menus are scrollable again.

  • Fix some use of deprecated functions.

  • Fix compilation with old versions of librsvg.

  • Fix some default control sizes.

  • WAIT now runs the deferred routines even if there is no pending GUI event.

  • Remove debugging messages on dnd.

  • Application.MiddleClickPaste is a new property that tells if middle click should paste. The global GTK+ settings is taken into account at application startup.

  • Paint.DrawText() and Paint.DrawRichText() do not move the current point anymore.

  • Fix value of Key.Shift, Key.Control, Key.Alt, Key.Meta and Key.Normal.

  • Control.Drag() now calls Drag(), so that text/uri mimetype is supported.

  • Correctly release the current grab when the debugger wakes up.

  • Starts program by assuming the clipboard has been modified.

GB.GTK3.WEBVIEW

  • WebView: GetHtml() is a new method that retrieve the HTML contents of the view.

  • WebView: Language is a new property that allows to define the HTTP Accept-Language headers. By default the current language is used.

  • Fix use of GB.Wait().

  • Don't recreate the view when clearing it, it segfaults on Wayland. Just fill it with a void page.

  • WebView.Cookies.Clear() is a new method that removes all cookies.

GB.GUI.BASE

Clipboard

  • Paste() now returns a file path array as soon as the mime type is "text/uri-list".

  • Copy() now can takes a file path array as soon as the mime type is "text/uri-list".

ComboBox

  • It's now a control written in Gambas!

Drag

  • The Dnd Frame now has a darker border.

  • Drag() now can takes a file path array as soon as the mime type is "text/uri-list".

GridView

  • Save and restore the Paint context before calling the Draw event.

  • Take custom row border into account correctly.

  • Use Color.TextBackground when the Background property is set to Color.Default.

  • RowAt() now returns rows at negative coordinates.

  • Add GridView.Rows.Padding property for an additional cell vertical padding.

  • Add GridView.Columns.Padding property for an additional cell horizontal padding.

  • Start scroll timer immediately.

  • Fix integer overflow in cell span management.

  • Fix row and column spanning algorithm.

IconView

  • Selection is now updated during rubberband selection.

  • Selection is a new property that returns an array of the keys of all selected items.

  • Fix computation of text icon position when renaming.

  • ESC key now unselects all items.

  • UnselectAll() now always resets the current item.

  • Use Color.TextBackground when the Background property is set to Color.Default.

  • Support for DnD.

  • Rubberband selection is more clever.

  • Add Scroll event.

  • Select event is correctly raised again in single selection mode.

  • Item shape now follows the icon size and the text size.

  • The layout algorithm has been cleaned up and fixed.

  • Fix drawing and selection in horizontal orientation.

  • Check an update hovered item at each refresh.

  • Handle PageDown and PageUp keys.

  • Fix icon layout so that the number of text lines specified by IconLines is actually displayed.

Label & TextLabel

  • Use the new UserControl_Resize() handler. It saves one Watcher.

  • Take the frame width into account when aligning the contents.

  • Clip frame drawing for style that draw an unwanted background.

  • Add BorderRadius, BorderWidth and BorderColor property.

  • Trim is a new property that trims the text if it overflows its frame.

  • Vertically centered TextLabels take the AutoResize property into account correctly.

ListBox

  • Add a Grid property, that adds a grid and some padding inside cells when set.

Picture

  • Refresh() does not try to refresh invalid windows anymore.

ScrollArea

  • Automatic scrolling during DnD now should work as expected.

SpinBox

  • Buttons in wide mode correctly follow the enabled state now.

Splitter

  • Support of the Invert property.

  • Proportional resize when there is more than two children.

  • Layout does not include separator size anymore.

  • A double-click on the handle now resets the layout.

  • Fix layout in vertical mode.

TreeView, ColumnView & ListView

  • Items have a new Span boolean property, that tells if the first column spans the control width.

  • No column padding by default.

  • Add Padding property to the ColumnView.Columns object.

  • Fix automatic resizing of the first column.

  • Treeview items now have a Selectable property. If set to FALSE, the item is not selectable anymore.

  • Do not cancel the row change if the row is set to -1 (no selected row).

  • Add a Selected property that returns if at least one item is selected.

Miscellaneous

  • The _Gui.MustAnimate() internal method is accurate now, so that animations occur on the activated window only.

  • Do not crash while checking if an animation must be triggered when Application.ActiveWindow is invalid.

  • Paint.StretchImage() now returns the frame of the drawn image as a rectangle.

  • Rewrite and fix Paint.TrimRichText() method.

GB.HASH

  • This is a new component that implements the Md5(), Sha1(), Sha256() and Sha512() functions. The code comes from BusyBox.

  • Hash is a new static class with methods that implement The Md5, Sha1, Sha256 and Sha512 hash functions.

GB.HTTPD

  • Fix some warnings.

GB.IMAGE

  • The Image constructor now fills the image data with Color.Transparent color by default. To get uninitialized image data, you must specified Color.Default as fill color.

GB.JIT

  • Optimization of small integer floating point constants.

  • Bool@(), Byte@()... functions can be the target of an affectation now.

  • Fix compilation of Left$(), Right$() and Mid$() routines.

  • Fix JIT compilation of extern function calls.

  • Implement overflow detection in integer arithmetic operations. The UNSAFE keyword disable them to get full speed.

  • Support for conditional jumps optimization.

  • Factorize exception management in JIT code.

GB.MAP

  • Update GoogleMap tile version to make it work again.

  • _ShapeItem now has a more accurate name _MapShapeItem and is exported.

  • Now _MapLayer have hidden functions for mouse events (_MouseMove, _MouseUp...)

  • Add a new hidden function to map to add generic _MapLayer. This will allow to easily create information layer or other.

  • Continue fixing bugs.

GB.MARKDOWN

  • Add error location when displaying an error message in the generated HTML.

GB.MEDIA

  • Add support for GstValueArray datatype.

  • Get rid of deprecated GValueArray datatype.

GB.MEDIA.FORM

  • MediaView: Ensure that the internal media player is deleted with the control.

GB.OPENSSL

  • Use the API instead of directly including interpreter header files. It breaks compilation on Ubuntu 22.10.1.

  • Fix the sort_and_dedupe() internal method.

GB.PCRE

  • Print an explicit message during configuration telling if we are using libpcre or libpcre2.

  • Fix compilation on systems that only have libpcre2 installed.

GB.PDF

  • Try to make gb.pdf compile with poppler 22.06, and disable it for higher versions.

GB.POPPLER

  • Add C++ 17 compilation flag to make gb.poppler compile everywhere.

  • Mark the component as "unfinished" instead of "unstable".

  • Don't try to free unallocated things when releasing the PdfDocument object.

GB.SETTINGS

  • Settings: The Maximized property of a window is now correctly restored when it is present in the settings.

GB.QT4

  • Drag & Drop: Eat the DragMove event as soon as the Drop event has an event handler.

  • UserControl: Call the UserControl_Resize() public method on resize.

  • Support for WAIT 0 syntax.

  • Remove the native ComboBox.

  • Style methods draw focus and tab focus.

  • UserControl._Focus is a new property that defines if a UserControl can take focus.

  • Remove now useless ComboBox source code.

  • Allow calling WAIT alone during a keyboard event handler.

  • Ensure that the copy of a Font is internally completely detached from its source.

  • The new proxy of a control is now correctly unlinked if it was already the proxy of another control.

  • Use the explicit keyword in all C++ constructors.

  • Fix gb.qt4 compilation.

  • The parent window of a modal window is now always the current active window.

  • Menu.Parent is a new property that returns the parent menu of a menu, or NULL if the menu is a top-level one.

  • Correctly send wheel events to widgets that handle them when the associated control is a proxy.

  • Setting the Drop property now acts on the proxy, and the DnD events are handled by the proxy first.

  • Align.Make() is a new method that build an alignment constant from its horizontal and vertical parts.

  • Fix some default control sizes.

  • Ignore spurious duplicated mouse move events.

  • Fix the use of a local variable out of scope.

  • Prevent a possible infinite recursion when initializing window menu bar.

  • UserControl now automatically refreshes itself when its enabled state changes.

  • Application.MiddleClickPaste is a new property that tells if middle click should paste.

  • Control.Drag() now calls Drag(), so that text/uri mimetype is supported.

  • Fix reference leak in drag & drop target management.

  • Starts program by assuming the clipboard has been modified.

GB.QT4.EXT

  • TextEdit: Add InsertRichText() method, a more obvious way to set TextEdit.Selection.RichText.

GB.QT4.WEBVIEW

  • WebView: GetHtml() is a new method that retrieve the HTML contents of the view.

  • WebView: Add the Language property, but it has no effect on Qt4.

  • WebView.Cookies.Clear() is a new method that removes all cookies.

GB.QT5

  • Drag & Drop: Eat the DragMove event as soon as the Drop event has an event handler.

  • UserControl: Call the UserControl_Resize() public method on resize.

  • Support for WAIT 0 syntax.

  • Remove the native ComboBox.

  • Style methods draw focus and tab focus.

  • UserControl._Focus is a new property that defines if a UserControl can take focus.

  • Remove now useless ComboBox source code.

  • Allow calling WAIT alone during a keyboard event handler.

  • Ensure that the copy of a Font is internally completely detached from its source.

  • The new proxy of a control is now correctly unlinked if it was already the proxy of another control.

  • Do not use the deprecated printer functions anymore.

  • Use the explicit keyword in all C++ constructors.

  • The parent window of a modal window is now always the current active window.

  • Menu.Parent is a new property that returns the parent menu of a menu, or NULL if the menu is a top-level one.

  • Correctly send wheel events to widgets that handle them when the associated control is a proxy.

  • Setting the Drop property now acts on the proxy, and the DnD events are handled by the proxy first.

  • Align.Make() is a new method that build an alignment constant from its horizontal and vertical parts.

  • Fix some use of deprecated functions.

  • Fix some default control sizes.

  • Ignore spurious duplicated mouse move events.

  • Make window activation specific to the GUI platform, in the hope of finding a workaround to the fact that window activation request is impossible in Wayland.

  • Fix the use of a local variable out of scope.

  • Prevent a possible infinite recursion when initializing window menu bar.

  • UserControl now automatically refreshes itself when its enabled state changes.

  • Application.MiddleClickPaste is a new property that tells if middle click should paste.

  • Control.Drag() now calls Drag(), so that text/uri mimetype is supported.

  • Fix reference leak in drag & drop target management.

  • Starts program by assuming the clipboard has been modified.

GB.QT5.EXT

  • TextEdit: Add InsertRichText() method, a more obvious way to set TextEdit.Selection.RichText.

GB.QT5.WAYLAND

  • Implement the SetTransientFor() API by using a Qt 5.13 non-documented public method.

  • Add a message to warn that Window.Stacking property does not work with Wayland and Qt5.

GB.QT5.WEBVIEW

  • WebView: GetHtml() is a new method that retrieve the HTML contents of the view.

  • WebView: Language is a new property that allows to define the HTTP Accept-Language headers. By default the current language is used.

  • WebView: Settings property is now actually specific to the view.

  • Fix use of GB.Wait().

  • Remove an unused class public slot.

  • WebView.Cookies.Clear() is a new method that removes all cookies.

GB.REPORT2

  • The German translation by Claus Dietrich is now complete.

  • Remove the use of deprecated and removed function of DocumentView in ReportView. The page detection is available now

GB.SDL

  • Remove useless LIKELY() and UNLIKELY() macros.

GB.SDL2

  • Support for WAIT 0 syntax.

  • Key.IsPressed() is a new method that tells if a specific key is pressed. An optional argument allows to ignore the keyboard layout.

  • Correctly synchronize the image texture when the image has been modified by a method from gb.image.

  • Clear the modified flag after the image texture has been synchronized.

GB.SETTINGS

  • Settings: Reading a collection from a settings file now works correctly.

  • Store and restore the maximized state of windows.

GB.SIGNAL

  • Signal[].Send() is a new method for sending a signal. It's an alternative syntax to the Signal.Send() method.

GB.TEST

  • Adapt Assert.Ok() method to the new backtrace format.

GB.UTIL

  • CsvFile: Reading the Fields property now automatically reads the fields from the first line of the file if needed.

  • Date.DaysInMonth() is a new method that returns the number of days in a month of a specific year.

  • String.IsIPv6() is a new function that checks if a string is an IPv6 address.

  • String.IsIP() is a new function that checks if a string is an IPv4 address.

  • String.IsEmail() is a new function that checks if a string seems to be an e-mail address.

  • Language.GetTranslations() method now browses the correct language files in executables.

GB.WEB

  • Request.Language now correctly ignores the encoding part of the current system language.

  • The contents of the .public directory is now automatically served by webpages.

GB.WEB.FORM

  • Fix upload management when Request.TempDir is set.

GB.WEB.GUI

WebAudio

  • Tracking is a new property that tells if the Position property is updated in real-time.

  • Fix a lot of bugs and implementation problems.

  • Add Tracking to the properties visible to the IDE.

  • Clean up code and add inline wiki help to WebAudio.

  • Do not reset play position to 0 on play in lib.js so audio can un-pause.

  • Property Paused gets or sets paused state.

  • Property Position gets or set song position.

  • Property Duration gets song length.

  • Pause event triggers when audio pauses.

  • End event fires when a track finishes

  • Position event fires as audio position changes during play.

  • Ready event fires when audio has loaded.

  • Add Sources property for alternative items.

  • Add AutoPlay property to enable automatic playing on loading.

  • Length is a synonym for Duration.

  • For backward compatibility, Play() will play from start if not in paused state.

WebControl

  • Implement Enter and Leave event.

WebDrawingArea

  • A new DrawingArea control based on a HTML canvas.

  • Paint is a new class that draws on a WebDrawingArea.

WebForm

  • Correctly cancel refreshes on Open event, as the entire window will be redrawn.

  • Disable global shortcuts when a popup -or- a modal dialog is opened.

  • Disable the web page until it is fully loaded.

WebLabel

  • Fix center align, by replacing justify-content:center by text-align:center.

WebTabPanel

  • Correctly render all tabs, even the invisible ones.

  • Optimize refresh when the current tab changes.

WebTextArea

  • Change event works again.

  • Accumulate text changes on the client side, and send them just before the next request.

WebTextBox

  • Change event works again.

  • Accumulate text changes on the client side, and send them just before the next request.

WebTimer

  • Deleting a timer now always emits the javascript code that stops it on the client side.

WebTree

  • Fix selection management.

  • Add documentation.

  • Works correctly now if there is only one item.

  • Raise the Select event in single selection mode.

  • Don't trigger useless refreshes when selection changes.

  • The Clear() method correctly triggers a refresh.

  • Settings the Mode' property correctly updates the control.

  • In single selection mode, you can't unselect the selected item with the mouse anymore.

  • Item Selected property does not crash anymore.

Miscellaneous

  • Color: Replace WebControl._GetColor() by Color.ToHTML().

  • Session: Add the server port to the session cookie.

  • Keyboard events are now sent to the server only if needed (i.e. if a control or a form has a KeyPress event handler).

  • New custom focus management.

  • Flush the standard output before quitting.

  • Remove the useless Message.Name property.

  • Focus frame should be managed correctly in all cases now.

  • Error raised by the Gambas code on the server should now normally be displayed in the browser within an alert box.

  • Remove a possible stack overflow in javascript focus management.

  • Key events modifiers do not have two different names anymore according to the context.

  • Replace the $() javascript function by $_() in the internal library to avoid conflict with other libraries like jquery.

  • Fix conversion of Gambas opacity to HTML transparency in colors.

  • Color: Color.ToHTML() is a new method that converts a Gambas color to HTML color.

  • Add gb.geom as a new dependency.

  • Make the ; explicit in internally generated javascript.

  • Fix component dependencies.

  • Move focus frame when the window is resized.

  • The cookie name now depends on the application name, so that you can run different applications on the same server.

  • When checking keyboard events for shortcuts on the client side, take a possible undefined key code into account.