doc • release • 3.16.0

Gambas 3.16.0

What's new?

This is a huge release, with more than a thousand of changes, optimizations and bug fixes.

Here are some of the main features:

  • Array access is now about 15% faster.

  • Add binary search methods to the array classes.

  • Date localization support has been redesigned, so that complex formats of languages like Chinese are supported. The new design should be backward-compatible with the old ones on western languages.

  • Compiler is now faster by using all the CPU cores.

  • Scripter has been redesigned, cleaned-up, enhanced and optimized.

  • GTK+3, QT4 and QT5 new web browser components using the same interface.

  • GTK+3 component is now on a par with QT5 component, allowing the development environment to run with GTK+3!

  • GTK+3 and QT5 components now support Wayland.

  • Label, TextLabel, MovieBox, Frame and Separator controls are now written in Gambas.

  • A lot of new stock icons were added and updated.

  • The ODBC database driver works far better.

  • zstd compression format support.

  • aarch64 architecture support.

Compilation and installation

Read the instructions there.

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

Enjoy it !

Changelog

CONFIGURATION

  • Uninstall mimetypes for Gambas script and server pages.

  • Install an icon for the Gambas IDE.

  • Update Gambas IDE icons.

  • Fix installation of IDE icons and menu.

  • Fix make install that should now correctly remove all installed files.

  • Workaround a bug in xdg-desktop-menu that triggers on Alpine systems.

  • Add actions to the Gambas IDE desktop file to run it with a specific GUI component.

  • Correctly uninstall interpreter metadata files.

  • Correctly remove gb.component file from installation once the metadata has been generated.

  • Only keep the gb.component file for the native component and remove gb.so and gb.la.

  • Add detection of aarch64 architecture.

  • Use gcc option -O2 instead of -Os by default.

  • Fix some spaces in gambas3.desktop file.

  • Fix uninstallation of gambas icons.

  • Components having a Gambas part now compile it with translation enabled.

  • Use 64x64 icons for controls now.

  • Update AUTHORS file.

  • Sort AUTHORS file by name and by contribution type (developer, example developer, translator). Remove general contributions like "bug fixes" or "testing", and rewrite fuzzy ones.

  • Add support for Ubuntu 21.04 (hirsute hippo) in GitLab CI.

  • Add support for OpenSuse 15 (.2 & .3) in GitLab CI.

  • Detect git/svn version with a macro instead of creating a header file.

DEVELOPMENT ENVIRONMENT

About dialog

  • Fix contents for gb.gtk3.

  • Display the platform and the GUI toolkit.

  • Make it larger for wide fonts.

Automatic completion

  • Run after a little delay, so that repeated cursor moves trigger it once.

  • More keys now validate the completion then close the popup.

  • The automatic completion and signature popups should not overlap anymore.

  • Gambas keywords are now automatically inserted with a space after them when it makes sense.

  • Property variables declared with USE are now correctly considered as private.

Code editor

  • Hitting F2 on a non-existing label does not crash anymore.

  • Make private symbols darker in the procedure list so that they are easier to read.

  • Do not hide automatic completion and signature popup when we are scrolling horizontally.

  • Correctly hide automatic completion and signature popups when saving.

  • Use the new wrap stock icon.

  • Add filter buttons to the procedure list.

  • Error tooltip now uses the foreground color.

  • Keep the runtime error tooltip indefinitely.

  • Use the editor font for error and watch tooltips. Add a little padding.

  • Commenting and uncommenting is now a lot faster.

  • Use the wait cursor during printing initialization.

  • Display cursor position and overwrite state in the status bar.

  • The UNSAFE keyword is now correctly taken into account in function detection.

  • Make compiler and runtime errors tooltips more readable.

Code snippets

  • Use the project tabulation size for indentation.

Color chooser dialog

  • Color insertion automatically detects the color under the cursor and highlights it, so that it will be replaced if the dialog inserts a new color.

  • Correctly handle double-click when the first tab is selected.

  • Enhance color chooser dialog.

Compiler management

  • Correctly locate compiler errors when the errors occurs at the very end of the class file.

  • Sort compiler output messages so that the result does not depend on the order of the compiler background tasks.

Components management

  • Scanning a class that declares a structure using the name of an already existing class does not loop forever anymore.

  • The AutoCreatable flag is now correctly taken into account by inheritance of exported classes.

  • Fix scan of project classes having a parent class.

Connection editor

  • Request duration is now displayed in the status bar.

  • Running a request that is not a SELECT now automatically updates the table list.

Debugger

  • Change the Run menu into Continue when the debugger is running.

  • Disable Run with menu when the debugger is running.

Debug panel

  • Display the local variables and the watch expressions in one half of the panel, and the global variables in the other half.

  • The close button has an opaque background now.

Farm client dialog

  • Don't set the Foreground color of Software boxes, it makes GTK+3 css system slow as hell.

  • Fix the layout of filter panel.

  • Trim the software name if there is not enough horizontal space to display it.

  • Cache the autocompletion tag list.

File compression

  • The "of" javascript keyword is now correctly taken into account.

  • Compressing a void file does not crash anymore.

  • Compressing or uncompressing a file now marks the project as modified.

  • Automatically convert compressed files when opening old projects.

  • Compressed files are not stored in the project anymore. They are generated when the executable is made.

Form editor

  • Do not set the Name property if a virtual control has no Name property.

  • Floating point number properties are now edited in american format, they do not use the current localization.

  • The control selection menu now uses two levels of menus not to display too many items in the same popup.

  • Changing the class of a public control from the "Change into" menu now works as expected.

  • The menu editor view now remembers its scrolling position, provided that you open it on the same form.

  • Grid is lighter.

  • Clicking on the Invert button of the list property editor when the list is void does not crash anymore.

  • New arrangement indicators.

  • Pasting controls put them at the first free place found now.

  • Add a back and forward button to the preview.

  • Double-clicking on a toolbox control now inserts it at the first free place in the selected container.

  • Remove container does not incorrectly move the children anymore.

  • Arrange containers after first load, and mark the form as modified if the loaded arrangement had to be changed.

  • Correctly detect stacking order changes caused by automatic arrangement.

  • Support for forms that are multicontainers.

  • Changing the toolbar icon size now keeps the current tab.

  • Sort toolbox controls in the alphabetical order.

  • Center buttons now always act on the selected controls, not their children.

  • Support for Picture:NoCache property kind.

  • Multicontainer tab moving does not crash anymore.

  • Don't use brush for painting the selection. As brush is always a repeated pattern, edges got incorrect pixels on rotation.

  • Add a "show deprecated" button in the toolbox.

  • Add a popup menu to the toolbox.

  • Control groups are now translated in the toolbox.

  • Do not show deprecated controls is similar list, unless they are visible in the toolbox.

  • Fix custom drawing of Splitter and Toolbar.

  • Clicking on the clear button while editing a property value now resets the property to its default value.

  • Support for the MovieBox Animation property.

  • Don't use the deprecated MovieBox.Path property anymore.

  • Support for the new _DefaultText constant of Multicontainer controls.

  • Multicontainer tabs title are now initialized with a default text.

  • Control restacking now can be undone correctly, and works on forms with automatic arrangement.

Gambas fonts

  • Merge all different sizes in two SFD files (one for regular, one for bold).

  • Update Gambas fonts.

  • Put the *.bdf files into the project data, even if they are generated from the *.sfd files.

Help browser

  • Deal with possible missing GUI component information files.

  • Layout the loading spinner later to be kind with GTK+.

  • Display an accurate message in online help when a unsupported wiki command is used.

  • Correctly stop the spinner if the page loading is cancelled.

  • Use a circle Spinner.

  • Remove unused MovieBox.

  • Handle component documentation written inside code automatically, like the wiki.

  • The style sheet is correctly reset after the offline help has been updated.

  • Use substitutes for missing components only in the help browser.

  • Use the new Web browser of the gb.gui.webview component.

  • Use the new WebView.Clear method to resets the view, as clearing the history does not really work.

  • Help widget keeps its zoom when being cleared.

  • Help widget does not refresh if we ask it the same URL.

Icon chooser dialog

  • Redesign the dialog a bit.

  • Add a check box that toggles displaying icons using the selected size or not.

  • Add a icon name filter.

Image editor

  • Fill rule button is visible again.

  • Use the new "line cap" and "line join" stock icons.

  • Apply a zoom fit after an image resizing.

  • Default image resize mode is stretching now.

  • Selection resizing dialog can create a border.

  • Use SpinBox controls for grid options.

  • Add an invert button for testing the dark version of an icon.

  • Correctly refresh property panel when switching to another file.

  • Do not crash undo management anymore after a right or middle mouse click on the image.

  • Correctly reset the current shape when the selection is cleared.

Make executable dialog

  • Add an option to globally disable file compression (useful for debugging).

  • Add an help label for substitution patterns.

  • Don't show the console automatically when running the after command.

  • $(VERSION) is now correctly replaced by project version in the after command.

  • It is possible to explicitly set the version instead of incrementing it.

  • Do not warn when generating the executable twice without any change, if project version comes from a VERSION file.

  • Fix executable desktop shortcut generation.

  • Add $(DIR), $(VERSION), $(NAME) and $(TITLE) to the "Run command after" substitution patterns.

Make source archive dialog

  • Support for zip format.

  • Display the right error message when an unsupported archive format extension is selected.

  • Use a custom dialog with a "fool GMail" explicit option.

  • The source archive target directory is now correctly saved into the project.

  • Fix source archive generation with tar.

  • Support for a new source archive format that should be able to fool GMail.

