doc • release • 3.17.0

Gambas 3.17.0

What's new?

This is a huge release again, with more than 1,200 changes, optimizations and bug fixes.

The main features of this release are:

  • A new lightweight HTML viewer component, gb.form.htmlview, based on the litehtml library.

  • Namespace support for exported symbols.

  • Support for static variables local to a function.

  • The IDE now can debug a process that run on another computer through ssh.

  • The debugger now can stop each time the value of an expression changes.

  • The profiler can now profile the code of the components loaded by the project.

  • Serialization now does not duplicate objects anymore, and so deal with any complex object structures even with circular dependencies.

  • Shr, Shl, Asr, Asl, Lsl, Lsr, Rol and Ror can now be used as operators.

  • Text highlighting has been redesigned to support different color names by file types.

  • Support for right-to-left language in GUI controls has been enhanced.

  • The new gb.gtk3.opengl component bring the GLArea OpenGL control to the GTK+3 component.

  • The gb.web.gui component has been enhanced with a tree control, keyboard events, global shortcuts and better focus management.

Compilation and installation

Read the instructions there.

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

Enjoy it !

Changelog

CONFIGURATION

  • Add reference to autoComplete in README file.

  • Update README and README.md file.

  • Don't use rmdir --ignore-fail-on-non-empty, it's not supported on FreeBSD.

  • Fix deletion of empty directories.

  • Update gitlab CI configuration file.

DEVELOPMENT ENVIRONMENT

Automatic completion

  • Do not insert a space if the completion is triggered by a bracket, a point or an exclamation mark.

  • Only ignore properties in when filling completion with class symbols.

  • Fix autocompletion of embedded arrays of structures.

  • Use HtmlView instead of WebView in automatic completion popup and method signature popup.

Code editor

  • Take static local variables declaration into account in automatic variable declaration.

  • The ".[]" syntax is now handled when displaying method signatures.

  • If you copy controls from the form editor, you can now paste them in the code editor as Gambas code.

  • Procedure popup: Don't show the "STATIC" button in a module.

  • Procedure popup: Underline the startup method in the procedure list.

  • Support of the new EXPORT AS syntax.

  • FAST keyword is now correctly taken into account when looking for class inheritance or exported classes.

  • The F2 "find definition" function does not mistake subroutines for normal symbols anymore.

  • Fix detection of New operator when searching for symbol definition.

  • Fix case problems in syntax analyze.

  • Handle identifiers between curly braces correctly in symbol signatures.

  • Automatic formatting now only highlights modified lines.

Color selection dialog

  • The default color is now white.

  • Hide the tab bar if there is only one tab.

Conflict editor

  • Fix text highlighting.

Connection editor

  • Do not crash anymore when saving the table fails.

Debugger

  • A new debugger feature that allows to debug an "extern" process, i.e. debug a process not run by the IDE, provided that it comes from the same project.

  • New implementation of breakpoints management. Breakpoints cannot be disabled anymore, and they are now displayed in the debugger panel, under the stack backtrace.

  • Add a button to explicitly remove all watched expressions.

  • Modified expressions are now displayed with an highlighted background.

  • The debugger now can stop when the value of a watched expression changes.

  • Draw values that change the same way in the debug panel and in the debug windows.

  • Fix display of breakpoints and watched expressions icons.

  • Removing an expression removes also its watch.

  • Display a placeholder text to show where watched expressions must be typed.

  • Display the memory used by the debugged process (actually the PSS returned by Linux), and the number of its open file descriptors.

  • Take into account that the debugger answer is unlimited now.

  • Do not refresh local and object variables if they are not collapsed.

  • String variables are now edited in an external dialog box if they are too long (more than 128 bytes).

  • Incorrect breakpoints (on commented or void lines) are removed when the debugger starts only.

  • Removing a breakpoint is always possible.

  • Debugger actions are now correctly enabled or disabled according to the current debugger state.

  • Add a debugger menu option to toggle debugging inside components.

  • Debugger options are now stored in the project local settings, and not in the project configuration anymore.

  • Project environment and arguments are now stored in the project local settings, and not in the project configuration anymore.

  • The debugger options are now all centralized inside a specific configuration dialog box.

  • The expression watch panel is now bigger.

  • Use a label to show the current error. Do not use a balloon anymore.

  • Do not show the output console automatically if there is an error.

  • Use SIGUSR2 signal instead of SIGUSR1 to stop debugged processes, because SIGUSR1 makes WebKit crash.

  • Go back to the previous program arguments GUI.

  • Fix external terminal support when debugging the project.

  • Add xfce4-terminal in the list of terminals.

  • Don't crash if no terminal emulator is found. Display an error message instead.

File creation dialog

  • Open the new file after the dialog has been closed, to be sure its editor gets the focus.

Form editor

  • Put the toolbox buttons in its bottom bar.

  • Add an help menu for controls in the toolbox.

  • Support for selecting audio files.

  • Support for WebAudio property type.

  • Do not crash if a user-defined control inheriting UserContainer requests a non-container in its DrawWith property. Use a Panel or TabPanel instead.

  • Fix the coherency test on _DrawWith property.

  • Do not crash if a control in _Similar does not exist.

  • Placeholder property is now actually translatable.

  • Image properties can be set without error now.

  • Menu editor properties now apply to all selected items (except the name).

  • Group property is now associated with a combo-box containing a list of already used group names.

  • Make the property name column a bit larger.

  • When a container has "full" arrangement, keep the z-order of its children as defined by the user.

  • The "embed into a container" and "remove container only" functions now have their toolbar buttons.

  • The frame drawn when a control is hovered is now dotted if the control is a multi-container.

  • The frame drawn when a control is hovered is now darker, and drawn inside the control if possible.

  • Draw the red border of containers in a more logical way.

  • Ensure that the selection handles are always visible whatever the form background color.

  • Do not raise an error when selecting a project control whose class does not exist anymore.

  • The property name is now always displayed in bold when it does not have its default value.

  • Don't fill the property help if it is hidden.

  • Action texts now do not include button text shortcuts anymore. Update your forms to fix them.

  • Correctly save action names.

  • Use HtmlView instead of WebView in property help.

Help browser

  • Handle the "wiki://" links through the Error event.

  • Add a search panel when help is offline.

  • Search terms are highlighted in the result pages.

  • Searching returns pages including any of the search words. To search a string with spaces inside, enclose it with quotes.

  • Fix symbol links in class help pages.

  • Remove a debugging alert in javascript search highlighting code.

  • Fix event list in offline class documentation pages.

  • Don't trim the beginning of help comment lines, otherwise code blocks can't be inserted.

  • Use the markdown component to generate help from comments.

  • The search result are now sorted.

  • Don't call graphical methods during the wiki search background task, it can crash the GTK+ toolkit.

  • Hide the print button, as printing is not yet implemented in the new Qt/GTK+ WebView controls.

  • Correctly react to switches between offline and online help.

  • Offline help browser now goes back in history with the right mouse button or the menu key.

  • Try to put more accurate search results first.

  • Use the new HtmlView control to display automatic completion help and form editor property help. You will notice they become faster.

  • Fix stylesheet of help pages generated for classes inside the project.

  • Use the class name for the project help on a _call special method, so that it behave like the wiki help.

  • Fix documentation of embedded arrays, structures and embedded arrays of structures.

Image editor

  • Add a "save as" action.

  • Correctly initially disable the popup menu so that shortcuts are not eaten.

  • The grid properties can be locked, so that they persist if the active image editor changes.

  • The "shapes" tab of the image property panel is now the "selections" tab, and it allows to save and recall selections.

  • Pasting a selection now selects the entire selection, not just the pasted part.

  • Fix grid configuration layout and tooltips.

Make executable dialog

  • Do not increment the release number twice in some cases.

