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.