Main window

  • Fix GUI default layouts.

  • Fix global toolbars layout management.

  • All messages now use message boxes.

  • Add a message label on the bottom right of the IDE main window, besides the debug panel buttons.

  • Make panel close buttons tiny.

Menu editor

  • The "Paste" button now pastes after the current menu.

  • Add a "Paste before" button so that we can paste before the first menu.

  • Use a true toolbar.

  • Add buttons to directly jump to menu event handlers.

Option dialog

  • Hide proxy configuration button, as it is not yet supported by the new webview.

  • Add an option to choose the message style.

  • Add a global option for defining the number of compiler background jobs.

  • Changing the icon theme now has an immediate effect.

Output terminal

  • Handle code positions emitted by the DEBUG instruction as links.

  • Always ensure that the terminal bottom is visible once a program or a test is finished.

  • Remove TerminalView resizing workaround.

Packager wizard

  • Debian packages now use icons in png format instead of xpm, that format being not supported by GTK+.

  • Common extra dependencies and extra files are not lost anymore when the target systems change.

Profiler

  • Each profiling window has now its window button inside the bottom toolbar.

  • Remove the now useless minimize toolbar button.

  • Reorder profiling menus.

Project arguments dialog

  • Save dialog geometry.

  • Quote arguments only if really needed.

  • Fix overlapping text when drawing project titles.

  • Backward-compatibility with older IDE versions for storing program arguments in the project file.

Project creation dialog

  • Replace balloons by message boxes, as they do not work on Wayland.

Project management

  • Make .project format backward-compatible. All unknown options in the project configuration file are now preserved when writing it.

  • The CompressFile project option key has been renamed as CompressedFiles, with an automatic upgrade.

  • Fix a possible infinite recursion when checking for project files metadata flags.

  • Project info box now correctly displays the current branch besides the version number.

  • Project info box is now automatically reloaded if the project configuration file has changed.

Project properties dialog

  • The project icon is visible again the first time the dialog is opened.

  • Add GB_GUI_DARK_THEME=1 to the pre-defined environment variables.

  • Remove the white background color of icon button.

  • Environment variables now can be individually disabled.

  • Don't try to display the average number of lines by function if there is no function in the project.

  • Inserting a new environment variable now edits the correct cell.

  • Unset the AutoResize property on a container so that the "Authors" field is visible on GTK+3.

  • Going back in the component help browser does not raise an error anymore.

  • Do not hide component if it has the same name as the project.

  • Environment variables menu has been grouped with sub-menus.

  • Environment variables can be reordered.

  • Fix a possible crash when closing the dialog.

  • The variable name column of the environment grid now enlarges itself when inserting a new variable.

Project tree

  • Fix directory creation.

  • Pasting a file now correctly updates its version control state.

  • The tree filter can now display compressed files only.

  • Check for compressed files only if we display the current project.

  • Fix the size of file icons.

  • Compressed files are drawn with a darker icon now.

  • Source files icons follow dark themes again.

  • Renaming a file now highlights its basename by default as before.

  • Failing to rename a file does not crash anymore.

  • Add a duplicate menu entry for data files.

  • Add a "show untranslatable files" filter.

  • File renaming takes "compress file in executable" flag into account.

  • Creating a directory named CVS or CVSROOT is now forbidden.

  • Ignore CVS, CVSROOT and .svn directories when browsing the project.

Search dialog

  • Global replace does not lock text editors anymore.

  • Hide the dialog immediately when browsing the project.

  • Use a round spinner.

  • Fix search result line numbers.

  • Highlight of C++ files does not crash anymore in search results.

  • Limit the width of the search list location column.

  • Renaming a file displayed in the search result list does not crash anymore.

  • Replace the balloon by a message box, because of Wayland.

System information dialog

  • Add the GDK library.

  • Add default font name and desktop scale.

Test panel

  • Display the test result with a colored label inside the test panel toolbar.

  • Send the test suite name and not the full test list to the tested program.

  • Use the project environment when running in test mode now.

  • Add a spinner to the test panel.

  • If the program test crashes, then the fail test label is shown.

  • Always show after a test has been run.

  • Update the tests configuration file as soon as a test module is modified, deleted or renamed.

  • Disable editor popup when the test output terminal gets the focus.

  • Start test button is now disabled while the project is tested.

Text editor

  • Add a preview panel for Markdown and HTML documents, based on a WebView and some javascript.

  • Add a button for loading images in HTML preview. By default they are not loaded.

  • Add line anchors to HTML preview. It works only if markups do not span on several lines.

  • SVG files are now highlighted with the HTML mode.

  • The procedure popup has now the same width as the procedure button.

Translation dialog

  • Importing a translation now correctly refreshes the translation view.

Translations

  • Update French translation.

  • Update Chinese translation.

Version control

  • Fix git branch listing.

  • The version control dialog now opens only if the project compiles correctly.

  • Ignore changes in white spaces in the diff.

  • Ignore changes in white spaces when displaying git log history with changes.

  • Support for git worktrees.

  • Fix a possible crash if the password dialog is cancelled.

  • Highlight the "merge" lines in git history.

  • Don't show modified lines on history editors.

  • Form history now takes the associated class file into account.

  • Use explicit commit buttons now.

  • Always save the commit log, even if the dialog is cancelled.

  • Add a checkbox to hide changes in translations.

  • If there is no change to commit, display a little warning on the bottom left of the dialog, and hide the change tab.

  • Error message is now top aligned.

  • Add a checkbox that allows to include changes with the commit history. Only implemented for git at the moment.

  • Automatically set the $EDITOR environmental variable if not set.

  • If not editor is found for $EDITOR, display a warning message.

  • The git root directory including a project is now correctly detected when there is a symbolic link somewhere in the path.

  • Make the defaut dialog size smaller.

  • Fix error message layout routine.

Welcome dialog

  • Void example tab does not crash anymore.

  • Some fixes in snow.

  • Make snow flakes fade when they have landed.

  • Do not draw tears on X-Mas.

Miscellaneous
  • Redraw and fix control icons.

  • Remove now useless classes.

  • Use gb.gui instead of gb.gui.qt, so that gb.gtk3 component can be used.

  • Remove now useless custom icons.

  • Update "zen" color theme.

  • Update "gambas" color theme.

  • Display an accurate error message if the compiler crashes.

  • Fix my e-mail address displayed in many places.

  • The "tips of the day" window is now an utility window.

  • Use String.RemoveDiacritics() instead of the old local utility function.

  • Custom control icons size is now proportional to the font size.

  • Update background image list.

  • Slightly update symbols icons.

  • Bigger Atari bomb icons.

  • Use "small" icon size instead of fixed size almost everywhere.

  • Automatic generation of deprecated controls icons.

  • Update support file.

  • Increment project modification time stamp when creating, deleting, renaming files, updating translations...

  • Put the close menu of editors popups at the end.

WIKI

  • Update Chinese translation.

  • Use gb.qt5 information file for all GUI components now.

  • Fix index sorting.

  • Add how-to-install special command.

  • Display monospace text with a light gray background.

  • Change website icon.

  • Fix css of message boxes.

  • Use a different URL for editing pages, so that CloudFlare can be used.

  • Automatic usage of help coming from the source code comments.

  • Less margins around paragraphs.

  • Update message icons.

  • Handle --> link syntax in default help.

  • If a class is virtual (its name does not begin with a letter), then use the page title instead of the class name if present.

  • Update the list of ignored components used for generating the TODO page.

  • Syntax for string constants are correctly generated.

  • ==> at the beginning of a page introduces an automatic HTTP redirection. This is different from --> which is a link to another page.

INTERPRETER

Array management

  • Fix Variant arrays sort when a mode is specified.

  • Array access is now about 15% faster.

  • Raise a memory error if the size of an array element overflows. The maximum size is now 16 MB minus one byte.

  • Fix multi-dimensional arrays management.

  • Object[].Find() now correctly takes the optional Start argument in account.

  • Add FindSorted(), ExistSorted()... methods to the array classes. They use a binary search algorithm (in other words, they assume the array to be sorted).

  • Fix string array search with special comparisons.

  • Fix automatic conversion of multi-dimensional arrays.

  • A class that inherits an array class now inherits its internal array flag too.

Component API

  • GB.Array.Get() does not check array bounds anymore.

  • GB.IsRaiseLocked() is a new API that tells if raising an event is useless because no observer will receive it.

  • GB.IsLocked() is a new API that tells if an object is locked.

  • Add GB.String.Split() API.

  • Fix a crash when GB.ReturnNewString() is used with a zero length.

  • The enumerator object now can register a free function that is called when the enumeration ends or is aborted.

  • Add an API to set the read-only flag of an array.

  • Change the GB_FUNCTION structure so that it stores the index of the method instead of its description pointer.

  • GB.Call() API now works correctly again when calling static methods.

  • Add GB.HasError() API to know if a native error has already been raised.

  • Add GB.DateFromString() API.

Date management

  • Str() now uses gb.Standard to format dates, so that Val() and IsDate() can understand them.

  • Formatting a date with gb.Standard now uses gb.MediumDate concatenated to gb.MediumTime, as gb.GeneralDate now is a different format.

  • Rework and simplify internal date/time formatting routine.

  • Date format with distinct separators and tail separators (like the Chinese date format) are now correctly supported.

  • If the current localization uses the same separator for all date elements having a separator, then the element having no separator will use that same element if the "/" format character is used in the Format() function. Same change for the time separators.