Main window

  • Rework the position history to fix some problems.

  • Save the cursor position in the history when the procedure list is used.

  • Searching for a string now stores the search position in the history.

  • The "Show menubar" menu is now a toggle.

  • Replace some balloons by message boxes.

  • Many updates of forms (Mouse constants replaced by Cursor constants, and PictureBox pictures not cached anymore)

  • The status bar message timer is now ignored when quitting the application.

  • Make some long timers be ignored at program exit.

  • Make SpinBox bigger everywhere so that little arrows are replaced by big buttons.

  • New flag icon for untranslated classes.

  • Redraw the "module" and "class" icons.

  • Use the new version control status stock icons.

  • Redraw the linked icon file bigger.

Option dialog

  • Fix installation of Gambas fonts.

  • The theme tab allows to choose the new highlighting styles by highlighters.

  • Fix theme configuration.

  • Add an option to change the IDE language.

Packager

  • On ArchLinux, remove an extra space in the "maintainer" comment of the PKGBUILD file.

  • Try to fix how license is registered in ArchLinux packages.

  • Add more GPL licenses.

  • ArchLinux: Add maintainer as packager in PKGINFO file.

  • ArchLinux: packager information is now available in the generated packages.

  • Making a package now displays an explicit message when a ChangeLog date is incorrect, instead of raising an error.

  • Fix the message label displayed during package creation.

  • Add a button for opening the target folder.

Profiler

  • Profiling inside components is possible now.

  • Loading profile files is now done through a background task.

Project creation dialog

  • webform project template now uses gb.web.gui instead of gb.web.form.

Project open dialog

  • Change the layout of the buttons to fix behaviour with GTK+3.

  • Add Examples and Installed software tabs.

  • Detect all version of "fckgmail" archive formats.

  • Cancelling a project opening because some components are missing does not display a useless error message anyway.

  • Fix how the list of recently opened files is filled.

Project properties dialog

  • Add a button to enable variable prefix check compilation flag.

  • Ignore void lines when computing the number of code lines.

  • Component requirements and exclusions are now displayed in two different columns.

  • Add a specific field to force the version of the generated bytecode.

  • Additional project references using relative paths are correctly handled now.

  • The dialog is resizable now.

  • Add a splitter between libraries and additional references.

Project tree

  • Use the new inheritance stock icon.

  • Add a colored label on top of the project tree that displays the current branch.

  • Add version control buttons next to the branch label, and a popup menu to change the current branch.

  • Compressed files icons are now darker through brightness modification.

  • Add the "Add everything to repository" button.

  • Allow move action only when dragging a source code file.

  • Add a button to show the class files associated with a form file.

  • Tree refresh is a bit faster now.

  • Use new compress and uncompress icons in popup menu.

  • Add a button that opens the startup class.

  • Clear the project filter when a file must be renamed, so that we are sure it is visible.

Report editor

  • Fix drawing of CoordBox background.

  • Use Style.FrameWidth for the padding of CoordBox, so that the control is usable with GTK+3.

Search dialog

  • The title now correctly follows the current tab title.

  • Replace message boxes by a label.

  • Fix search inside form files whose text contents would be different if saved.

  • Replace tabs by spaces in the result text, so that text is drawn correctly.

  • The text in the result table is highlighted only for Gambas code. Other highlighting do not work at the moment.

  • The text in the result table is drawn faster.

  • Center the searched text in the result text as much as possible.

  • Using a non-fixed editor font does not crash anymore.

  • Support for replacing capture groups in regular expressions.

Test panel

  • Display a different message if the test is aborted.

  • The spinner now is correctly shown during the test.

Text editor

  • Add a "save as" action.

Translation dialog

  • Use an explicit background for the untranslated string TextArea, because transparent background does not work with GTK+.

  • The "copy all translations" menu works correctly now.

  • Do not use sorted ComboBoxes for choosing languages, as Qt and GTK+ do not sort the same way, and it breaks the behaviour of the dialog when using GTK+3.

  • Add two buttons for finding the first and the last untranslated string.

  • The translation menu now allows to select the translation engine.

  • The list of new languages now displays the name of the associated translation file.

  • Display the current translation and the current translation file in the dialog title.

  • The translation logs generated by the compiler are now displayed to the user.

Version control

  • Getting the current branch from a directory is now a lot faster.

  • Add a button that shows all the modifications in the version control panel.

  • Use FAST for history highlighting.

  • Fix the version control synchronize button, and add a confirmation message.

  • Fix git directory detection.

  • Use EXEC instead of SHELL to speed-up version control detection.

  • Use underline cursor style for version control terminal.

  • Get the current git branch with a command that works with all versions of git.

  • Don't crash when choosing a branch color if the branch name is null.

  • Hide dialog box before committing, so that the command outputs are visible.

  • Fill project history with a background task.

  • Make branch colors darker.

  • Don't store the "add branch to version" flag into the project file. Just check that the version string has a branch name between braces at the end. If the branch is unknown, use the brach name "?".

Welcome dialog

  • Correctly draw project boxes in small mode.

  • Allow it to be smaller.

  • Fix the drawing of the close button of project boxes displayed in single column.

  • Project lists scroll to the top when the filter changes.

Miscellaneous

  • Fix "1" character in Gambas 16 pixel regular font.

  • Add a new "GambasRound" font. It's a rounder version of the regular Gambas font.

  • Update French translation.

  • Update Turkish Translation.

  • Update German translation.

  • Update Italian translation.

  • Translated tips of the day are back.

  • Fix some tips rich text syntax.

  • Support for gb.gtk3.opengl component.

  • Support for the gb.form.htmlview component.

  • Use the new compiler options flags.

  • Update error messages.

  • Support of the new .list file format.

  • When reading .info files, automatically replace local class names by exported names in signature.

  • Add new command-line option --system-information for displaying system information on the standard output.

  • Correctly handle compiler output now it compiles several files at the same time.

  • Compiling the project now automatically hides the error message tooltip.

  • The editor message label and the debugger panel error label now follow the color theme.

  • Use the new highlighting design.

  • Update gambas highlighting theme.

  • Use the new TextEditor.Theme property instead of the now deprecated Styles property.

  • Update highlighting themes.

WIKI

  • Prevent infinite redirection with "==>".

  • Update IDE dependencies.

  • Custom search result highlight.

  • Fix wiki search so that it returns the same result as the IDE offline wiki search.

  • Fix date format in the "Changes" page.

  • Handle Cloudflare https correctly.

  • Update CSS file.

EXAMPLES

  • DBusExplorer: Fix toolbar layout.

  • SystemTray: Update example to follow the new behaviour of X11Systray class.