Error management

  • Correctly catch errors raised inside event handlers in all cases.

  • Add a debug API that returns the current error message, and remove the API that printed it.

  • Errors cannot be propagated outside of an event handler, because the event may result from a library signal that do not support exceptions (like the glib library).

  • Stop stack unfolding on exception only up to an event raise now.

File management

  • Opening a file for creation in direct mode now implies the write flag.

  • Redesign internal file constants.

  • Add gb.Input and gb.Output constants.

  • Child processes do not inherit locks anymore.

  • Stat().Device is a new property that return the device containing the file as a string.

  • File.DefaultDirAuth is a new property that defines the default authorizations used when using MkDir.

Internationalization

  • Use the current language to load translations, not what setlocale() returns.

  • Always define LC_ALL and LANG with the effective language chosen.

  • Fix possible buffer overflow on localisation environment variables.

  • If no language environment variable is defined, use C locale instead of en_US.

  • System.GetFormat() is a new method that returns the format string associated by a predefined format constant.

  • Format(0, "#") now returns "0" and not a void string anymore.

  • Use the correct thousand separators.

JIT compiler

  • Disable jit compiler if no compiler is found.

  • Fix panic message displayed when a JIT method is not found.

String management

  • Fix &= operator optimization when the added string is void.

Task management

  • Timers are not inherited anymore by background tasks. They are actually inherited, but immediately disabled the first time they trigger inside the background task.

  • Task.Kill() method is now a synonymous of Task.Stop().

Miscellaneous

  • Add process id in warning messages.

  • Workaround libraries that override SIGCHLD handler by checking and reinstalling it at each event loop (!), at component request. All components using glib should request that using a new API.

  • Add a -a option that allows to override the program path (i.e. Application.Path and Args).

  • Undef PACKAGE_ preprocessor constants from gambas.h, if they are defined.

  • Min() and Max() are now faster.

  • System.Cores is a new property that returns the number of cores.

  • Change the internal signature of the implementation of the class "fast methods".

  • Fix compilation on 32-bits systems.

  • The interpreter can compile without libffi again.

  • Url$() does not encode spaces with the + character anymore, as this is deprecated, and works only inside query part of the URL.

COMPILER

  • Ignore CVS and CVSROOT directories when searching for source files to compile.

  • Add a -j option to run multiple jobs in background to speed-up compilation. -j0 option means the number of cores plus one.

  • If the Class word follows the End keyword, it is recognized as a keyword.

  • Do not crash when using ("") as value for a string constant.

  • Always raise a syntax error if a preprocessor line starts with an unknown reserved identifier.

  • #Include is a new preprocessor reserved identifier.

  • Allow ON ... GOTO / GOSUB to span on multiple lines.

  • Support for #Script preprocessor keyword.

  • When compiling forms, errors at the end of the class file are not associated with the form anymore.

INFORMER

  • Fix a warning message.

  • Running the informer for all components will not analyze the gb component. The metadata of gb must be generated explicitly.

SCRIPTER

  • Scripter has been reworked, cleaned-up, extended and optimized by Brian Grindley.

  • Added a test suite to verify very basic scripter functionalities.

  • It is possible to include more that one file per line.

  • #Include is now supported as well as Include.

SELF-TESTER

  • A new program that aims at checking the interpreter.

BENCHMARKS

  • Add a -count option to tell how many times the benchmark will be run. The displayed times will be the mean of all runs.

GB.ARGS

  • Disable default handling of -V and -h options if they are handled manually.

GB.COMPRESS.ZSTD

  • New zstd compression driver made by Laurent Carlier.

GB.DATA

  • The new GB_FUNCTION structure allows to reduce the size of the GRAPH_DESC structure.

GB.DB

  • Do not quote * field name in SQLRequest.Select() method.

  • Enumerating subcollection now silently ignores elements that do not exist anymore, instead of raising an error.

  • Don't call the collation driver routine if the no_collation flag is set by the database driver.

  • Do not try to seek anywhere in the Result object if the no_seek flag is set, even if the row count is positive.

  • Result.Delete() never removes a row from the result set if its row count is negative (i.e. if it is forward-only).

  • The Result.Release() driver API now tells if the connection has already been closed.

  • Raise an error when retrieving the primary key fails, if the driver has not already raised it.

GB.DB.FORM

DataBrowser

  • Find() is a new method that moves to the first row matching a specific SQL condition next to the current position.

DataComboView

  • Prevent the popup contents from scrolling horizontally.

  • Fix default event.

  • Draw grid inside the combo if the grid property is set.

  • Ignore vertical alignment when drawing the contents.

  • Handle keyboard shortcuts: Space, Enter, Down, and Escape key.

DateSource

  • FindNext() is a new method that returns the index of the first row matching a specific SQL condition next to the current position.

  • Find() is a new method that returns the index of the first row matching a specific SQL condition.

DataView

  • Find() is a new method that moves to the first row matching a specific SQL condition next to the current position.

Miscellaneous

  • Update Chinese translation.

  • New icon for DataSource control.

GB.DB.ODBC

  • Get rid of a warning by using snprintf() instead of strncpy().

  • Fix component as much as possible.

GB.DB.POSTGRESQL

  • Workaround a stupid postgresql #define.

  • Remove the undefinition of PACKAGE_ constants. It is now handled directly in gambas.h.

  • Support of PostgreSQL 12 and newer versions by Laurent Carlier.

  • Correctly build the database version number in all cases.

GB.DB.SQLITE2

  • Correctly handle ~ in database directories.

GB.DB.SQLITE3

  • Correctly handle ~ in database directories.

GB.DBUS

  • DBusConnection: Validate the path sent to the _Introspect() method, to replace a crash by an error or a void result.

GB.DBUS.TRAYICON

  • TrayIcon: Update the DBus menu only if necessary.

  • The default tray icon ignores dark theme now.

  • Toggle menus are now correctly updated in the tray icon exported popup (beware that no update works at the moment with Gnome / Ubuntu indicators).

GB.DEBUG

  • The debugger now correctly saves and prints the current error message.

  • Stop watching debugger file descriptor as soon as there is a read error.

  • Tabs and newlines are now replaced by spaces inside error messages. Otherwise the debugger breaks.

GB.DESKTOP

  • On KDE5, don't try to use old KDE4 wallet if it is not available.

  • Desktop.SendMail() now waits for the completion of the xdg-email script, so that errors are raised.

  • Support for desktop component plugins. Unsupported APIs (on wayland) now raise an error.

GB.DESKTOP.X11

System tray support

  • The tray now creates its own window.

  • Show() now should take the handle of a top-level window.

  • The Arrange event is raised immediately after the end of the Show() method.

  • Move() and Resize() are two new methods that define the geometry of the tray inside the window specified by the Show() method.

Miscellaneous

  • This component is now a X11 plugin for gb.desktop.

  • Fix stack overflow when using X11.RootWindow property.

  • X11.ShowDesktop now silently fails if the _NET_SHOWING_DESKTOP X11 property is not set.

GB.DRAW

  • Add PaintExtents W and H properties as synonymous of Width and Height.

GB.EVAL

  • If the Class word follows the End keyword, it is recognized as a keyword.

  • Fix parser on multi-line text.

  • Fix preprocessor lines highlighting.

  • Fix how highlighting deals with spaces.

  • Keywords and subroutines are now returned by two different properties of the System class.

  • System properties Keywords, Subroutines and Datatypes now return a read-only array.

  • Support for #Script preprocessor keyword.

GB.EVAL.HIGHLIGHT

  • HTML highlighting: Markups can now span on multiple lines.

  • TextHighlighter.CanRewrite is a new property that tells if highlighting is allowed to rewrite.

  • Take the previous property into account in Gambas highlighter.

  • Remove escape character \ from operator list.

  • Support for the new System Keywords and Subroutines properties.

GB.FORM

ButtonBox

  • Draw the default background color correctly.

  • Clicking on the clear button triggers filtering immediately now.

ColorButton

  • Display the inner color the same way in all GUI components.

DateBox

  • Chinese language should be correctly supported now.

DateChooser

  • Handle mouse wheel events on time boxes better.

  • ShowWeek is a new property that toggles the display of weeks.

DirButton

  • Take the Design property into account.

DirChooser

  • Raise an Uncompress event when a custom compressed file is requested to be uncompressed.

  • Add an UncompressFilter property that defines a list of additional LIKE regexp filters for custom compressed files.

  • Ask for overwriting selected file if in single selection mode and if not read-only.

DocumentView

  • Some fixes in property validation.

  • The useless Layout.Orientation property has been removed.

  • AutoCenter has been renamed as Center, Column is now Columns, Row has been removed.

  • Setting Center property now correctly relayout the preview.

  • Rename FirstVisibleDocument and LastVisibleDocument as FirstVisiblePage and LastVisiblePage.

  • Remove useless methods MoveFirst(), MoveLast() and MoveTo().

  • Fix a possible infinite recursion in document layouting.

Expander

  • Disable animations, they are broken.

FileChooser

  • Raise an Uncompress event when a custom compressed file is requested to be uncompressed.

  • Add an UncompressFilter property that defines a list of additional LIKE regexp filters for custom compressed files.

  • Ask for overwriting selected file if in single selection mode and if not read-only.

  • Hide the bookmark button and its separator accordingly.

  • Correctly disable the bookmark edit menu entry when there is no bookmark defined.

  • AutoExt is a new property that automatically sets the file extension according to the current filter.

FileView

  • Path is a new read-only property that return the absolute path of the current selected file.

  • The first column now has a maximum width when it is resized at refresh.

  • Sort configuration is kept when the view is refreshed.

  • Ignore newlines when displaying the name of a file.

FontChooser

  • Define pangrams for some languages.

  • Add a ShowFont property that toggles the display of fonts inside the font tree.

  • Redesign GUI.

  • Implement a font thumbnail cache to speed up redrawing.

  • Support for fonts whose name is made of digits only.

  • Correctly handle focus when the layout changes.

IconPanel

  • Add a RichtText property to IconPanel tabs.

ListEditor

  • Better behavior in design mode.

MenuButton

  • Fix hidden shortcut button for GTK+ components.

  • Fix drawing for GTK+3.

  • Fix background color.

  • Make the background transparent.

MessageView

  • Speed animation up.

SliderBox

  • Use the new Slider.Orientation property.

Spinner

  • Add a Type property that allows to choose between three different spinners.

  • Take the padding into account correctly.

  • Add a margin property that represents an inner padding of Desktop.Scale.

Stock

  • Add a debugging message that displays the icon theme.

  • Read the Mate desktop icon theme with the dconf tool, as apparently the mate tool has been deprecated.

  • Merge the detection of gnome, mate and cinnamon desktops.

  • Support for Cinnamon desktop.

  • Stock.Refresh() now should refresh all application pictures associated with the application theme.

  • Update icons and add new ones.

SwitchButton

  • Keep color hue when transitioning between selected and normal background color.

TabPanel

  • Clicking on a tab button now gives it the focus.

  • Changing the CloseButton property now correctly updates the layout.

  • The tab close button is tiny now.

TableView

  • Columns automatic width is now a bit larger to support inner padding of TextBox control.

ToolPanel

  • Use the new _DefaultText multicontainer constant.

  • Fix animation and layout.

Wizard

  • Unset the AutoResize property on wizard title label, it breaks with GTK+ components.

Miscellaneous

  • Update translations.

  • Update control icons.

  • Update documentation.

GB.FORM.DIALOG

File dialog

  • Propagate the AutoExt property to the FileChooser.

  • Do not check for file existence. It is now done in the FileChooser control.

  • Set focus on FontChooser control at opening.

Password dialog

  • Do not raise the dialog.

  • The password dialog is not stacked above other windows anymore, but just raised on opening.

Miscellaneous

  • Update Chinese translation.

GB.FORM.EDITOR

  • Line numbers do not overlap expanders anymore when text editor has custom highlighting.

  • Draw the shadow after the margin again.

  • Margin is not transparent anymore.

  • Draw the matching brace under the cursor with an underline.

  • Use the standard background and foreground colors by default.

  • Do not stop keyboard event if the key is not handled by the editor.

  • Keep displaying the cursor and the matching braces when the editor does not have the focus.

  • Do not optimize character layouting for non-ASCII text, so that lines including non-western characters are displayed correctly whatever the font.

  • The matching character under the cursor does not blink anymore.

  • Use FAST on two heavy functions.

  • Fix shortcuts.

  • Avoid some computations when nothing is folded.

  • Access theme style properties directly.

  • Use the new FindSorted() array method in a function.

  • Highlight lines the later as possible: when the Text or SelectedText property is read, or when the line is drawn.

  • Highlight immediately if the highlighting mode is known to not rewrite its text.

  • Checking the Limit property of a line now highlights until that line.

  • Current line is now highlighted with a light margin color.

  • Text wrapping now adapts its frequency to the computer speed.

  • Preview folding synchronization is now instantaneous.

  • GetSelectedLines() is a new method that return an array of the selected lines.

  • SaveCursor() now disables indent check and matching braces check until RestoreCursor() is called.

  • Line number color is now correct when LineOffset property is used.

  • Fix TextEditor.Styles interface.

  • Add documentation.

  • Fix GetIndent() method.

  • Fix TextEditor[].Paint() method.

  • Fix multi-line marker painting.

  • Highlight current tabulation context with a thinner line using the margin limit color.

  • Scroll to the top left when reinitializing the view.

  • Alternate color is a bit less transparent.

  • Support for shell highlighting mode.

  • Redraw the TextEditor icon.

  • Middle click paste is now ignored if the editor is read-only.

  • Put TextEditor control in the View group.

  • Setting line flags does not reset the highlighting anymore.

GB.FORM.MDI

Toolbar

  • Configuration of toolbars having the same key but on different forms are now distinct.

  • Layout is a new synonymous property of Settings.

  • Don't hide separators followed by an expander.

  • It can now replace any container similar to "Panel" in the IDE form editor.

  • Don't use a specific dark theme background pattern for toolbars in configuration mode

  • Update the layout later on resize, to help GTK+ components.

Miscellaneous

  • Update Chinese translation.

GB.FORM.PRINT

  • Update Chinese translation.

  • Clicking of the selected view mode button now does not unselect it anymore.

  • Use the new DocumentView interface.

  • Use the new stock icons for preview page layout buttons.

GB.FORM.STOCK

  • Add many new icons and update old ones.