INTERPRETER

  • WAIT with a positive value should not block anymore in some case.

  • Abort JIT compilation before executing the QUIT instruction.

  • Fix a string memory leak in error management.

  • Fix compilation on BSD systems.

  • Class names are now allocated inside the symbol tables, and not in the class objects anymore.

  • Classes exported in a namespace are now declared both in the global symbol table and in the local symbol table of their component.

  • Support for expression watches.

  • And, Or and Xor operators should be a bit faster.

  • And, Or and Xor operators now correctly raise an error if they deal with Single or Float values.

  • Support for local static variables.

  • Call an optional fork helper in each loaded component libraries before starting a task.

  • Jit.Enabled is a new property that allows to temporarily deactivate the JIT compiler.

  • Array.Read() and Array.Write() now check their stream argument instead of crashing if the stream is NULL.

  • Implement and fix assignation of structures and embedded arrays.

  • Fix memory leaks in debugger expression evaluation routines.

  • Object.SizeOf() on embedded arrays now returns the size of the array, and not the size of the temporary object created for accessing the array.

  • Fix error management on disabled fast functions.

  • The SizeOf() function now can return the data size of a class or a structure.

  • Remove an extra newline at the end of the "non freed allocation" warning message.

  • JIT compiler support for embedded array and structures variables.

  • Class.Symbols and Class[] now correctly ignore symbol table entries overriden by inheritance.

  • Date formatting with escaped characters works correctly again.

  • Fix number formatting when the format include escaped characters.

  • When using SHELL, call setpgrp() after the possible setsid() call. Otherwise the shell i/o are not visible to the Gambas process.

  • Pipes are now always internally opened for writing, to workaround a glib "behaviour", that eats 100% CPU when there is no writer anymore on a pipe watched for reading.

  • Eof() now immediately returns TRUE if a previous read ahead has reached end of file.

  • Watching a stream for reading is stopped as soon as reading ahead returns end of file.

  • Standard input is not supposed to be always available for reading.

  • Buffered stream end-of-file function has been fixed.

  • Read watches are automatically disabled when stream is closed in all cases.

  • Read watches are not automatically disabled anymore for non-regular files.

  • Streams based on non-regular file descriptors (devices for example) opened in direct mode now never use fstat() for getting the file length.

  • If we can't know the size of a stream watched for reading, then we don't unwatch it automatically anymore.

  • New "Unknown stream size" error when Lof() cannot know the size of a stream.

  • Now only standard input, output, error, pipes and process streams are automatically unwatched.

  • Standard input does not use read ahead anymore in all cases.

  • Buffered streams read and write methods now correctly handle errors.

  • In tracing mode, indent the interpreter output according to the current stack depth.

  • Class overriding is not retroactive anymore when the class already has instances.

  • Standard stream objects (File.In, File.Out, File.Err) are now created on demand.

  • Collection.Keys is a new property that returns a string array of all collection keys.

  • The internal common string buffer size is now equal to PATH_MAX.

  • Remove support of two deprecated parameters in .startup file.

  • Support for "remote" debugging, i.e. debugging a process not run by the IDE. It is activated by the existence of a symbolic link named /tmp/gambas-<project name>.debug pointing at the IDE temporary directory. The symbolic link is destroyed by the debuggee, so that no other process of the same project can use it.

  • If remote debugging is activated, lock a file to tell the IDE we are alive.

  • Fix signature of GB.GetProperty() API.

  • Timer.Stop() now cancels a call to Timer.Trigger().

  • AND, OR and XOR operators now work correctly when one of its argument is a Long and the other is not.

  • Subroutine arguments that expect an Integer value now accept a Long without raising a type mismatch error.

  • Fix array and allocation management, so that allocating a byte array with a number of elements near the greatest integer does not crash anymore.

  • Fix compilation of share/gb_system_temp.h on non-Linux/BSD systems.

  • A task does not close its standard outputs anymore when its Read or Error events are not handled.

  • Fix Component.Version for libraries.

  • Env.Copy() is a new method that returns a copy of the environment as a string array.

  • Args.Copy() is a new method that is a synonymous of Args.All.

  • Add an API that returns if there is at least one active timer.

  • Automatically disable timers when raising the Timer event is impossible because the parent object is invalid.

  • Timer.Ignore is a new property that tells the interpreter not to wait for the timer's end when exiting.

  • Fix a possible crash in the child process termination handler.

  • Observer.Detach() is a new method that disconnects the observer from the observed object.

  • If some data have been peeked on a stream, then the next reads will only return the peeked data until they all have been exhausted, and the Lof() function will return the number of peeked bytes yet to read.

  • _lang is a new static public special method that is called when System.Language changes. It allows you to reload the translations of the class.

  • Add a debugger API to allows debugging inside components.

  • Update help text layout.

  • Serialization now does not duplicate objects anymore. Once an object is serialized, if it is encounter again, then it is serialized as a five bytes reference.

  • Make the new serialization format backward-compatible with the old one.

  • Add <stdio.h> include to gb_system_temp.h, when there is no support for returning the number of CPUs.

  • Fix Task.Wait() that incorrectly used sleep instead of usleep.

  • Fix Task.Wait() so that it restores SIGCHLD handler for GTK+ libraries, like Process.Wait().

  • Task.Wait() now can take an optional timeout argument.

COMPILER

  • New compilation option to check variable prefixes against their datatype, and print a warning if they do not match.

  • Set compilation flags with the -f generic option now.

  • h can be the prefix of any object datatype, even those which already has a prefix.

  • Class names can include a colon. The part before the colon is assumed to be a namespace.

  • New header file to start sharing reader code with the gb.eval component.

  • EXPORT AS is a new syntax for exporting a class with a specific name that can include a namespace.

  • EXPORT TO DEFAULT now exports to the global namespace.

  • EXPORT TO <Namespace> exports the class as <NameSpace>:<class name>.

  • The generation of .info file now uses the exported name of classes.

  • Add the -n option that defines a default namespace for exported classes.

  • STATIC keyword can be used instead of DIM for declaring local static variables.

  • Allow local static variables to declare embedded arrays or structures like global variables.

  • Don't handle VERSION file in the compiler. Only the IDE supports that feature now.

  • Now integer constants can be simple integer expressions in array, constant and enumeration declarations.

  • Shr, Shl, Asr, Asl, Lsl, Lsr, Rol and Ror can now be used as operators.

  • Some other little optimizations here and here. The compiler is now about 5% faster.

  • The parser now does not store integer numbers in its global symbol table anymore.

  • Fix a possible memory corruption after the end of the compilation of the first class.

  • EXEC / SHELL ... TO ... WITH ERROR is a new syntax that redirects both the standard output and the standard error of a process to a string. The support for that feature was already present inside the interpreter!

  • The output of msgfmt executions is stored in log files, one by translation.

  • Array classes can be used with the IS operator without being declared elsewhere first.

  • The NEW operator now raises an error if the class following it is unknown.

  • Update help text layout.

  • Add a -F option that converts a piece of form data into Gambas code.

  • Type analysis of bit operators now works correctly.

ARCHIVER

  • Compile with -O3 optimization flag.

  • Update help text layout.

INFORMER

  • Compile with -O3 optimization flag.

  • Update help text layout.

SCRIPTER

  • Fix a bug where the shell expansion places a / after the directory name.

  • Fixed how command line piped and redirected input work.

  • Fix issue if the user passes ~/... a relative path as the cache directory on a plugin.

  • Fix Loading of gb.pcre component if not already loaded.

  • Fix re-setting/turning off plugin Filter after using.

  • Fix error handling for plugin Filter Matching.

  • Fix Incorrect info in .info cache file sometimes.

  • Fix calculation of md5sum for project.

  • Fix error when user enters only script/project name in the current directory.

  • Fix md5sum when path presents with a leading ./ which the shell does not expand.

  • Fix --convert-project have badly used IIf statement cause single parameter version to fail.

  • Add some verbose output from conversion from project to script.

  • Fix error when trailing / in project name Script end up with no BaseName.

  • Fix incorrect processing of multi line enum, when main is not defined in the script.

SELF-TESTER

  • Make the self-tester use the current Gambas version.

GB.ARGS

  • Args.Abort is a new property that tells if the program aborts or raises an error when an Args method fails. The property is TRUE by default.

GB.COMPRESS.ZLIB

  • zlib inflate function sometimes returns an incorrect error code that lead to a crash.

GB.DATA

  • AvlTree: Clearing the tree now correctly frees all nodes.

GB.DB

  • Connection.Collations correctly returns the collation list now.

GB.DB.FORM

  • Update control icons.

GB.DB.MYSQL

  • Unlimited string fields now use MEDIUMTEXT type instead of TEXT, so that their actual maximum size is now 16 Mb.

  • Creating a numeric field with a default value works correctly now.

  • All UTF-8 charsets variants are now returned as "utf8".

GB.DB.ODBC

  • Try to read date fields correctly in most ODBC drivers.

  • Adapt GetRecordCount() to the SQLite ODBC database driver.

GB.DB.POSTGRESQL

  • Do not use the Postgresql server includes anymore to get datatypes id. Read them directly from the database at connection. That way the component can compile again on new versions of Fedora that broke the Postgresql packages.

GB.DBUS

  • DBusConnection: Close() is a new method that allows to explicitly unregister from a bus.

  • DBusConnection: Open() is a new method that allows to explicitly register to a bus.

  • Connections to the D-Bus buses are correctly freed when the program ends.

  • Handle a{o...} and a{g...} D-Bus signatures by using Collections.

GB.DBUS.TRAYICON

  • TrayIcon: Picture property has Picture:NoCache type now.

  • TrayIcon: Change the icon name each time the Picture property changes, to force the system tray to reload it.

  • TrayIcon: Do not raise the LayoutUpdated DBus signal anymore. Instead, just return TRUE in the AboutToShow event handler. That should fix the menu refresh problems inside the system tray.

  • Do no crash when freeing remaining tray icons at program clean-up.

  • Be more robust when a tray icons has no popup menus.

  • Detect if we are on a Gnome desktop. In that case the _AboutToShow() signal always returns FALSE, otherwise submenus are not displayed. But the Gnome system tray seems to still be buggy, never reacting to any change in menu properties.

GB.DEBUG

  • Use SIGUSR2 signal instead of SIGUSR1 to stop debugged processes, because SIGUSR1 makes WebKit crash.

  • Add new command for watching expressions, i.e. stopping the debugger when the value of an expressions changes.

  • Support for local static variables.

  • A null pointer is printed as "NULL" now.

  • The debugger now prints the reference count next to object references.

  • Fix memory leaks in debugger expression evaluation routines.

  • The debugger process now opens the output fifo in blocking mode when needed, and the debugged process opens the output fifo for reading when needed too.

  • Support for "remote" debugging.

  • The ! command does not write on the standard output anymore, but now works like the ? command.

  • The result of an evaluated expression is not truncated anymore.

  • Debug.Signal() is a new method that signals a debugged gambas process with SIGUSR2 to ask him to pause.

  • Support for profiling inside components.

  • New debugger command to toggle debugging inside components.

  • Print constants (Null, True, False) with only the first letter in upper case.

GB.DESKTOP

  • Desktop.Passwords: Fix KDE support.

  • Fix desktop standard paths computation when there is no explicit configuration file.

  • Update xdg-utils scripts to version 1.1.3+.

  • Use the Desktop.Type property.

  • Desktop.RunAs() is a method similar as RunAsRoot() that takes the username used for running the program.

  • Desktop.RunAsRoot() now takes an optional argument to wait for the program ends, and now uses pkexec by default.

  • Desktop.OpenTerminal() now correctly interprets again Desktop.Type, which does not include the entire contents of $XDG_CURRENT_DESKTOP, but only the first one of that colon-separated desktop names list.

GB.DRAW

  • Add an API to set the current paint background color.

  • Add two API for translating and scaling the current painter.

GB.EVAL

  • Share some reader code with the compiler.

  • Fix highlighting and rewriting of lines having comments with more than one space before them.

  • The parser now does not store integer numbers in its global symbol table anymore.

  • The Highlight constants now follow the order defined by the new gb.eval.highlight design.

GB.EVAL.HIGHLIGHT

  • Highlight: GetStyleName() is a new method that returns the translated name of a specific style.

  • Highlight: Styles is a new property that returns the string key available for all TextHighlighterStyle objects. The integer id of a style is its position in that array.

  • TextHighlighter: Add the FAST keyword to the Add() method.

  • TextHighlighter: Fix Paint() method signature.

  • TextHighlighter: ToAnsi(), ToHTML(), ToRichText() and Paint() method now take a TextHighlighterTheme or an array of TextHighlighterStyle as last argument.

  • TextHighlighter: Styles is a new property that returns the styles actually used by an highlighter.

  • TextHighlighter: FullName is a new property that returns the human name of an highlighter.

  • TextHighlighter: Name is a new property that returns the name of an highlighter.

  • TextHighlighter: List is a new static property that returns a list of all implemented highlighter names.

  • TextHighlighter: Fix ToANSI() method.

  • TextHighlighter: Paint() method takes an optional argument that defines the position of the first character of the highlighted text to paint.

  • TextHighlighter: Paint() correctly takes into account the new highlighter theme design.

  • TextHighlighter: Use the new hidden API that estimates the character width of a specific font.

  • TextHighlighterStyle: The FromString() method creates a style from a string returned by ToString().

  • TextHighlighterStyle: The ToString() method serializes the style to a string.

  • TextHighlighterStyle: The InvertedColor property returns the style color inverted for dark themes.

  • TextHighlighterStyle: The Background property tells if the style is a background style according to its key.

  • TextHighlighterStyle: Add Key, Name, Color, Bold, Underline, Dotted, Strikeout properties.

  • TextHighlighterTheme: A new class that represents a highlighting theme

  • TextHighlighterTheme: Fix Save() method.

  • TextHighlighterTheme: Initialize directly from the IDE gambas theme file.

  • TextHighlighterTheme: Fix ToString() method.

  • TextHighlighterTheme: Load() now convert old theme to new theme by initializing unset styles with old styles.

  • Unit test for RTF Color text.

  • Unit test for HTML color page.

  • Unit test for Ansi color Console text.

  • Add ToAnsi() method which generates ANSII color text which can be printed to most consoles.

  • Add some CSS keywords to CSS highlighting.

  • Add set keyword to javascript highlighting.

  • << operator was defined twice in Sh highlighting.

  • All highlighter classes were ported to the new design.

  • Enhance Diff highlighter.

  • Remove the dependency on gb.image.

  • Update Unit text to reflect new name.