GB.FORM.TERMINAL

  • Take padding into account when computing the number of visible lines.

  • Support for ESC [ 3 J sequence (clear screen).

  • Paste UTF-8 into terminal.

  • Added WindowCommands boolean property to enable window manipulations escape sequences.

  • Printing an incorrect UTF-8 string does not lock the output anymore.

  • The padding is now correctly taking into account when computing the terminal character width.

  • The last lines are now automatically relayouted when the width of the terminal changes.

  • SelectedText and Text property now take into account line wrapping.

  • Text property correctly takes into account line wrapping.

  • ShowLink is a new property that toggles link management.

  • Click is a new event raised when a link has been clicked.

  • Link is a new property that returns an object for managing links.

  • Link is a new event raised during mouse move for detecting links.

  • Support for file URL drops.

  • Do not handle the Drop event if the user has defined its own event handler.

  • Bell is a new event that is raised when the terminal bells, and that overrides the default behaviour if handled.

  • Handle terminal bell with a screen flash.

  • Use a bit more readable yellow colors.

  • Update Chinese translation.

  • Update French translation.

  • Disable paste and clear menu entries on read-only terminals.

GB.GMP

  • Fix error message of BigInt.ToString().

GB.GSL

  • Add statistic functions through a Stat property added to the Float[] class.

GB.GTK

Animation

  • Animation is a new class that represents an animated image.

Application

  • Fix a memory leak in the Application.Restart property.

  • Setting Application.Font to NULL now resets the default font.

Button

  • Unmapped default or cancel buttons are now ignored.

  • The default and cancel buttons of all embedded forms of the current window are now taken into account.

  • Fix button click animation.

  • Draw buttons the same way as in QT components.

  • Text is not truncated anymore.

  • Disabled button icons are now correctly desaturated.

  • Add minimum size to buttons.

CheckBox

  • CheckBox.Invert is a new property that put the check mark on the other side.

ComboBox

  • Setting the List property does not raise the Click event anymore, like in Qt components.

  • Setting the Index property to -1 does not raise the Click event anymore.

Container

  • Arrange contents only when mapped, as in QT components.

  • Fix containers Indent property.

  • Container children are not incorrectly shown in some cases anymore.

  • FindChild() now takes UserContainer into account.

  • Fix arrangement of containers having the AutoResize property set.

  • Do not crash if expanded widgets change during arrangement.

  • Centered is a new container property that centered its contents. It works for horizontal, vertical and fill arrangement only.

  • Fix a crash occuring if a container loses one of its children while arranging them.

  • Arrangement now behaves almost exactly like in QT components.

Control

  • Make MoveResize() method behave the same way as in QT components.

  • Modifying the Expand property does not trigger an arrangement anymore if the Ignore property is set.

  • Void tooltips do not display anything anymore.

  • Widget tooltips now handle newlines and linefeeds the same way as in Qt.

  • Moving or resizing a control with Ignore property set does not trigger a arrangment anymore.

  • Fix Refresh() method when the update area is specified.

  • Fix Lower() and Raise() methods.

  • Fix an uninitalized internal control flag.

  • Design property has been implemented.

  • When changing the geometry of a control, the move is done before the resize, to get the same behaviour as the Qt components.

  • Reparent() now correctly restores the control position in all cases.

  • Controls initial geometry is now the same as in Qt components.

  • Creating a control with a NULL container now raises an error instead of crashing.

  • Resizing a control now take the minimum size into account.

  • Fix ScreenX and ScreenY properties.

  • Control resize now ignores new width or height if its container constraints it.

  • Fix deferred control deletion.

  • NoTabFocus property now correctly handle proxies.

  • Showing or hiding a control does not trigger a parent arrangement if the Ignore property was set.

  • Initial widget size is always taken into account even if the parent arrange its contents.

  • Hide control before marking it destroyed, otherwise we may arrange an invalid object.

  • Compute control screen coordinates differently because of Wayland.

  • Controls cannot have a zero size anymore. It does not work.

Drag & drop

  • A control being dragged cannot be explicitely destroyed anymore.

  • DragLeave event is now always raised before entering another drop target.

DrawingArea

  • Paint default color is now its foreground color.

Event management

  • Mouse key modifiers properties are now available outside of Mouse event handlers as in Qt components.

  • Make keyboard data available the same way as in Qt components.

  • Handling the Menu event does not prevent the native menus of TextBox and TextArea to popup anymore.

  • Emit keyboard events from the top-level window when no control has the focus.

  • Button grab is now automatically released when a new event loop is started.

  • Keyboard events are now propagated to the parent containers.

  • Mouse.StartX and Mouse.StartY are now always available during mouse events.

  • Workaround the default accelerator management of GTK, so that they are triggered only if no other widget handle the keyboard event.

  • Handle key events before global shortcuts only for GtkEntry and GtkTextView widgets.

  • Fix keyboard event management.

  • Fix management of Enter and Leave events.

  • Lazy initialization of input methods for widgets having none by default.

  • Fix management of default and cancel buttons shortcuts.

  • Do not propagate key events if the target widget has been unrealized.

Focus management

  • Fix focus management so that it behaves like Qt.

  • Handle focus traversal our owns way.

  • Focus navigation now ignore unmapped controls.

  • Do not lose control focus when the control is temporarily hidden because it is too small or being restacked.

  • Ignore internal focus moves that do not target the official active control.

Font management

  • Cache font metrics to speed up some font properties.

  • Font.TextHeight() now works the same way as in Qt components.

  • Compute font height in a way compatible with older versions of Pango.

  • Font size computation takes into account Pango ink rectangle.

  • Font.RichTextWidth() now takes a width optional argument like RichTextHeight().

  • Font.RichTextSize() is a new method that returns the rich text width and height as a rectangle.

  • Font.TextSize() is a new method that returns the text width and height as a rectangle.

  • Support for fonts whose name is made of digits only. In that case, the family name in Font string representation must be enclosed with double quotes.

  • Recompute font height when the Bold or Italic properties change too.

Form

  • Load() now behaves correctly if the static instance is already created.

Frame

  • Remove Frame container, now implemented in Gambas.

Label

  • Remove Label control, now implemented in Gambas.

Menu

  • Shortcuts are now automatically disabled when the menu or one if its parent is disabled.

  • Fix shortcut management.

  • Fix Menu proxy management.

  • Menu Show event now behaves as expected, and allow recreating the menu contents during its event handler.

  • Fix menu shortcuts.

  • Fix management of menus and make them behave like in Qt components.

  • Checking or unchecking a menu does not raise the Click event anymore.

  • Menu having children cannot be checked anymore.

  • Icons of disabled menus are now desaturated.

  • Fix crash when clicking on a top-level menu.

  • Menu Click event is now delayed, like in Qt components.

  • Fix menu layouting routine.

  • Fix menu icons that were sometimes too small.

  • Fix how menus are destroyed.

  • Hidden menu bar is now moved in the negative horizontal coordinates so that a click on the CSD title bar does not see it.

  • Radio menu are correctly managed now.

  • Fix menu deferred deletion.

MovieBox

  • Remove MovieBox control, now implemented in Gambas.

Painting

  • Drawing a null rich text string does not crash anymore.

  • Fix management of Paint.Font. Underline and Strikeout properties are now correctly taken into account.

  • Save drawing context when running a style method.

  • Style drawing routines now work correctly on UserControl.

Panel

  • Arrangement is now correctly triggered when the background color is set.

Printer

  • Setting the OutputFile property to a void string does not toggle printing to file anymore.

RadioButton

  • RadioButton.Invert is a new property that put the radio button on the other side.

Rich text management

  • Allow the value of markup attributes not to be embedded between quotes in rich text.

  • Fix conversion to pango markup language when a rich text markup has spaces after the < character.

  • <p> in rich text is replaced by a single line break.

  • Replace <code> by <tt> in rich text.

  • Rich text with attribute values containing spaces does not crash anymore.

Screen management

  • Screen.ResolutionX and Screen.ResolutionY are two new properties that return the resolution of a screen.

Separator

  • Remove Separator control, now implemented in Gambas

ScrollBar

  • Orientation is a new property that allows to define the orientation explicitly.

  • Add orientation constants.

  • Fix ScrollBar resize behavior.

  • Fix declaration of ScrollBar.DefaultSize property.

Slider

  • Max property works correctly again.

  • Orientation is a new property that allows to define the orientation explicitly.

  • Fix Slider resize behavior.

  • Add minimum size.

TabStrip

  • Fix client area size computation.

TextArea

  • Fix minimum size when scrollbars are disabled.

  • TextArea now have no minimum size if they have no scrollbars.

TextBox

  • Add minimum size.

TextLabel

  • Remove TextLabel control, now implemented in Gambas.

ToolButton

  • Do not steal the focus anymore when clicked.

  • Draw button the same way as in QT components.

UserControl

  • UserControl now can paint itself through a UserControl_Draw method.

  • Use the new GB_FUNCTION structure to optimize support of UserControl_* pseudo event handlers.

  • Support for the Change pseudo event.

  • Call UserControl_Font() handler when the UserControl font changes.

Window

  • Lower() and Raise() methods now work as expected.

  • MinWidth and MinHeight are two new properties that allow to define the minimum size of a resizable window.

  • Windows can now take focus by default.

  • Close management is now similar to QT components' one.

  • Fix an uninitialized flag in gmainwindow.cpp.

  • Popup the same window several times now works correctly.

  • Fix keyboard and mouse grab when opening a popup.

  • Fix popup management.

  • Fix spurious resizing of embedded windows having menus.

  • Deleting a window now raises the Close event immediately, like in Qt components.

  • Fix explicit destroying of non-persistent windows.

  • Window.Resize() now works on non-resizable windows.

  • The size of a window is now always the size of its contents, without the decorations.

  • Fix Window.Background property behavior.

  • Resizable utility windows now have a minimum size like QT components.

  • Closing a window during the Open event now works like in Qt.

  • Do not post window resize events, because the window can be destroyed in the meantime.

  • Fix management of default minimum size of modal and utility windows.

  • Window layout management now should work both on X11 and Wayland.

  • Fix enumeration of the controls of a specific window.

  • When opening a modal dialog or a popup while a mouse button is pressed, generate a fake MouseUp event because the true one is eaten by the modal dialog or the popup.

Miscellaneous

  • Get rid of glib deprecation warnings.

  • Get rid of the g_typ gControl variable.

  • Watcher objects now correctly follow controls that recreate their inner widget.

  • React to widget theme change.

  • Remove deprecated Stock class.

  • Get rid of unused code of native message boxes.

  • Desktop.Platform is a new property that returns the current platform in use.

  • Fix GTK+ warnings and errors when freeing stuff before the GUI is initialized.

  • Request SIGCHLD handler check because of glib.

  • WAIT instruction now processes all pending events.

GB.GTK3

Animation

  • Animation is a new class that represents an animated image.

Application

  • Fix a memory leak in the Application.Restart property.

  • Setting Application.Font to NULL now resets the default font.

  • Setting Application.Font is now almost instantaneous.

Button

  • Unmapped default or cancel buttons are now ignored.

  • The default and cancel buttons of all embedded forms of the current window are now taken into account.

  • Fix button click animation.

  • Draw buttons the same way as in QT components.

  • Text is not truncated anymore.

  • Disabled button icons are now correctly desaturated.

  • Add minimum size to buttons.

CheckBox

  • CheckBox.Invert is a new property that put the check mark on the other side.

Color management

  • Fix button, tooltip and link system colors and support more themes.

ComboBox

  • Setting the List property does not raise the Click event anymore, like in Qt components.

  • Setting the Index property to -1 does not raise the Click event anymore.

  • Use GTK+ internals to make Border, Foreground and Background properties work as expected.

  • No padding in borderless combobox.

  • Fix mouse cursor handling.

  • Don't hide background if borderless.

  • Read-only combo-boxes do not have inner vertical padding anymore.

  • Editable combo-boxes having a small width now behave correctly.

Container

  • Arrange contents only when mapped, as in QT components.

  • Fix containers Indent property.

  • Container children are not incorrectly shown in some cases anymore.

  • Fix arrangement of containers having the AutoResize property set.

  • Do not crash if expanded widgets change during arrangement.

  • Centered is a new container property that centered its contents. It works for horizontal, vertical and fill arrangement only.

  • Fix a crash occuring if a container loses one of its children while arranging them.

  • Fix ClientWidth and ClientHeight computation.

  • Arrangement now behaves almost exactly like in QT components.

Control

  • Make MoveResize() method behave the same way as in QT components.

  • Modifying the Expand property does not trigger an arrangement anymore if the Ignore property is set.

  • Void tooltips do not display anything anymore.

  • Widget tooltips now handle newlines and linefeeds the same way as in Qt.

  • Moving or resizing a control with Ignore property set does not trigger a arrangment anymore.

  • Fix Refresh() method when the update area is specified.

  • Fix Lower() and Raise() methods.

  • Fix an uninitalized internal control flag.

  • The Design property has been implemented.

  • When changing the geometry of a control, the move is done before the resize, to get the same behaviour as the Qt components.

  • Reparent() correctly moves the control if the parent is not changed.

  • Controls initial geometry is now the same as in Qt components.

  • Creating a control with a NULL container now raises an error instead of crashing.

  • Resizing a control now take the minimum size into account.

  • Fix ScreenX and ScreenY properties.

  • Control resize now ignores new width or height if its container constraints it.

  • Fix deferred control deletion.

  • The NoTabFocus property now correctly handle proxies.

  • Showing or hiding a control does not trigger a parent arrangement if the Ignore property was set.

  • Initial widget size is always taken into account even if the parent arrange its contents.

  • Hide control before marking it destroyed, otherwise we may arrange an invalid object.

  • Compute control screen coordinates differently because of Wayland.

  • Allow other GTK+3 components to patch their widget.

  • Fix GTK+3 get_preferred_height_and_baseline_for_width overriding.

  • Define the minimum size of controls better, so that less GTK+ spurious warnings are emitted.

  • Resize() now correctly arranges parent even if the control was too small to be visible.

  • Controls cannot have a zero size anymore. It does not work.

Drag & drop

  • A control being dragged cannot be explicitely destroyed anymore.

  • DragLeave event is now always raised before entering another drop target.

DrawingArea

  • Paint default color is now its foreground color.

  • Drawing is clipped by the control border now.

  • Correctly restore drawing context when an error is raised during the Draw event handler.

Event management

  • Mouse key modifiers properties are now available outside of Mouse event handlers as in Qt components.

  • Make keyboard data available the same way as in Qt components.

  • Handling the Menu event does not prevent the native menus of TextBox and TextArea to popup anymore.

  • Emit keyboard events from the top-level window when no control has the focus.

  • Button grab is now automatically released when a new event loop is started.

  • Keyboard events are now propagated to the parent containers.

  • Mouse.StartX and Mouse.StartY are now always available during mouse events.

  • Workaround the default accelerator management of GTK, so that they are triggered only if no other widget handle the keyboard event.

  • Handle key events before global shortcuts only for GtkEntry and GtkTextView widgets.

  • Fix keyboard event management.

  • Fix management of Enter and Leave events.

  • Lazy initialization of input methods for widgets having none by default.

  • Fix management of default and cancel buttons shortcuts.

  • Do not propagate key events if the target widget has been unrealized.

Focus management

  • Fix focus management so that it behaves like Qt.

  • Handle focus traversal our owns way.

  • Focus navigation now ignore unmapped controls.

  • Don't hide TextBox or TextArea internal window if the control has the focus.

  • Do not lose control focus when the control is temporarily hidden because it is too small or being restacked.

  • Ignore internal focus moves that do not target the official active control.

Font management

  • Cache font metrics to speed up some font properties.

  • Font.TextHeight() now works the same way as in Qt components.

  • Compute font height in a way compatible with older versions of Pango.

  • Font size computation takes into account Pango ink rectangle.

  • Font.RichTextWidth() now takes a width optional argument like RichTextHeight().

  • Font.RichTextSize() is a new method that returns the rich text width and height as a rectangle.

  • Font.TextSize() is a new method that returns the text width and height as a rectangle.

  • Support for fonts whose name is made of digits only. In that case, the family name in Font string representation must be enclosed with double quotes.

  • Recompute font height when the Bold or Italic properties change too.

  • Implement a workaround for Pango not being able to display the Gambas font correctly.

Form

  • Load() now behaves correctly if the static instance is already created.

Frame

  • Remove Frame container, now implemented in Gambas.

Label

  • Remove Label control, now implemented in Gambas.

Menu

  • Shortcuts are now automatically disabled when the menu or one if its parent is disabled.

  • Fix shortcut management.

  • Fix Menu proxy management.

  • Menu Show event now behaves as expected, and allow recreating the menu contents during its event handler.

  • Fix menu shortcuts.

  • Fix management of menus and make them behave like in Qt components.

  • Checking or unchecking a menu does not raise the Click event anymore.

  • Menu having children cannot be checked anymore.

  • Icons of disabled menus are now desaturated.

  • Fix crash when clicking on a top-level menu.

  • Menu Click event is now delayed, like in Qt components.

  • Fix menu layouting routine.

  • Fix menu icons that were sometimes too small.

  • Fix how menus are destroyed.

  • Hidden menu bar is now moved in the negative horizontal coordinates so that a click on the CSD title bar does not see it.

  • Radio menu are correctly managed now.

  • Fix menu deferred deletion.

  • Fix indicator drawing.

  • New menu positioning functions are available since GTK+ 3.22 only.

  • Menu.Popup() does not print GTK+ warnings anymore when run outside of an event handler.

  • Fix popup menus that didn't pop up with some widget themes like Yaru.

  • Fix Menu.Popup() on Wayland.

MovieBox

  • Remove MovieBox control, now implemented in Gambas.

Painting

  • Drawing a null rich text string does not crash anymore.

  • Fix management of Paint.Font. Underline and Strikeout properties are now correctly taken into account.

  • Save drawing context when running a style method.

  • Fix Style.PaintCheck() and Style.PaintOption().

Platform management

  • Add support for specific platforms: X11 & Wayland.

  • Desktop.Platform is a new property that returns the current platform in use.

  • The GB_GUI_PLATFORM environment variable allows to override the default platform.

  • Do not include wayland specific includes if GDK_WINDOWING_WAYLAND is not defined.

Printer

  • Setting OutputFile property to a void string does not toggle printing to file anymore.

RadioButton

  • RadioButton.Invert is a new property that put the radio button on the other side.

Rich text management

  • Allow the value of markup attributes not to be embedded between quotes in rich text.

  • Fix conversion to pango markup language when a rich text markup has spaces after the < character.

  • <p> in rich text is replaced by a single line break.

  • Replace <code> by <tt> in rich text.

  • Rich text with attribute values containing spaces does not crash anymore.

Screen management

  • Screen.ResolutionX and Screen.ResolutionY are two new properties that return the resolution of a screen.

Separator

  • Remove Separator control, now implemented in Gambas

ScrollBar

  • Orientation is a new property that allows to define the orientation explicitly.

  • Add orientation constants.

  • Fix ScrollBar resize behavior.

  • Fix declaration of ScrollBar.DefaultSize property.

Slider

  • Max property works correctly again.

  • Orientation is a new property that allows to define the orientation explicitly.

  • Fix Slider resize behavior.

  • Add minimum size.

Style sheet management

  • Globally override minimum size of buttons in CSS stylesheet.

  • Update control style sheet only if the control is visible.

  • Don't use CSS for the background color of controls that do not need it.

  • Make stylesheet global, so that styling sub-node work everytime.

  • Don't use css stylesheets on containers having no child that draw nothing by themselves.

TabStrip

  • Fix client area size computation.

  • Fix TabStrip control.

  • Workaround GTK+ layouting errors on TabStrip.

TextArea

  • Fix minimum size when scrollbars are disabled.

  • TextArea now have no minimum size if they have no scrollbars.

  • Fix Font and Background properties.

  • Fix mouse cursor handling.

TextBox

  • Add minimum size.

  • Fix Border property.

  • Fix mouse cursor handling.

  • Don't hide background if borderless.

  • Minimum size is correctly updated when the Border property changes.

TextLabel

  • Remove TextLabel control, now implemented in Gambas.

ToolButton

  • Do not steal the focus anymore when clicked.

  • Draw button the same way as in QT components.

UserControl

  • UserControl now can paint itself through a UserControl_Draw method.

  • Use the new GB_FUNCTION structure to optimize support of UserControl_* pseudo event handlers.

  • Support for the Change pseudo event.

  • Call UserControl_Font() handler when the UserControl font changes.

Window

  • Lower() and Raise() methods now work as expected.

  • MinWidth and MinHeight are two new properties that allow to define the minimum size of a resizable window.

  • Windows can now take focus by default.

  • Close management is now similar to QT components' one.

  • Fix an uninitialized flag in gmainwindow.cpp.

  • Popup the same window several times now works correctly.

  • Fix keyboard and mouse grab when opening a popup.

  • Fix popup management.

  • Fix spurious resizing of embedded windows having menus.

  • Deleting a window now raises the Close event immediately, like in Qt components.

  • Fix explicit destroying of non-persistent windows.

  • The size of a window is now always the size of its contents, without the decorations.

  • Fix Window.Background property behavior.

  • Resizable utility windows now have a minimum size like QT components.

  • Closing a window during the Open event now works like in Qt.

  • Do not post window resize events, because the window can be destroyed in the meantime.

  • Fix management of default minimum size of modal and utility windows.

  • Window layout management now should work both on X11 and Wayland.

  • Fix enumeration of the controls of a specific window.

  • When opening a modal dialog or a popup while a mouse button is pressed, generate a fake MouseUp event because the true one is eaten by the modal dialog or the popup.

  • Embedded windows now correctly raise their Resize event.

  • Support for client-side decorations.

  • Popups now work on Wayland compositors.

Miscellaneous

  • Get rid of the g_typ gControl variable.

  • Watcher objects now correctly follow controls that recreate their inner widget.

  • React to widget theme change.

  • Remove deprecated Stock class.

  • Get rid of unused code of native message boxes.

  • Fix GTK+ warnings and errors when freeing stuff before the GUI is initialized.

  • Request SIGCHLD handler check because of glib.

  • WAIT instruction now processes all pending events.

  • Get rid of many deprecated GTK+ API (not all yet).

  • Fix compilation on GTK+ < 3.22.

  • Fix a buffer overflow that makes the component crash on aarch64.

  • Enhance gb.gtk3 API for child components like gb.gtk3.webview.

GB.GTK3.WAYLAND

  • This is the GTK+3 Wayland platform component.

GB.GTK3.WEBVIEW

  • New web browser component based on WebKitGTK.

GB.GTK3.X11

  • This is the GTK+3 X11 platform component.

GB.GUI

  • Enhance debugging messages.

  • Use $XDG_CURRENT_DESKTOP before $KDE_FULL_SESSION to know if we are running KDE.

  • Do not crash if $XDG_CURRENT_DESKTOP is not defined.

GB.GUI.BASE

Action

  • Setting action tooltip does not crash anymore on menus.

ColumnView

  • Items have now a Tag property.

Frame

  • Frame is now implemented in Gambas.

  • Add an Alignment property for the relative position of the title and the frame top border.

  • Draw border differently to avoir differences in coordinates rounding between Qt and Cairo.

GridView

  • Columns have now a Tag property.

  • Cells have now a Tag property.

  • Do not raise the MouseDown event twice.

HSplit

  • This control is now deprecated. Use Splitter instead.

IconView

  • Items have now a Tag property.

  • The renaming widget does not propagate the ESC key anymore.

Label

  • This control is now implemented in Gambas.

ListBox

  • Click event is now raised on the next event loop.

  • Setting the Index property with an incorrect value now raise an explicit error.

ListView

  • Items have now a Tag property.

  • The left part of the items is now clickable as expected.

Message

  • Text is not vertically truncated anymore when using a GTK+ component.

  • Rework the message box. Copying the message is now done through a popup menu.

  • Focus on the cancel button by default.

  • The message can only be closed by clicking on a button.

  • Provide default buttons if none are specified.

  • Default buttons are now replaced as soon as at least one button is specified.

  • Test a new look for the message boxes.

  • Add the title to the message box, and make it movable.

  • ColoredButtons is a new property that defines if the buttons should be colored or not.

  • Style is a new property that defines the message box style. At the moment, "default" and "flat" are supported.

  • Message.Warning() now has only one "OK" default button.

MovieBox

  • This control is now implemented in Gambas.

Paint

  • Paint.TrimText() and Paint.TrimRichText() now return a null string if the specified maximum width is too low.

  • Paint.TrimRichText() now returns the text without ... if the maximum width is big enough.

  • Paint.TrimRichText() now returns a void string if the maximum width is negative or null.

  • Paint.TrimRichText() now correctly trim void markups.

  • Paint.TrimText() now trims at each character.

  • Use Font.TextHeight() instead of Font.Height in Paint.TrimText() and Paint.TrimRichText(), because some fonts can have a negative leading for some sizes in Qt!

Picture

  • Picture.Load() was overriden so that it can deal with "icon:/" paths, but without cache, dark theme or right-to-left support like Picture static array accessor.

  • Picture.Refresh() reload all application pictures coming from the stock icons.

  • Picture.Stretch() is a new button that stretches a picture by internally converting it to an Image first.

PictureBox

  • Reimplement the deprecated Cached property.

  • Use the new UserControl Draw pseudo-event.

ProgressBar

  • Use the new UserControl pseudo-events instead of an embedded DrawingArea.

ScrollArea

  • Delete shadows differently to better support GTK+.

  • Remove some useless lines in scrollbar management.

  • Add a NoAnimation property to disable the scrolling animation explicitly.

  • Use the new ScrollBar.Orientation property.

  • Clip children for GTK+2 by forcing control background.

  • Always defer the contents size computation to the next event loop.

Separator

  • Use the new painting pseudo-event of UserControl.

SpinBox

  • The Background property now works as expected.

  • Start the auto-repeat timer before raising the Change event.

  • Draw the arrows at the same vertical position whether there is a border or not.

  • If ReadOnly is set, the SpinBox is grayed out, and the arrows are hidden.

  • ShowSign is a new property that adds the "+" character to the positive numbers.

Splitter

  • Splitter is a new container that replaces HSplit and VSplit. Its orientation is defined by its Arrangement property.

TextLabel

  • This control is now implemented in Gambas.

TreeView

  • Renaming an item automatically cancel any other pending item renaming.

  • Eat the key shortcuts used: F2, +, - and SPACE.

  • Modifying the font of an item now correctly updates its height.

  • Items have now a Tag property.

  • TreeView item height is now writable.

  • Fix generation of MouseDown events.

  • Collapsing an item does not scroll the view to the current selected item anymore.

  • TreeView item has a new Depth property that returns the depth of the item.

  • Indent is a new property that returns the indent width.

  • Draw is a new event that allows to override default tree item drawing.

  • Removing an item or clearing the view now correctly update the list of selected items.

VSplit

  • This control is now deprecated. Use Splitter instead.

Miscellaneous

  • Update Chinese translation.

  • Shortcut.FromKey() now uses an internal cache.

  • Shortcut.FromKey() now does not duplicate a modifier key with its modifier prefix (i.e. it does not return "Shift+ShiftKey" anymore but just "ShiftKey").

  • Add some documentation.

  • Hide an apparently unused public function.

GB.GUI.OPENGL

  • Fix debugging messages.

GB.GUI.QT

  • Enhance debugging messages.

  • Use $XDG_CURRENT_DESKTOP before $KDE_FULL_SESSION to know if we are running KDE.

  • Do not crash if $XDG_CURRENT_DESKTOP is not defined.

GB.GUI.QT.OPENGL

  • Fix error message choice.

GB.GUI.QT.WEBKIT

  • Fix error message choice.

GB.GUI.TRAYICON

  • The TrayIcon.Picture property kind is now Picture:NoCache so that the trayicon icon is not modified when the current theme is dark.

  • Support for the GB_GUI_TRAYICON_NO_DBUS environment variable.

GB.GUI.WEBVIEW

  • New QT/GTK+ web browser switcher component.

  • Fix error message choice.

GB.IMAGE

  • Add more color constants.

GB.JIT

  • Use -march=native -mtune=native to compile JIT translated code.

  • Don't crash if no compiler is found, but just tell the interpreter.

  • Fix the default NULL value for objects. JIT functions returning NULL objects as default value do not crash anymore.

  • Make a project icon.

GB.MAP

  • Map: Force Layers reloading when the Refresh method is called.

  • _MapShape: Remove reloading when removing a shape object.

  • Add a new Header property to _MapTile Class to set up the HTTP client header.

GB.MARKDOWN

  • Markdown.LinkAnchors is a new property that insert anchors for each line of the markdown text, but not in the index.

GB.MEDIA.FORM

  • MediaView: Ensure that the video DrawingArea has its own window on GTK+ components.

  • Use a 64x64 control icon.

GB.NCURSES

  • Screen.Suspend and Screen.Resume are two new methods which allow to temporarily leave ncurses mode, restoring the original tty settings, and to come back, restoring ncurses's tty settings and screen content.

GB.NET

SerialPort

  • Add a Clear() method that clears the buffers specified in its argument. Use gb.Read for the input buffer and gb.Write for the output buffer.

Socket

  • Automatically create an internal timer to handle connection timeout.

  • Net.ConnectionTimeout is a new status constant indicating a connection timeout.

UdpSocket

  • Add multicast support.

  • Writing does not crash anymore if the target is not defined.

  • Fix declaration of SourcePath property.

GB.NET.SMTP

  • Do not encode newline characters as newlines (!) in quoted encoding. See RFC 2049 at the end of page #10.

GB.PDF

  • Fix poppler version detection.

GB.POPPLER

  • PdfDocument: Antialiasing, TextAntialiasing and TextHinting are three new properties that define rendering hints. All are TRUE by default, except TextHinting.

  • Use poppler-cpp for rendering, and poppler-glib for the other features.

GB.QT4

Animation

  • Animation is a new class that represents an animated image.

CheckBox

  • CheckBox.Invert is a new property that put the check mark on the other side.

ComboBox

  • PlaceHolder property does not crash anymore on read-only ComboBox.

Container

  • Fix containers Indent property.

  • Fix foreground color inheritance through containers.

  • Do not crash if expanded widgets change during arrangement.

  • Centered is a new container property that centered its contents. It works for horizontal, vertical and fill arrangement only.

Control

  • Showing a control with Ignore property set does not trigger a parent arrangement anymore.

  • Rework Design property management so that it works better.

  • Rework support of Background and Foreground colors.

  • Control resize now ignores new width or height if its container constraints it.

  • Initial widget size is always taken into account even if the parent arrange its contents.

  • Avoid arrangements in some cases.

  • Ignore resize when the parent container has Fill arrangement.

DrawingArea

  • Paint default color is now its foreground color.

Font management

  • Fix Font.TextHeight implementation that checked incorrectly for optional arguments.

  • Font.RichTextWidth() now takes a width optional argument like RichTextHeight().

  • Font.RichTextSize() is a new method that returns the rich text width and height as a rectangle.

  • Font.TextSize() is a new method that returns the text width and height as a rectangle.

  • Support for fonts whose name is made of digits only. In that case, the family name in Font string representation must be enclosed with double quotes.

  • Font.Height now uses the same metrics as Font.TextHeight().

Frame

  • Remove Frame control, now implemented in Gambas.

Label

  • Remove Label control, now implemented in Gambas.

Menu

  • Never export the menu bar through DBus, it crashes on Mate.

MovieBox

  • Remove MovieBox control, now implemented in Gambas.

Painting

  • Disabled state is now correctly taken into account by style drawing methods.

  • Fix raised borders for some styles.

  • All Paint text routines now workaround the font assignment bug.

  • Border drawing routine now preserves paint color.

RadioButton

  • RadioButton.Invert is a new property that put the radio button on the other side.

Screen

  • Screen.ResolutionX and Screen.ResolutionY are two new properties that return the resolution of a screen.

ScrollBar

  • Orientation is a new property that allows to define the orientation explicitly.

  • Add orientation constants.

Separator

  • Remove Separator control, now implemented in Gambas.

Slider

  • Orientation is a new property that allows to define the orientation explicitly.

TabStrip

  • TabStrip should not crash anymore with an undefined symbol.

TextArea

  • Setting background and foreground colors now should work correctly in all cases.

TextLabel

  • Remove TextLabel control, now implemented in Gambas.

UserControl

  • UserControl now can paint itself through a UserControl_Draw method.

  • Use the new GB_FUNCTION structure to optimize support of UserControl_* pseudo event handlers.

  • Support for the Change pseudo event.

  • Call UserControl_Font() handler when the UserControl font changes.

Window

  • MinWidth and MinHeight are two new properties that allow to define the minimum size of a resizable window.

  • Explicitly hidden startup forms do not popup at startup anymore.

  • Fix window x11 properties initialization.

  • Fix management of default minimum size of modal and utility windows.

  • When opening a modal dialog or a popup while a mouse button is pressed, generate a fake MouseUp event because the true one is eaten by the modal dialog or the popup.

Miscellaneous

  • Remove some useless X11-related includes.

  • Desktop.Platform is a new property that returns the current platform (always "x11").

  • Try to fix compilation on alpine.

  • Set application desktop file name to the application name.

  • Don't set the QDialog flag on modal dialogs. It makes Qt dizzy, and can even freeze Gnome on Wayland.

  • Don't leak a control if we quit between a MouseDown and a MouseUp event.

GB.QT4.WEBVIEW

  • New web browser component based on QtWebKit.

GB.QT5

Animation

  • Animation is a new class that represents an animated image.

CheckBox

  • CheckBox.Invert is a new property that put the check mark on the other side.

ComboBox

  • PlaceHolder property does not crash anymore on read-only ComboBox.

Container

  • Fix containers Indent property.

  • Fix foreground color inheritance through containers.

  • Do not crash if expanded widgets change during arrangement.

  • Centered is a new container property that centered its contents. It works for horizontal, vertical and fill arrangement only.

Control

  • Showing a control with Ignore property set does not trigger a parent arrangement anymore.

  • Rework Design property management so that it works better.

  • Rework support of Background and Foreground colors.

  • Control resize now ignores new width or height if its container constraints it.

  • Initial widget size is always taken into account even if the parent arrange its contents.

  • Avoid arrangements in some cases.

  • Ignore resize when the parent container has Fill arrangement.

DrawingArea

  • Paint default color is now its foreground color.

Font management

  • Fix Font.TextHeight implementation that checked incorrectly for optional arguments.

  • Font.RichTextWidth() now takes a width optional argument like RichTextHeight().

  • Font.RichTextSize() is a new method that returns the rich text width and height as a rectangle.

  • Font.TextSize() is a new method that returns the text width and height as a rectangle.

  • Support for fonts whose name is made of digits only. In that case, the family name in Font string representation must be enclosed with double quotes.

  • Font.Height now uses the same metrics as Font.TextHeight().

Frame

  • Remove Frame control, now implemented in Gambas.

Label

  • Remove Label control, now implemented in Gambas.

Menu

  • Never export the menu bar through DBus, it crashes on Mate.

MovieBox

  • Remove MovieBox control, now implemented in Gambas.

Painting

  • Disabled state is now correctly taken into account by style drawing methods.

  • Fix raised borders for some styles.

  • All Paint text routines now workaround the font assignment bug.

  • Border drawing routine now preserves paint color.

Platform management

  • Support for platform components.

  • Remove direct X11 dependencies.

  • Remove some useless X11-related includes.

  • Desktop.Platform is a new property that returns the current platform.

  • Better support of popups when run on Wayland.

  • The GB_GUI_PLATFORM environment variable allows to override the default platform.

  • Don't try to activate windows on Wayland, it does not work.

  • The default resolution on Wayland is 96 DPI instead of 72 DPI.

RadioButton

  • RadioButton.Invert is a new property that put the radio button on the other side.

Screen

  • Screen.ResolutionX and Screen.ResolutionY are two new properties that return the resolution of a screen.

ScrollBar

  • Orientation is a new property that allows to define the orientation explicitly.

  • Add orientation constants.

Separator

  • Remove Separator control, now implemented in Gambas.

Slider

  • Orientation is a new property that allows to define the orientation explicitly.

TabStrip

  • TabStrip should not crash anymore with an undefined symbol.

TextArea

  • Setting background and foreground colors now should work correctly in all cases.

TextLabel

  • Remove TextLabel control, now implemented in Gambas.

UserControl

  • UserControl now can paint itself through a UserControl_Draw method.

  • Use the new GB_FUNCTION structure to optimize support of UserControl_* pseudo event handlers.

  • Support for the Change pseudo event.

  • Call UserControl_Font() handler when the UserControl font changes.

Window

  • MinWidth and MinHeight are two new properties that allow to define the minimum size of a resizable window.

  • Explicitly hidden startup forms do not popup at startup anymore.

  • Fix management of default minimum size of modal and utility windows.

  • When opening a modal dialog or a popup while a mouse button is pressed, generate a fake MouseUp event because the true one is eaten by the modal dialog or the popup.

  • Window properties are correctly set on Wayland now.

Miscellaneous

  • Try to fix compilation on alpine.

  • Set application desktop file name to the application name.

  • Don't set the QDialog flag on modal dialogs. It makes Qt dizzy, and can even freeze Gnome on Wayland.

  • Don't leak a control if we quit between a MouseDown and a MouseUp event.

  • Breeze and oxygen theme fixes should not crash anymore.

  • Do not crash when quitting if the GUI has not been initialized.

  • Fix compilation on Qt < 5.7.

GB.QT5.WAYLAND

  • This is the QT5 Wayland platform component.

GB.QT5.WEBVIEW

  • New web browser component based on QtWebEngine.

GB.QT5.X11

  • This is the QT5 X11 platform component.

  • Do not use a deprecated API to grab the screen.

GB.REPORT

  • Rename a duplicated class that prevented the project to be opened.

GB.REPORT2

Report

  • Use the new _DefaultText multicontainer constant.

  • Report.Print() now works correctly whatever the toolkit or the printer.

  • New Path property that allows to define the output file.

  • Report now does not inherit ReportSection anymore.

ReportView

  • Use the new DocumentView interface.

  • Checking or unchecking the grayscale checkbox now correctly refreshes the preview.

  • Use the new stock icons for page layout buttons.

Miscellaneous

  • Update Chinese translation.

  • Redraw the ReportSvgImage control icon.

GB.SCANNER

  • Remove empty entry in list.

  • Better progress tracking.

  • Use pnm format instead of jpeg to avoid libjpeg problems.

GB.SDL2

  • By default, the SDL2 wayland video driver is used if the WAYLAND_DISPLAY environment variable exists.

  • The GB_GUI_PLATFORM environment variable allows to select the platform between x11 or wayland.

GB.SETTINGS

  • Remove a debugging message.

  • Settings files are now saved in a more reliable way, without locking, using the MOVE … KILL instruction.

  • Add documentation.

GB.TERM.FORM

  • Update Chinese translation.

  • Make that experimental component exclude any other GUI component.

GB.TEST

  • Remove the marking of some string as translatable which are just formats, like "&1: &2".

  • Fix a typo in an help comment.

  • Ignore case of method names of test fixtures.

  • Improve diagnostics of Approximate and RelativeApproximate assertions, showing the original values too.

  • Report Error.Where on error and crash.

  • Test.BailOut() now raises an error to quit later, instead of quitting immediately. That avoids circular references warning.

  • Use dot instead of colon in TAP output for "testmodule.testmethod".

  • Prints line numbers in TAP output so that the IDE can create clickable links to the code.

GB.UTIL

  • Update Chinese translation.

  • Add a new rule to String.ToPhonetic() to deal with "mpt" and "mt" patterns.

  • Add documentation.

GB.UTIL.WEB

  • Url.Query.Remove() is a new method for removing an argument from the query of an URL.

GB.WEB

  • Response.SetCookie() now sets the SameSite cookie property to Lax as Firefox wants.

  • Store the cookie path inside the session, and use it when removing the cookie.

  • Add "SameSite=Lax" when removing the cookie.

  • Decode + as spaces in the query part of forms using application/x-www-form-urlencoded mimetype.

  • Fix a possible crash in Session.Abandon when using sqlite sessions.

GB.WEB.FEED

  • Update Chinese translation.

GB.WEB.FORM

  • Update Chinese translation.

GB.WEB.GUI

WebComboBox

  • Use the onclick event instead of onselect, so that initial click on first list element is detected.

  • Setting the text on editable comboboxes correctly sets the Index property and raises the Click event.

  • Read-only combo-boxes have now the same height as the editable ones.

WebDateBox

  • Set a default width according to the DateTime property.

  • Fix date formatting.

WebForm

  • Custom form javascript files are now different for each form.

  • AddHeader() is a new method that allows to add a custom page header.

WebMenu

  • Use the busy sign when waiting for the Click event answer.

Miscellaneous

  • Log is now disabled by default. Setting the GB_WEB_GUI_DEBUG environment variable to "1" enables it.

  • Update Chinese translation.

  • Popups now use absolute position, so that they follow the document scrolling.

  • Scroll view to make popup windows visible as much as possible.

  • The component is now stable but not terminated.

  • Add some color constants.