GB.FORM

  • ButtonBox: Fix border drawing according to the widget state (focus and hovering).

  • ButtonBox: Clamp the vertical padding so that the inner textbox works on GTK+ with small fonts.

  • ButtonBox: Disabled background is now drawn correctly.

  • ButtonBox: Remove workaround for TAB key.

  • ButtonBox: Raise the Validate event.

  • ButtonBox: Add the Placeholder property.

  • ButtonBox: Add password property.

  • ButtonBox: Make the filter timer be ignored at program end.

  • ButtonBox: The horizontal inner padding between the border and the contents cannot be greater than 3 pixels now.

  • ColorChooser: The colormap now visually adapts to the current control settings.

  • ColorChooser: Use the third argument of Image.Stretch() correctly.

  • DirBox: Correctly raise the Change event each time the contents actually changes.

  • DirBox: Add a Title property.

  • DirBox: Add a Path property to DirBox as a synonym for Value and show it in the IDE.

  • DirChooser & FileChooser: Do not use a Watcher to initialize the popup menu.

  • DocumentView: Reintroduce the old properties renamed in 3.16.0 for backward-compatibility.

  • FileBox: New control that supports open/save mode, filters, custom picture and placeholder.

  • FileChooser: Fix file uncompress that was done twice.

  • FileChooser: Correctly restore the ShowDetailed property from settings.

  • FileView: Add new default file type icons.

  • FileView: Fix automatic extension behaviour.

  • FileView: Selection property now does return file names without any rich text formatting.

  • FileView: Use the directory cache instead of Stat() when drawing the items.

  • FontChooser: Double-click now opens a font tree item only if the Activate event is not handled.

  • FontChooser: Add a button to open the font selector in small mode.

  • IconPanel, TabPanel, ToolPanel, Wizard: Add a FindPanel() method that returns a tab index from its title.

  • ListEditor: Fix crash when checking for duplicates if the Unique property is TRUE.

  • ListEditor: Enhance its behaviour.

  • ListEditor: Wrap is a new property that tells if the text of the items is wrapped.

  • MaskBox: Modifier keys do not hide selection anymore.

  • MaskBox: Validate is a new event that allows to validate any change in control text and eventually cancel the change.

  • MaskBox: Allow default popup menu.

  • MaskBox: Fix behaviour with copy & paste.

  • MaskBox: It should work correctly again.

  • MaskBox: Characters moves should be handled better now.

  • MaskBox: The Text property now must match the mask when set. If the set text is smaller than the mask, it is completed with the default characters.

  • MaskBox: Text that do not have the same size as the mask are not valid anymore.

  • MaskBox: Make cursor moves more clever.

  • MaskBox: Don't crash when hitting Backspace at the beginning of the editable text.

  • MaskBox: Handle space separators correctly when setting the Text property.

  • MaskBox: Fix cursor move when inserting a character in a filled mask pattern.

  • MaskBox: Prompt is a new property that allows to define the character displayed for void entries among a few choices.

  • MenuButton: Custom drawing of shortcut underlines for GTK+.

  • MenuButton: Fix how style flags are used for drawing the control.

  • MenuButton: The background color is now used for coloring the button background.

  • MenuButton: Draw the control with both Hovered and Focus style flag when the control has the focus.

  • MenuButton: Disable the hidden shortcut button when the control has the focus, so that TAB focus navigation works.

  • MenuButton: Fix GTK+3 warnings on hidden shortcut buttons.

  • MenuButton: Try to not take the focus on click, like a ToolButton.

  • MenuButton: Fix a possible "Invalid object" error when a MenuButton is destroyed during its Click event.

  • MenuButton: Redraw arrows. Disable them if there is no menu.

  • MenuButton: Update button state before opening the popup menu.

  • MenuButton: Better drawing of disabled MenuButton picture.

  • MessageView: Remove text from buttons. Use less vertical space.

  • SidePanel: Hidden side panels have now a one pixel size. Because GTK+ components cannot handle zero-size controls at the moment.

  • SidePanel: AutoHide is a new property that let the side panel automatically hide on mouse leave and show on mouse enter.

  • SliderBox: Always set both the SpinBox and the Slider, so that they keep being synchronized when the SliderBox has been locked.

  • SliderBox: Adapt inner SpinBox width more intelligently.

  • SliderBox: Fix automatic arrangement.

  • Spinner: Make the "Circle" spinner less dark.

  • Spinner: Document the control.

  • Stock: Don't duplicate Gambas and Gambas-Mono icon themes in Stock.Themes property.

  • Stock: Silently ignore standard icon theme directories without access authorization.

  • SwitchButton: Animated property is now deprecated.

  • TabPanel: ShowTabBar is a new property that toggles the tab bar visibility.

  • TableView: Fix editing control position and size.

  • Search for icon themes in /usr/local for BSD systems.

  • Add many new icons and update old ones.

  • Format file sizes with no more than three digits.

  • Use the new Control.RightToLeft property instead of the global System.RightToLeft one.

GB.FORM.DIALOG

  • Ask password dialog: Add a button to toggle password visibility.

  • File dialog: Handle the case when AutoExt is TRUE and Filter is void.

  • Remove useless gb.gsl from project components.

  • File dialog geometry is now correctly saved when Dialog.Key is not set.

  • Dialog.FilterIndex is a new property that returns or defines the current filter of the file dialog.

GB.FORM.EDITOR

  • TextEditor: Remove tabledragger.js test file because it is copyrighted.

  • TextEditor: Highlighted text drawing routine should not enter an infinite loop anymore when the highlighted color information is incoherent.

  • TextEditor: Correctly reset the Alternate flag before starting highlighting text.

  • TextEditor: The cursor label background is now opaque.

  • TextEditor: Fix possible crashes in undo management.

  • TextEditor: Colorized text can be striked out.

  • TextEditor: The line wrap markers now are correctly colorized when selected.

  • TextEditor: The editor lines have now a little padding on the top and on the bottom, whose size is proportional to the font height.

  • TextEditor: The Styles property is now deprecated. It returns now the array of TextHighlighterStyle associated with editor theme.

  • TextEditor: Theme is a new property that allows to define the TextHighlighterTheme associated with the editor.

  • TextEditor: Fix how bold text is drawn on dark themes.

  • TextEditor: Blink the matching brace with the cursor.

  • TextEditor: Ignore overwrite in read-only mode.

  • TextEditor: Use the correct style for highlighting the line where the debugger is stopped.

  • TextEditor: Setting the Text property correctly resets the internal highlighting state.

  • TextEditor: In "gambas" mode, ALT+' and ALT+" now respectively add single quotes and double quotes around the current selection.

  • TextEditor: Setting the Highlight property now works correctly all the time.

  • TextEditor: Use the new hidden API that estimates the character width of a specific font.

  • TextEditor: Do not clip lines whose width is larger than 32767 pixels.

  • TextEditor: Make the long clear line cache timer be ignored at program end.

  • TextEditor: Append() is a new method that appends some text to the end of the editor without moving the cursor.

  • TextEditor: Remove quotes from braces lists

  • TextEditor: Use the new Control.RightToLeft property instead of the global System.RightToLeft one.

GB.FORM.HTMLVIEW

  • New component that aims at implementing an HtmlView based on the litehtml library.

GB.FORM.MDI

  • Toolbar: No need to unquote & button shortcuts anymore in action text.

  • Workspace: Activating an unknown window is nw silently ignored.

  • Workspace: The Add() method now can safely move a window from a workspace to another workspace.

  • Use the new Control.RightToLeft property instead of the global System.RightToLeft one.

GB.FORM.MEDIA

  • Hide spacer panel when hiding controls.

GB.FORM.STOCK

  • Add many new icons and update old ones.

  • Automatic flipping of some icons when system language is right-to-left written.

GB.FORM.TERMINAL

  • Mark the component as stable.

  • TerminalView: Reset() method does not fail anymore if the currently running process is dead.

  • TerminalView: Ignore errors if resizing the running process virtual terminal fails.

  • TerminalView: Block, Underline and VerticalLine are three new constants that represents how the cursor is drawn.

  • TerminalView: CursorStyle is a new property that allows to define how the cursor is drawn.

  • TerminalView: Support for RGB colors. Use a bit more memory.

  • TerminalView: Use the new Control.RightToLeft property instead of the global System.RightToLeft one.

GB.GEOM

  • Raise an error if the point constructor does not take zero or two arguments.

  • Raise an error if the rectangle constructor does not take zero or four arguments.

  • Add ALIGN_IS_NORMAL() macro for alignment constants.

GB.GTK

  • Application: Setting Application.Busy now displays the busy cursor correctly again.

  • Clipboard: Always replace "text/plain" format by "text/plain;charset=utf-8" when pasting.

  • Color: Tooltip and link properties are now writable. Override them if the default widget theme colors are unreadable.

  • ComboBox: Close() is a new method that closes the ComboBox popup.

  • ComboBox: Raise a Cursor event when the cursor moves.

  • ComboBox: Add Placeholder to the list of control properties.

  • Container: Some deferred arrangements were useless, don't do them.

  • Container: Automatic container resize now takes the arrangement of the parent of the container into account.

  • Container: The internal _Container property of UserControl and UserContainer now behaves the same way as in Qt components.

  • Control: Fix control restacking.

  • Control: The Lower() and Raise() methods do not trigger any Watcher anymore while temporarily showing and hiding controls.

  • Control: RightToLeft is a new property that returns if a control is right-to-left oriented.

  • Control: Direction is a new property that allows to specify the text direction of the control.

  • Control: Initialize event mask correctly when a control recreates its internal (when reparenting or for any other reason).

  • Control: Do nothing when setting a control font with the same font.

  • Cursor: The mouse cursor type constants are now defined in the Cursor class.

  • Desktop: Type property is now implemented in gb.gui.base.

  • Dialog: FilterIndex is a new property that returns or defines the current filter of the file dialog.

  • DrawingArea: Keep the Focus property when the internal widget is recreated.

  • DrawingArea: Reading the window handle now automatically assign a specific window to the control.

  • DrawingArea: Background color is now correctly drawn in all cases.

  • Drag: The SHIFT and CONTROL key modifiers define the current drag and drop action.

  • Drag: The three drag and drop actions are supported now.

  • Drag: Fix drag and drop action constants.

  • Font: Font.RichTextSize() now uses the same algorithm as Font.TextSize().

  • Font: Fix font dependency of global application font.

  • Image: Rotate() is now antialiased.

  • Image: Stretch() now takes a third optional argument to stretch without antialiasing.

  • Key: Forgot to define the Key.AltGrKey symbol.

  • Key: Shortcut is a new property that returns a string describing the key of a keyboard event with all its modifiers.

  • Key: Fix Key.Backspace property name.

  • Key: Fix keyboard event management for command keys like DEL that have a text associated with.

  • Menu: Make popup menu event behave the same way as in Qt components.

  • Mouse: State returns the same thing as with Qt components, except that apparently GTK+ cannot tell if button 4 and 5 are pressed all the time.

  • Mouse: Button returns the button number, between 1 and 5.

  • Paint: Text drawing alignment is now based on text direction.

  • Style: BackgroundOf() method is now reliable.

  • Style: PaintButton() now can take a background color as optional argument.

  • TextArea: Add a padding proportional to the font height.

  • TextBox: Be more tolerant with minimum width.

  • TextBox: Raise a Cursor event when the cursor moves.

  • Window: Reparenting a window now keeps the title and the enabled state correctly.

  • Window: Don't raise spurious Hide or Show events.

  • Window: Fix the initial focus of a window when it is opened.

  • Window: Fix focus management of windows.

  • Window: Windows cannot have focus anymore on click.

  • Window: Realize the window widget before trying to center it, as we need the monitor it is displayed on.

  • Window: Fix CSD size computation.

  • Window: Embedded windows now behave the same way as in Qt components, and raise their Open and Show events as expected.

  • Window: Embedding a top-level window by reparenting now correctly removes it from the list of top-level windows.

  • Window: Do not raise Activate event when showing an embedded window to mimic Qt components behaviour.

  • Window: Modal windows are now centered before being shown.

  • Window: Do not raise keyboard event on the window twice if no control handled it.

  • Don't remove file descriptors watches in the quit hook to behave like Qt components.

  • Display the warning about calling the event loop during a keyboard event once.

  • Fix propagation of keyboard events when the focused widget is not realized.

  • Fix next control focus routine.

  • Fix automatic default focus control for newly opened windows.

  • Fix rich text paragraph and title line breaks.

  • Rich text support for <pre> markup.

  • Make the file descriptor watches and timers priority less than the GTK+ window refresh priority.

  • Fix accelerator management workaround.

  • Replace dynamic event callback functions (one by object) by unique global functions.

  • Check if the event loop must be stopped each time a timer is disabled.

  • Don't quit if there is still one active timer.

  • Make all GUI components behave the same when dealing with focus and modal or popup windows.

  • Fix focus management when a control is hidden.

  • The workaround of Pango markup bug makes lines disappear with recent versions of Pango, so remove it.

  • Fix font management according to the new uncompatible Pango behaviour. I don't know if it is backward-compatible yet.

  • Make component compile again on older versions of Pango.

GB.GTK3

  • Application: Setting Application.Busy now displays the busy cursor correctly again.

  • Clipboard: Always replace "text/plain" format by "text/plain;charset=utf-8" when pasting.

  • Color: Tooltip and link properties are now writable. Override them if the default widget theme colors are unreadable.

  • ComboBox: Close() is a new method that closes the ComboBox popup.

  • ComboBox: Raise a Cursor event when the cursor moves.

  • ComboBox: Add Placeholder to the list of control properties.

  • Container: Fix deferred arrangement because of a weird GTK+3 behaviour.

  • Container: Some deferred arrangements were useless, don't do them.

  • Container: Automatic container resize now takes the arrangement of the parent of the container into account.

  • Container: The internal _Container property of UserControl and UserContainer now behaves the same way as in Qt components.

  • Container: Clip the drawing of container children, as GTK+3 does not do that by default.

  • Control: Fix control restacking.

  • Control: The Lower() and Raise() methods do not trigger any Watcher anymore while temporarily showing and hiding controls.

  • Control: RightToLeft is a new property that returns if a control is right-to-left oriented.

  • Control: Direction is a new property that allows to specify the text direction of the control.

  • Control: Initialize event mask correctly when a control recreates its internal (when reparenting or for any other reason).

  • Control: Do nothing when setting a control font with the same font.

  • Cursor: The mouse cursor type constants are now defined in the Cursor class.

  • Desktop: Type property is now implemented in gb.gui.base.

  • Dialog: FilterIndex is a new property that returns or defines the current filter of the file dialog.

  • DrawingArea: Keep the Focus property when the internal widget is recreated.

  • DrawingArea: Reading the window handle now automatically assign a specific window to the control.

  • DrawingArea: Background color is now correctly drawn in all cases.

  • Drag: The SHIFT and CONTROL key modifiers define the current drag and drop action.

  • Drag: The three drag and drop actions are supported now.

  • Drag: Fix drag and drop action constants.

  • Font: Font.RichTextSize() now uses the same algorithm as Font.TextSize().

  • Font: Fix font dependency of global application font.

  • Image: Rotate() is now antialiased.

  • Image: Stretch() now takes a third optional argument to stretch without antialiasing.

  • Key: Forgot to define the Key.AltGrKey symbol.

  • Key: Shortcut is a new property that returns a string describing the key of a keyboard event with all its modifiers.

  • Key: Fix Key.Backspace property name.

  • Key: Fix keyboard event management for command keys like DEL that have a text associated with.

  • Menu: Make popup menu event behave the same way as in Qt components.

  • Menu: Popup menus should not sometimes close immediately anymore when the mouse button is released.

  • Menu: Fix Popup() when popup global coordinates are specified.

  • Menu: Popup() now works correctly if the opened menu is not defined in the window of the click event.

  • Mouse: State returns the same thing as with Qt components, except that apparently GTK+ cannot tell if button 4 and 5 are pressed all the time.

  • Mouse: Button returns the button number, between 1 and 5.

  • Paint: Text drawing alignment is now based on text direction.

  • Style: BackgroundOf() method is now reliable.

  • Style: PaintButton() now can take a background color as optional argument.

  • Style: BackgroundOf() returns the accurate color now for TextBox, TextArea and ComboBox.

  • TextArea: Add a padding proportional to the font height.

  • TextArea: Take focus into account when drawing the border.

  • TextBox: Be more tolerant with minimum width.

  • TextBox: Raise a Cursor event when the cursor moves.

  • Window: Reparenting a window now keeps the title and the enabled state correctly.

  • Window: Don't raise spurious Hide or Show events.

  • Window: Fix the initial focus of a window when it is opened.

  • Window: Fix focus management of windows.

  • Window: Windows cannot have focus anymore on click.

  • Window: Realize the window widget before trying to center it, as we need the monitor it is displayed on.

  • Window: Fix CSD size computation.

  • Window: Embedded windows now behave the same way as in Qt components, and raise their Open and Show events as expected.

  • Window: Embedding a top-level window by reparenting now correctly removes it from the list of top-level windows.

  • Window: Do not raise Activate event when showing an embedded window to mimic Qt components behaviour.

  • Window: Modal windows are now centered before being shown.

  • Window: Do not raise keyboard event on the window twice if no control handled it.

  • Don't remove file descriptors watches in the quit hook to behave like Qt components.

  • Display the warning about calling the event loop during a keyboard event once.

  • Fix propagation of keyboard events when the focused widget is not realized.

  • Fix next control focus routine.

  • Fix automatic default focus control for newly opened windows.

  • Fix rich text paragraph and title line breaks.

  • Rich text support for <pre> markup.

  • Make the file descriptor watches and timers priority less than the GTK+ window refresh priority.

  • Fix accelerator management workaround.

  • Replace dynamic event callback functions (one by object) by unique global functions.

  • Check if the event loop must be stopped each time a timer is disabled.

  • Don't quit if there is still one active timer.

  • Make all GUI components behave the same when dealing with focus and modal or popup windows.

  • Fix focus management when a control is hidden.

  • The workaround of Pango markup bug makes lines disappear with recent versions of Pango, so remove it.

  • Fix font management according to the new uncompatible Pango behaviour. I don't know if it is backward-compatible yet.

  • Make component compile again on older versions of Pango.

  • Workaround many drawing warnings in Slider, CheckBox and RadioButton.

  • Fix startup initialization.

  • Try to support both webkit2gtk 4.0 and 4.1.

GB.GTK3.OPENGL

  • New component that provides GlArea OpenGL control for gb.gtk3.

GB.GTK3.WEBVIEW

  • Disable a setting flag deprecated in WebKitGTK >= 2.32.0.

  • Try to make Qt5 and GTK+3 webview raise their events the same way when loading pages.

GB.GUI.BASE

  • Desktop: Ensure that desktop types are in upper case.

  • Frame: Make frame contents cover the entire control area when there is no arrangement, for backward-compatibility.

  • GridView: Fix current cell cursor size and width.

  • GridView: The Change event now can be stopped to cancel a cursor move.

  • GridView: GridView.Columns[].EnsureVisible() is a new method that ensures that a specific column is visible by scrolling horizontally only.

  • GridView: GridView.Rows[].EnsureVisible() is a new method that ensures that a specific row is visible by scrolling vertically only.

  • GridView: Use standard arrows to paint sort indicator. Do not use widget style anymore.

  • GridView: Take the Enabled property into account for rendering.

  • IconView: Use an internal cache to speed up item text formatting.

  • IconView: The After argument of the Add() method now works as expected.

  • IconView: The Add() method now inserts the new item at the beginning when the After is explicitly specified as NULL.

  • IconView: Add Next and Previous properties to the IconView item class.

  • IconView: Little optimization on a test.

  • IconView: The background image is now drawn if no icons are added.

  • Label: Workaround a Qt bug where using Paint.TextExtents() on a bitmap font makes it unable to be drawn correctly.

  • Label: Try to take italic fonts into account in text alignement.

  • Label: Use floating point text size to avoid possible text truncation.

  • Label: Disabled Label are drawn correctly now.

  • ListBox: Use a case insensitive natural sort for sorting the ListBox contents like ListView.

  • ListBox: Wrap is a new property that tells if the text of items is wrapped.

  • Message: Correctly define the message title for standard message box style.

  • Message: As ShowModal() finish mouse events, make message box reentrants.

  • Message: DefaultButton is a new property that makes the first message dialog button the default one. It is TRUE by default to restore the old behaviour.

  • Paint: Paint.Arrow now takes the line width into account, so that stroking the arrow does not overflow the rectangle bounds.

  • PictureBox: The Picture property does not use the cache anymore, and so does not adapt to dark theme anymore too.

  • ProgressBar: Draw an hatch in pulsing mode.

  • ProgressBar: Right-to-left direction support.

  • ScrollArea: The EnsureVisible() method now takes an extra optional argument, that tells which scroll direction is allowed.

  • ScrollArea: Do not set the Proxy property, if setting the _Container property already did the job.

  • ScrollArea: Fix scrollbar relayout.

  • SpinBox: Take into account that the internal mouse timer may be cleared during its event handler.

  • SpinBox: Update the current value before returning it with the Value or the Text property.

  • SpinBox: Clamp the vertical padding so that the inner textbox works on GTK+ with small fonts.

  • SpinBox: Automatically replace little arrows by bigger horizontal buttons when the control is wide enough.

  • Splitter: Fix how the panels follow the mouse on resize.

  • TextLabel: Disabled TextLabel are drawn correctly now.

  • TreeView: Automatic scrolling on item change is now vertical only.

  • TreeView: Using a Move*() method now ensures that the view is actually sorted.

  • TreeView: Tree arrows are a bit darker now.

  • TreeView: Take the Enabled property into account for rendering.

  • TreeView, ListView & ColumnView: Fix right-to-left layout.

  • Desktop.Type, Desktop.Types, and Desktop.Is() are now implemented here.

  • Fix KDE desktop detection, and do not crash if no desktop is detected.

  • Picture[] now gets an optional argument that specifies the picture size like Stock.GetSize().

  • Fix propagation of drag and drop events by the highlighting frame.

  • The hidden API that estimate the character width of a specific font now returns by default an estimated value for non-fixed fonts.

  • Use the new Control.RightToLeft property instead of the global System.RightToLeft one.

  • Action.Text now correctly quotes button shortcuts when needed.

GB.GUI.OPENGL

  • Support for the gb.gtk3.opengl component.

GB.JIT

  • Take : inside identifiers into account by replacing them by $, which is allowed in C identifiers.

  • JIT compiler support for embedded array and structures variables.

  • JIT implementation of Left$(), Mid$() and Right$(). They are now twice faster.

GB.MAP

  • Add a new function to the shape layer that return an array of _ShapeItems contained in a mapbound.

  • The MapBound.Contain function really returns if a bound can be contained.

  • Now MapBound.InBounds is working correctly.

  • Fixed a bug in the Near function of _ShapeItem.

GB.MARKDOWN

  • The <div> markup that encloses all tables has a class "table" now.

  • Fix list generation, by removing a strange insertion of void paragraph.

GB.NET

  • ServerSocket: Save a few bytes in the ServerSocket structure.

  • ServerSocket: Add a tag property.

  • Socket: Remove a duplicated path field and save a few bytes in Socket structure.

GB.PCRE

  • Support for pcre2. The pcre library is now used only if pcre2 is not found.

  • The interface is the same if pcre2 is used, so you don't have access to the new features of pcre2.

GB.PDF

  • Make gb.pdf compile with poppler 21.06.0.

  • Use C++17 now to compile gb.pdf.

GB.POPPLER

  • Fix the use of a method deprecated by poppler 0.82.

  • Fix an API argument that must be initialized.

GB.QT4

  • Color: Tooltip and link properties are now writable. Override them if the default widget theme colors are unreadable.

  • ComboBox: Close() is a new method that closes the ComboBox popup.

  • ComboBox: Raise a Cursor event now when the cursor moves.

  • ComboBox: Add Placeholder to the list of ComboBox control properties.

  • Container: Automatic container resize now takes the arrangement of the parent of the container into account.

  • Control: Correctly take the NoTabFocus property into account.

  • Control: Do nothing if the Proxy property is set without actually changing its value.

  • Control: RightToLeft is a new property that returns if a control is right-to-left oriented.

  • Control: Direction is a new property that allows to specify the text direction of the control.

  • Cursor: The mouse cursor type constants are now defined in the Cursor class.

  • Desktop: Type property is now implemented in gb.gui.base.

  • Dialog: FilterIndex is a new property that returns or defines the current filter of the file dialog.

  • DrawingArea: Remove some now useless code.

  • DrawingArea: Replace some bool by one-bit integers in widget implementation.

  • Drag: The SHIFT and CONTROL key modifiers define the current drag and drop action.

  • Drag: The three drag and drop actions are supported now.

  • Key: Shortcut is a new property that returns a string describing the key of a keyboard event with all its modifiers.

  • Key: Fix Key.Backspace property name.

  • Image: Rotate() is now antialiased.

  • Image: Stretch() now takes a third optional argument to stretch without antialiasing.

  • Mouse: Now Button returns the button number, between 1 and 5.

  • Paint: Begin() now correctly initializes the text drawing color.

  • Paint: Do not use a copy of the font object when calling set_painter_font() in cpaint_impl.cpp.

  • Picture: Copy() now keeps alpha component as expected.

  • Style: PaintButton() now can take a background color as optional argument.

  • Style: BackgroundOf() method is now reliable.

  • TextBox: Raise a Cursor event now when the cursor moves.

  • TextArea: Add a padding proportional to the font height.

  • Window: Do not raise the Hide event twice.

  • Display the warning about calling the event loop during a keyboard event once.

  • Fix new gcc compiler warning.

  • Fix focus management so that the focus order is always the stacking order.

  • Do not loop indefinitely when searching for the next focus widget.

  • Fix compilation on older Qt versions.

  • Fix how keyboard events are propagated to the parent windows.

  • Update some commented debugging messages.

  • Use floating point font metrics for computing text size everywhere.

  • Don't quit if there is still one active timer.

  • Check if the event loop must be stopped each time a timer is disabled.

  • Make all GUI components behave the same when dealing with focus and modal or popup windows.

  • Text drawing alignment is now based on text direction.

GB.QT5

  • Color: Tooltip and link properties are now writable. Override them if the default widget theme colors are unreadable.

  • ComboBox: Close() is a new method that closes the ComboBox popup.

  • ComboBox: Raise a Cursor event now when the cursor moves.

  • ComboBox: Add Placeholder to the list of ComboBox control properties.

  • Container: Automatic container resize now takes the arrangement of the parent of the container into account.

  • Control: Correctly take the NoTabFocus property into account.

  • Control: Do nothing if the Proxy property is set without actually changing its value.

  • Control: RightToLeft is a new property that returns if a control is right-to-left oriented.

  • Control: Direction is a new property that allows to specify the text direction of the control.

  • Cursor: The mouse cursor type constants are now defined in the Cursor class.

  • Desktop: Type property is now implemented in gb.gui.base.

  • Dialog: FilterIndex is a new property that returns or defines the current filter of the file dialog.

  • DrawingArea: Remove some now useless code.

  • DrawingArea: Replace some bool by one-bit integers in widget implementation.

  • Drag: The SHIFT and CONTROL key modifiers define the current drag and drop action.

  • Drag: The three drag and drop actions are supported now.

  • Key: Shortcut is a new property that returns a string describing the key of a keyboard event with all its modifiers.

  • Key: Fix Key.Backspace property name.

  • Image: Rotate() is now antialiased.

  • Image: Stretch() now takes a third optional argument to stretch without antialiasing.

  • Mouse: Now Button returns the button number, between 1 and 5.

  • Paint: Begin() now correctly initializes the text drawing color.

  • Paint: Do not use a copy of the font object when calling set_painter_font() in cpaint_impl.cpp.

  • Picture: Copy() now keeps alpha component as expected.

  • Style: PaintButton() now can take a background color as optional argument.

  • Style: BackgroundOf() method is now reliable.

  • TextBox: Raise a Cursor event now when the cursor moves.

  • TextArea: Add a padding proportional to the font height.

  • Window: Do not raise the Hide event twice.

  • Window: Border property now uses the Qt5 window flags to switch the border.

  • Display the warning about calling the event loop during a keyboard event once.

  • Fix new gcc compiler warning.

  • Fix focus management so that the focus order is always the stacking order.

  • Do not loop indefinitely when searching for the next focus widget.

  • Fix compilation on older Qt versions.

  • Fix how keyboard events are propagated to the parent windows.

  • Update some commented debugging messages.

  • Use floating point font metrics for computing text size everywhere.

  • Don't quit if there is still one active timer.

  • Check if the event loop must be stopped each time a timer is disabled.

  • Make all GUI components behave the same when dealing with focus and modal or popup windows.

  • Text drawing alignment is now based on text direction.

  • Fix some Qt5 warnings.

  • Reset the internal Qt5 thread pool before forking, only if QT version is at least 5.15.0.

  • Fix some use of deprecated methods.

GB.QT5.WEBVIEW

  • WebView: Clear the internal cancel flag if the Finish event is raised before the acceptationRequest method is called.

  • Try to make Qt5 and GTK+3 webview raise their events the same way when loading pages.

GB.SETTINGS

  • Don't crash with an unclear error message when assigning an object to a key.

  • Raise an error if we try use an object that is not an array or a collection as setting value.

  • Reading settings file is faster now.

GB.TEST

  • Add test suite Production which is called by run.sh.

GB.UTIL

  • CsvFile: Add a NoDiacritics optional argument to automatically remove diacritics from column names.

  • CsvFile: Ignore the useless BOM character put at the beginning of UTF-8 files generated by many stupid Windows softwares.

  • CsvFile: Add help comments.

  • CsvFile: KeepNames is a new property that keep the column names unchanged.

  • CsvFile: Add properties for CsvFile configuration.

  • CsvFile: Columns is a synonymous of Fields property.

  • Process: The Expect() method now takes a third optional argument that tells if a detected prompt must be kept, or must be disabled automatically. Prompts are automatically disabled by default

  • Process: Automatically disable internal observers if there is no prompt to watch anymore.

  • Fix File.FormatSize() so that no more than three significant digits are returned.

  • Import all needed translations from the IDE.

  • Language is a new class that allows to deal with the translation of the current project.

GB.WEB

  • Request.Scheme is a new property that replaces Application.Protocol.

  • Request.Scheme now returns "https" according to the contents of the REQUEST_SCHEME or X_FORWARDED_PROTO headers passed to the CGI script.

GB.WEB.GUI

  • Application: ActiveControl is a new property that returns the current control having the focus.

  • WebAudio: A new virtual control for playing audio files.

  • WebButton: Implement the Default and Cancel buttons. They work only in the main form and in modal dialogs.

  • WebButton: Image now always fill the button height.

  • WebButton: Stretch the image size to the button height.

  • WebButton: Use <button> instead of <div>, to get focus and native keyboard management.

  • WebComboBox: Use the input event instead of the change event to implement the Click Gambas event.

  • WebComboBox: Editable combo-box Click event should now trigger again as expected for the first list element.

  • WebComboBox: Fix layout.

  • WebContainer: Do not change the display CSS property of children controls when arrangement is Row or Column.

  • WebControl: ToHTML() is a new method that return the generated HTML associated with the control as a string.

  • WebImage: The Image property can be an absolute URL now.

  • WebListBox: It is focusable now.

  • WebListBox: Add ScrollX and ScrollY properties.

  • WebListBox: Keep the scroll status between refreshes.

  • WebMenu: Handle Shortcut property.

  • WebScrollView: EnsureVisible method should work as expected now.

  • WebSpinBox: Do not force a refresh when the value has been changed by the browser.

  • WebTable: If the Display property is negative, then the full contents is displayed in one shot.

  • WebTable: ShowRowNumber is a new property that displays the row number in the first column of each row.

  • WebTable: Fix table layout.

  • WebTable: Replace the DblClick event by the Activate event.

  • WebTable: Draw the vertical header the same way as the horizontal header, and make it sticky.

  • WebTable: Replace the ShowHeader and ShowRowNumber properties by a Header property.

  • WebTable: The ShowHeader property is deprecated but works as expected now.

  • WebTable: WebTableData.Control allows to define a control that will be embedded in the cell.

  • WebTable: Raise a Click event now if a control that is embedded in a cell raises a Click event. It takes the row and the column as argument.

  • WebTextArea: Fix style sheet.

  • WebTextArea: Setting the Text property now automatically moves the cursor and the scrollbar to the end of the text.

  • WebTree: New control that implements a tree with a Data event similar to WebTable.

  • Use SIGUSR1, now that SIGUSR2 is used by the Gambas debugger.

  • Do not allow window titlebar to be moved outside of the visible area.

  • Implementing keyboard event and menu shortcuts management.

  • WebForm.Shortcuts is a new property that allows to declare a list of shortcuts the browser won't see.

  • Ensure that the pipe for writing the response is in blocking mode.

  • Preload framework images and icons.

  • If the huge version of a stock icon does not exist, use the small version instead.

  • Use blue inset box shadow for drawing focus.

  • If a WebControl raises a DOM click event, then it automatically stops the propagation of the DOM mousedown event.

  • The current focus is now kept when the page is refreshed.

  • If a modal window is opened, controls outside of the modal window cannot be focused anymore.