Gambas 3.9.0

What's new?

There are hundreds of new features, bug fixes and optimization in this new version.

The main feature is gb.web.form, a new component that allows to make the GUI of your web application from the Gambas IDE. How does it work in a few words?

Almost everything is done on the server side. The user browser is mainly used as an enhanced graphical terminal running the less JavaScript as possible. Events and page refresh flow between the browser and the server through XML HTTP requests.

And here is a few excerpt of the other new features:

  • gb.form.terminal, a new component providing a full-features terminal emulation.

  • A new IDE output console based on the previous component.

  • A new and better project argument list interface.

  • Project creation is now based on project templates. Custom templates can be defined.

  • New library management system.

  • The Expression class is now inheritable and allows to customize the interpreter evaluator.

  • FileView and DirView controls automatically refresh themselves if your project uses the gb.inotify component.

  • TextEditor now can display thin vertical lines to emphasize indentation.

  • Menu can have a proxy, i.e. pop up the children of another menu.

  • Paint.StretchImage() is a new method that scales an image to fit a rectangle, keeping the image proportions.

  • gb.net.smtp component support PLAIN and CRAM-MD5 authentication.

Changelog

CONFIGURATION

  • Add explicit dependencies on x11 and gl pkg-config packages.

  • Detect the fstatat() system function.

  • Fix gambas server page mimetype file.

  • Force symbolic creation in /usr/bin.

  • Forgot to put VERSION file in the source package file list.

  • New breeze-like icons for mimetypes.

  • New Gambas icons.

  • Redraw many control icons.

  • Register mimetype icon with correct sizes.

  • Search libffi in more directories to find it on CentOS.

  • Support for Haiku operating system.

  • Uninstall correctly remove templates and XML appdata file.

  • Update Gambas 3 appdata XML file.

  • Better trust the interpreter instead of the compiler for getting the full version with the SVN revision.

DEVELOPMENT ENVIRONMENT

Source code editor

  • "F2" now correctly finds the definition of classes used as method or array.

  • Automatic completion of event handlers now automatically inserts their signature.

  • Automatic comment insertion is now done in one step to prevent syntax highlighting from occurring inside the new comment line.

  • Code beautyfier now does its job entirely.

  • Code beautyfier now keeps the cursor position.

  • Compress and uncompress functions now correctly update the procedure list.

  • Correctly generate signature of methods having optional arguments with initializers.

  • Code formating when saving does not prevent modification flag to work anymore.

  • Code formatting is faster now by working on a temporary line buffer.

  • Comment, uncomment, indent and unindent now work as expected if the text has been selected from bottom to top.

  • Contextual help (F2) on classes belonging to the project works correctly now.

  • Editor color themes better adapt to desktop dark themes.

  • Completion popup now opens at the right position on wrapped lines.

  • Do not mark a file as unsaved when refactoring is triggered by saving this same file.

  • Fix some default themes so that it is more usable inverted.

  • Reloading a class or module file now keep the breakpoints.

  • Reloading a file now correctly resets the procedure combo.

  • Reset class symbol list everytime its source file is modified.

  • Procedure list correctly centers the editor on the target procedure.

  • Automatically remove console output temporary files.

Automatic completion

  • Don't display functions whose name ends with a $ in automatic completion if there is another function having the same name without the $ character.

  • Hitting ESC while current method signature is displayed only hides the signature now.

  • Make font smaller in automatic completion help.

  • Fix a very old bug in automatic completion where hitting backspace sometimes deleted two characters.

Text editor

  • Fix compression of CSS files.

  • Show compression message inside the editor.

  • Try to detect functions declared inside an object for javascript files.

Form editor

  • ComboBox and ListBox List properties, and all other string array properties, are now correctly reset when cleared.

  • Component containers arrangement is now based on the symbol names of the Arrange class, not on the symbol values.

  • Components can now use proxy controls to be displayed in the form editor even if they don't depend on a GUI component.

  • CoordBox is now correctly not localized.

  • CoordBox.DefaultUnit is a new property that allows to define the default unit.

  • CoordBox.Units is a new property that allows to define the units list.

  • Correctly detect controls that do not need a real parent container when saving a form.

  • Correctly detect virtual controls that need a parent or not.

  • Fix behaviour of shortcut text properties having ampersands inside.

  • Fix handling of color properties with alpha value.

  • Fix handling of common properties of unknown controls.

  • Fix image selection when the allowed image root directory is the .public special directory.

  • Fix list property editor layout.

  • Fix virtual controls management like HttpClient, FtpClient, and so on.

  • Correctly handle color properties with an alpha value.

  • Decide that a control has a parent according to its constructor, not to its Virtual state.

  • Don't initialize properties of controls having a "_DrawWith" property. I don't know why I did that, but anyway it prevents Undo/Redo from working correctly.

  • Draw toolbar icons of project exported controls larger, so that they are more readable.

  • If a translation string ends with three dots, don't put them in the translation.

  • Make "Tooltip" property (with a lower "t") translatable.

  • Property help now works offline.

  • Renaming a selected control does not crash anymore.

  • Set the Design property of controls the later as possible. That way it is propagated to inner controls that are created after because of a control property.

  • Setting common properties (Text, Background, Foreground) of unknown controls should work correctly again now.

  • Some icons were redone, with their dark theme version.

  • Support for automatic arrangement.

  • Support for custom representation of component controls. This representation is a GUI control class named "". For example, WebformWebMenu is the IDE control class that will represent a WebMenu of a Webform.

  • Text property is now applied for "draw with" controls.

  • The event handlers menu now works correctly in all cases.

  • Image selection dialog has now more options, and can choose image inside the ".public" directory.

  • Image selection now depends on form family.

  • Add an "invert" button in the List property dialog.

  • Double-clicking on read-only properties does not open the text property edit dialog anymore.

  • Fix text property edit dialog.

  • Reverting a form now reverts the class file too.

  • The _HiddenControls property of form controls now can hide controls from any other components.

  • Use the true family name as class name for the root control of a form.

  • Using a form whose name starts with an underscore is now possible.

  • Allow each family to declare the base class of controls. This is used by the property editor.

  • Centralize family-specific sources in dedicated folders.

WebForm form support

  • Custom drawing for WebButton controls.

  • Specific drawing of WebMenu and WebMenuItem controls.

  • Add "vw", "vh", "vmin" and "vmax" unities.

Report form support

  • Make the report editor using the Auto arrangement system like for webforms.

  • Don't crash when the image of a ReportImage or ReportSvgImage cannot be loaded. Display a big red broken icon instead.

  • Fix report border chooser dialog.

Database editor

  • A little redesign of the window top toolbar.

  • Add "select all" and "unselect all" buttons to the DataView.

  • Moving index fiels now correctly marks the connection as modified.

  • Request editor is now selectable when QT4 is in use.

  • Update layout.

  • Correctly save CSV file path in data export and table import dialogs.

  • Now you can initialize a new database from the template of another connection of the project.

  • Redraw some database editor icons.

  • Renaming a table does not delete it anymore if the renaming fails for any reason.

  • Larger connection properties dialog.

Image editor

  • Buttons for line cap style, line join style and fill rule.

  • Clip pasted image.

  • Display the target frame when moving the pasted image.

  • Fix crashes with selections having no extents.

  • Fix drawing of ghost line tool.

  • Fix magnet detection.

  • Fix mouse wheel behaviour when zooming.

  • Fix pen and eraser tool drawing.

  • Fix rectangle and ellipse selection when they are done backwards.

  • Fix the zero-width line drawing.

  • Information is now displayed on top of the image.

  • Many bug fixes in draw, erase, and line tool.

  • Pasted images are not one pixel too big anymore.

  • Rectangle and ellipse tools now have half-pixel precision.

  • Set operations on selections (union, intersection, difference and exclusive or).

  • The ellipse tool now works correctly when the ellipse is drawn from its center.

  • The information label is correctly refreshed when zooming in or zooming out.

  • The property panel got a close button.

Debugger

  • A button that opens the terminal output content inside a new IDE editor tab, so that you can search inside, or do anything you want.

  • Some design fixes of the debug panel.

  • The project arguments is now selectable with a popup menu.

  • When displaying the contents of a collection, the Key property is saved and restored so that the debugged program is not altered.

  • Display a message when the debugged program is stopped by CTRL+C or the SIGTERM signal.

  • Give focus to the terminal when the program is started.

  • Hide the debug panel when the console is put in floating mode.

  • If GB_GUI is not explicitly defined, remove it from the environment of the debugged process, so that it does not inherit the one defined by the IDE gb.gui.qt component.

  • Show console before inserting a message inside.

  • The run button has a pop-up menu button only if at least one argument list has been defined in the project properties.

  • Use terminal emulator control from gb.form.terminal as console output.

  • You cannot search into the terminal output directly anymore.

Packager

  • Support for gb.gui.qt and gb.gui.qt.webkit generic components.

  • Correctly handle descriptions having newlines inside.

  • Extra directories are now correctly defined in Debian packages.

  • Fix autotools packager.

  • Fix debian packages so that lintian likes them better.

  • Support for new internal library naming scheme.

  • Unify debian standards version reported inside packages.

  • Use debhelper version 9 requirement everywhere.

  • The label of the check-box that adds the vendor prefix to the package names is clearer now.

  • The packager now can create a package for a component project whatever the name of the project. It will internally prefix the project name with the vendor name if needed.

  • Now package names are normalized for each distribution. Now all non alphanumeric characters are replaced by an hyphen, but this can be changed independently of the distribution if needed.

  • Support for a vendor prefix shortcut, that is used in the package name instead of the vendor full name.

  • Support for new library management. Autotools packages are not supported yet.

  • Support for PNG icons up to 1024x1024 pixels in Debian & Ubuntu packages.

Project view

  • A child class is now displayed in the project tree under its parent class only if they are in the same directory. Consequently, dragging a child class to any directory is now possible.

  • Allow project directories to be moved.

  • Cleaning a project directory now deletes valgrind output files.

  • Cutting & pasting source files now works as expected.

  • Opening the startup class moves to the Main function only the first time now.

  • Renaming an exported class triggers an automatic rename of the class inside all project forms.

Project properties dialog

  • Fix the library "Compatible until" option of the project property dialog.

  • New library management.

  • Add two more environment variable definitions.

  • Fix display of not found libraries.

  • New project arguments interface.

Search dialog

  • Add a button in the search list panel that closes it.

  • Fix "replace all" in current procedure.

  • The search result list should be correctly hidden and shown when being refreshed now.

Profiler dialog

  • Profile windows should not crash anymore when displaying percentage values.

Option dialog

  • Add an indentation level for .Begin/.End functions in the automatic code formatter.

  • Add an option to invert an editor theme so that it is usable with a GUI dark theme.

  • Change the order of panels.

  • Layout the "space(s)" label so that it trims its contents if its translation is too wide.

  • New option to toggle indent drawing in editors.

Color chooser dialog

  • Color chooser does not crash anymore when the project does not use any GUI component.

Translation dialog

  • Fix translations that end with a newline whereas the original string does not.

Software farm dialog

  • Add a button for displaying "my" software, i.e. software having the same vendor as the one defined in the option dialog.

  • Add a button for displaying software from the same vendor as the current project.

  • Allow to ignore missing components when installing a software.

  • Display the software full download count (all versions combined).

  • Farm account passwords should be correctly remembered now.

  • Software download events are correctly ignored when the wizard is moved back to the software list.

  • Remove sort by vote.

Create project dialog

  • New project creation dialog based on template projects located in /usr/share/gambas3/template and in ~/.local/share/gambas3/template. These are default directories, they may change according to your gambas installation prefix and home directory configuration.

  • Fix the height of some labels in the create project dialog.

Open project dialog

  • Fix a crash when using the recent list several times.

  • Recent Projects use the saved sort order now.

File creation dialog

  • Redesign file creation dialog.

File import dialog

  • Put file import in its own dialog.

Welcome dialog

  • Do not display the SVN revision anymore in the welcome dialog. Only in the system information.

  • Fix the welcome dialog layout.

  • Replace the remove menu entry, that was located in the welcome dialog only, by a remove icon present in all recent project lists.

About dialog

  • Mouse wheel now scrolls the text in both direction.

  • Faster about dialog based on a triple image cache.

  • Fix author list width in about dialog.

System information dialog

  • System information is now always anonymous.

  • Display SQLite library version in the system information dialog.

Documentation

  • Correctly set url of help browser in all cases.

  • Don't display the wiki language combo-box in the help browser.

  • Stopping an help view method now always hides its spinner.

  • New class CDocumentation that allows to handle distinct sets of component metadata. That way, offline documentation does not interact with automatic completion and method signature popups anymore.

  • Reset Wiki metadata only when having to load a component that is not yet loaded.

Translations

  • Corrected some typos in Spanish translation

  • Dutch translations updated

  • Fix translation of compiler error messages.

  • French translation updated.

  • German translation updated.

  • Spanish translation updated.

  • Updated error translations.

  • Brazilian Portuguese translation updated.

Subversion support

  • When adding every new file to the subversion repository, the .gambas directory is now correctly ignored.

Miscellaneous

  • "--cleanup" is a new command-line option to clean a project directory.

  • Better HighDPI support.

  • Add a large toolbox icon size, for HighDPI screens.

  • Add dark theme versions of some icons.

  • New pastel highlight theme made by Antonio Orefice.

  • New zen highlight theme.

  • Allow the short command for chromium.

  • Compress calc() CSS function correctly.

  • Correctly catch errors when reloading a file.

  • Creating a project from a template having no icon now works correctly.

  • Dark version of drawing icons.

  • Do not try to lock files that are symbolic links. They are always locked.

  • Don't crash if the VERSION file is incorrect. Display an error message instead.

  • Enhance Xfce detection in system report script

  • Fix crash dialog layout.

  • Fix project icon folder generation.

  • More dark theme icons.

  • New breeze default project icon.

  • New component status icons.

  • New Gambas icons.

  • New icons for networking controls.

  • Project exported control icons are thiner.

  • Remove an image link in the italian tooltips.

  • Support for lxterminal works as much as possible.

  • The editor pop-up menu is now accessible from the top menu-bar through an "Edit" menu.

  • Use the file stock icon at correct size when making a project file icon.

  • Don't define an initial position to the tips window.

WIKI CGI SCRIPT

  • Accounts are now managed by the bugtracker.

  • Add cache headers to the responses.

  • Automatic generation of IDE dependencies.

  • Black & white colors and layout redesign.

  • Fix and enhance automatic generation of Gambas application package dependencies.

  • Hall of fame is now generated from the wiki.

  • Registration is now managed by the bugtracker.

  • Style for news date with a white background.

  • Updated Brazilian Portuguese translations

  • A command-line option to generate offline help.

  • A few style sheet fixes.

  • Automatic conversion of old example syntax to the use of new highlighted code sections.

  • Support for :. ] ? and :. ] ? sections.

  • Automatically convert examples to the :. ] ?] sequence.

  • The @classes special command now detect the class descriptions in non-english languages correctly.

INTERPRETER

  • "../xxx" now refers to a file located in the parent archive, not necessarily the main project archive. "../../xxx" refers to the grand-parent archive, and so on. A component written in Gambas that receives a relative path is supposed to prefix it with "../" if he wants to access it.

  • _ready() is a new special method that is called when an object construction is completely finished.

  • A little optimization on routine string argument extraction.

  • Analyzing objects a method or a property applies to is faster now.

  • Application.Dir is correctly declared now. Consequently, it will work with JIT compiler.

  • Array allocation incrementation now cannot be larger then 256 slots.

  • Array.Resize() now correctly raises an error if its argument is negative.

  • As soon as the terminal size is read on any stream with the previous properties, the SIGWINCH signal is watched, and the Application_Resize() public method of the startup class is called each time this signal is catched, meaning that the terminal has been resized.

  • Case insensitive comparison is now coherent whether natural comparison is specified or not.

  • Close a buffered stream even if fclose() fails. Temporary fix.

  • Collection access is faster now.

  • Collection methods now always update the Key property, being called normally or from the debugger.

  • Collection.Default is a new property that allows to define the default value returned by a collection when a key has no value. Note that assigning the default value does not clear the key. You have to explicitly assign NULL for that.

  • Component.FindFromPath() is a new method that returns the name of the component a relative path belongs to.

  • Conversions to Boolean, from and to Variant are faster now.

  • Correctly detect error when closing a process stream.

  • Correctly detect too large arrays.

  • Correctly handle the current component interpreter variable when an error occurs.

  • Correctly load optional exported classes at component loading.

  • DateDiff() correctly returns zero when asking for the number of days between two timestamps having the same date.

  • Breakpoints now work correctly when some global variables are declared after a function.

  • Displaying a dynamic variable in a static context does not crash anymore.

  • Detect when automatic conversion is useless in arithmetic and comparison operators.

  • Dir() and RDir() are now 10-30% faster by using fstatat() and assuming that directories with just two hard links have no child directories (each sub-directory having one hard-link to its parent directory through the ".." entry).

  • Don't browse temporary directory at end if no temporary file has been used.

  • Don't raise the write callback associated with a watched file descriptor if the read callback has disabled it.

  • Ensure a better hash key seed for hash tables.

  • Ensure better entropy when initializing pseudo-random number generator.

  • File.IsHidden() is a new static method that returns if a path is hidden, i.e. if its filename or one of its directory components starts with a dot.

  • File.IsRelative() is a new method that returns if a file is relative, i.e. if it does not starts with / or ~.

  • Fix gambas.h header for new version of gcc.

  • Fix a crash on one error message thrown incorrectly.

  • Fix a crash when trying twice accessing a collection without the good number of arguments.

  • Fix a possible crash in String.Code().

  • Fix a possible crash when removing an element from an enumerated collection.

  • Fix a possible misuse of kill() when calling Process.Kill().

  • Fix a stack mismatch leading to a crash in Eval() when an "Unknown symbol" error occurs.

  • Fix DateDiff() day comparison when comparing two dates with different times.

  • Fix File.IsHidden() method for paths having "." or ".." element inside.

  • Fix multi-dimensional arrays size check.

  • Fix the GB.Every() API that does not crash anymore.

  • Fix thousand separator for locales like norwegian that return an UTF-8 non-breaking space. Replace it by a normal space.

  • Fix Variant to Boolean conversion.

  • Force inlining of functions in symbol tables routines.

  • GB.GetArrayType() is a new API that returns the datatype of the elements of an array class.

  • GB.SubstString() API now can take a void substitution string. It returns NULL instead of doing a segfault. Consequently, RegExp.Replace() from gb.pcre can take a null replace string without crashing.

  • If the startup class defines an Application_Read() or an Application_Resize() event handler, then the standard input stream is attached to it with the "Application" event name, so that these event handlers are used. Otherwise, the standard input stream must be attached and watched manually.

  • Ignore EBADF errors when closing a stream. It means that the underlying file descriptor has already been closed.

  • Ignore EINPROGRESS and EAGAIN error codes when closing a file descriptor.

  • Libraries are now searched in the ~/.local/share/gambas3/lib directory even if we are not in debugging mode.

  • Libraries are also searched in the current directory without version or vendor, for backward-compatibility.

  • Library specific path can be relative now. It is then relative to the project executable path.

  • LINE INPUT and INPUT are faster now.

  • New library management.

  • New routine to compute the localized time/date formats and separators.

  • Now raise an error when a stream cannot be closed, instead of silently ignoring it.

  • Object.Raise() now works correctly with events having arguments.

  • Object.Type(), Object.Class() and Object.Is() now work with invalid objects.

  • Optimize a bit the inequality comparison operators.

  • Optimize access to objects whose class is "simple", i.e. without parent, children, special check method, and not virtual.

  • Prevent the use of seed 0 for the random-number generator, by replacing it by -1 if Randomize 0 is requested.

  • Process.CloseInput() is a new method that explicitly closes the process input, as if you send a CTRL+D from the shell.

  • Relative paths beginning with ".../" always refer to files stored in the main project archive.

  • Release classes having an array class if that array class has no instance.

  • Remove an unused method in table symbol implementation.

  • Remove the redefinition of NULL constant in C++ sources.

  • Shell$() does not try to convert into current locale anymore.

  • Some optimization in native array accessors.

  • Stream.IsTerm is a new property that returns if a stream is a terminal.

  • Stream.Term.Echo is a new property that allows to enable or disable the terminal echo mode.

  • Stream.Term.FlowControl is a new property that allows to set or retrieve if flow control is enabled on a terminal stream.

  • Stream.Term.Resize() is a new method that resizes a terminal.

  • Stream.Term.Width and Stream.Term.Height are two new properties that return the size of the terminal associated with the stream, if any.

  • Subroutine table is faster to access now.

  • Subst$() now does not crash anymore when its result is a void string.

  • Support for custom expression evaluators.

  • Task now ends with by calling _exit() instead of exit(). Because exit() calls the terminator of each loaded shared libraries, and that sometimes crashes.

  • The debugger now sends the current key when enumerating collection keys.

  • The error backtrace is now reset only when raising a new error. Consequently, the information is now kept when an error is propagated.

  • The Stream class now can raise a Resize event. Only the standard input stream (File.In) can raise it.

  • Timer.Restart() is a new method that stops and starts again a timer.

  • The Timer constructor now takes the delay as optional parameter. And if that delay is specified, the timer is automatically started.

  • Val() correctly detect dates now, when the date or the time separator is a space character.

  • Week() now works correctly outside of UTC.

  • When searching a relative path inside an archive, ignore trailing slashes: "foo/bar/" and "/foo/bar//" are now the same as "foo/bar".

COMPILER

  • Compiler is now compiled with -O3 optimizations.

  • Compiling syntax trees is faster now.

  • Correctly set .startup file owner.

  • Initial support for expression datatype analyze. Some new errors are raised at compilation time. The datatype analyzer is rougher than the IDE one because it is local to the compile class.

  • New library management.

  • Optional exported classes are now correctly inserted into *.list files.

  • Remove the call to _load() method in form constructors.

  • Rename the internal class initialization method from $load to @load, so that the valid identifier $load can be freely used by the user.

  • Reserved words built-in symbol table is faster now.

  • Support for webforms.

  • Symbol table search is a bit faster.

  • Syntax errors in constant declarations now give more detailed messages.

  • Take into account the "Use VERSION file" project option to compute the actual version in the .startup file.

  • Trim the VERSION file before inserting into the ".startup" file.

ARCHIVER

  • Better verbose mode.

BENCHMARKS

  • Add a new string benchmark.

  • Do less iterations in benchmarks to get the result faster.

  • Do less repeats in the string benchmark.

  • Fix sort.pl bench.

  • Update the Gambas version of mandelbrot and polynom benchmarks.

FARM SERVER

  • Return the full download count of softwares.

GB.COMPRESS.ZLIB

  • Uncompress.String(): Detect gzip format.

GB.CRYPT

  • Add <unistd.h> include to fix a warning on FreeBSD.

GB.DB

  • Connections are now always searched in the main project archive.

  • Default values are now correctly taken into account by database templates.

  • Fix a memory leak in blob handling when using a PostgreSQL database.

  • Result in creation mode works again.

  • Support for "forward only" Result.

  • Take case-sensitive databases like postgresql into account in index fields.

GB.DB.FORM

  • Correctly define the default size of controls.

  • DataView: Allow selection unless the current record is a new record.

  • Fix the queries requesting the data after the 256th entry.

  • New icon for DataSource control.

  • The application busy state is now correctly reset when an SQL error occurs.

GB.DB.MYSQL

  • Remove useless set autocommit at each transaction. Why that?

  • TINY(1) field are now correctly converted into Gambas booleans in all cases.

  • Use START TRANSACTION instead of BEGIN.

  • Use the MySQL documentation trick to make the difference between a blob field and a text field. This should work far better than using the "max_length" value returned by the MySQL API that seems to randomly change between MySQL versions.

GB.DB.ODBC

  • Allow the Connection Host and User properties to be NULL.

  • Allow the Connection.Host property to be a full ODBC connection string.

  • Better way to get record count, by zxWarce.

  • Clean-up a bit the query_fill() function.

  • Display the error returned by ODBC, by zxWarce.

  • Don't crash when trying to open a database if the host is void.

  • Internal query routine is now similar to other database drivers. DB.Debug is taken into account, and prints all queries sent, and the number of rows returned.

  • Rewrite result allocation.

  • Some other little fixes.

  • Support for "forward only" query result.

GB.DB.POSTGRESQL

  • Don't send 00-00-0000 for date/time values whose year is zero. Just send the time to the PostgreSQL server.

  • Gambas date/time values without date is now stored as the minimum possible date that PostgreSQL accepts, 4713-01-01 BC.

  • Imbricated transactions are now allowed, by using savepoints.

GB.DB.SQLITE2

  • Listing databases without specifying the host does not crash anymore.

GB.DB.SQLITE3

  • Fix a possible uninitialized allocation of columns names.

  • Fix debug message printed when DB.Debug is set.

  • Handle double quotes in table schemas, when detecting auto-increment fields.

  • Interpret unknown SQL datatypes as "String" instead of using garbage.

  • Listing databases without specifying the host does not crash anymore.

GB.DBUS

  • Correctly marshall arrays of classes (for example, String[][]).

  • DBus.IsRegistered() is a new method that returns if a specific DBusObject has been registered to a bus.

  • The application now registers to the DBus bus with its process id added to its name.

  • DBus.Unique is a new property that sets if the application should be unique on the DBus bus. If set, then the process id is not added to the name when registering.

  • Fix memory leak in array marshalling.

  • Fix some memory leaks when using DBusObject and DBusVariant in a method call or a reply.

  • If DBus.Unique is set, then registering the application a second time raises an error.

  • Replace hyphens by dots in normalized interface names. But allow them in application names (as well as underscores).

  • Replace hyphens by dots in the entire interface names.

  • The message observer of a DBusObject may disappear while processing a message. Take that into account.

GB.DBUS.TRAYICON

  • Add support for the XAyatanaLabel property. It actually returns the TrayIcon Text property.

  • Correctly export menus that are not visible.

  • Deleting a TrayIcon now unregisters it when Unity-like indicator protocol is in use.

  • New breeze default tray icon.

  • Remove debugging messages.

  • Support for Cinnamon. Note that the Cinnamon system tray does not send the click events specified by the protocol. Consequently, you get no Click, MiddleClick and Scroll events!

  • Toggle menus triggered from the trayicon menu correctly raise the Click event

  • The Tag property is now correctly implemented.

  • Fix Unity indicator unregistration in TrayIcon.Delete() method.

GB.DEBUG

  • Fix profiler error messages.

GB.DESKTOP

  • Desktop.OpenTerminal() should work correctly on Cinammon now. It uses xterm if no other terminal program is found.

  • Desktop.RunAsRoot() has been implemented without using a XDG script that does not exist anymore.

  • Fix detection of KDE4 and KDE5 desktops.

  • Support for Cinnamon

  • Update xdg-utils scripts to the last version (1.1.1).

  • Use the same desktop detection algorithm than GUI components.

GB.DESKTOP.X11

  • Do not crash when some desktop properties are not defined by the window manager.

GB.EVAL

  • Now lines of any length can be highlighted.

  • You can now inheriting the Expression class to create a custom expression evaluator. You have to reimplement three methods: IsSubr(), that returns if a Gambas subroutine is allowed; IsIdentifier() that returns if a specific identifier is known; GetValue() that returns the value of an identifier. All other methods you add to the class become your specific subroutine, provided that you allow it in the IsIdentifier() method.

GB.EVAL.HIGHLIGHT

  • CSS highlighter: Support for @media directive.

  • CSS highlighter: More CSS properties

  • CSS highlighter: Add missing symbol in css highlighting.

  • CSS highlighter: Add some missing CSS keywords.

  • Javascript highlighter: Take all space characters into account.

  • Javascript highlighter: Try to detect functions declared inside objects.

  • Don't use the Color class.

  • Remove dependencies on GUI components.

  • TextHighlighter.ToHTML() does not draw procedure separations anymore.

  • TextHighlighter: Comment is a new flag that tells if a ln highlighted line is only a comment.

GB.FORM

  • ButtonBox: Dark theme version of default select icon.

  • ColorChooser: Less space between color value text boxes and their label.

  • ColorChooser: Use a different layout so that the control is usable with GTK+3.

  • Completion: Editor property is now writable.

  • Completion: Support for TextArea editor.

  • DirView: Delay the view refresh when a watch event is received.

  • DirView: Disable file watches when the control is hidden.

  • DirView: Enable/disable file watches on Show/Hide events.

  • DirView: Remove debugging messages.

  • Dutch translations updated.

  • File bookmark editor: Correctly save current bookmark when using "Up" or "Down" button.

  • FileChooser: ShowHidden property is correctly restored in all cases now.

  • FileProperties is now correctly refreshed when its Path changes.

  • FileView: Enable/disable file watches on Show/Hide events.

  • FileView: Preview refresh optimization.

  • Fix "linux" stock icon.

  • Fix stock icon templates.

  • If gb.inotify component is loaded, then FileView and DirView will use it to automatically refresh when something changes on the file system.

  • InputBox: Fix layout.

  • ListEditor: Add keyboard arrows shortcuts to move across the list.

  • ListEditor: Editor is a new property that returns the underlying text editor.

  • ListEditor: The text editor is now the proxy of the control.

  • MaskBox now raises the Filter event with a character as argument. If this event is stopped, then the character is not allowed. By default all characters are allowed.

  • MaskBox.Filter is a new property that takes a LIKE regular expression describing the allowed characters. By default all characters are allowed.

  • MaskBox: Use unicode large spaces instead of ASCII small spaces.

  • MenuButton controls now automatically pop up when one of their sibling is already opened.

  • MenuButton: If no arrow is visible, and if no menu is defined, then the MenuButton raises the Click event.

  • MenuButton: Take foreground color into account correctly.

  • MenuButton: Clip text so that arrow is always clearly visible.

  • MenuButton: Take the Design property into account correctly.

  • MessageView default colors are now default text background and foreground.

  • MessageView: Custom background color is now taken into account.

  • MessageView: Ignore a message if its contents is the same as the currently displayed message.

  • MessageView: Successive messages work correctly now.

  • Print each loaded stock icon when Stock.Debug is set.

  • Setting an hidden path to a DirChooser or FileChooser automatically toggles the ShowHidden property if needed.

  • SidePanel: The Hide event is now raised after the SidePanel has been actually hidden.

  • SpinBar: Add the Border property.

  • SpinBar: Draw SpinBar border using style.

  • SpinBar: Fix many layout problems.

  • SpinBar: Handle font changes.

  • SpinBar: Take Enabled and Design properties into account.

  • Stock icon default sizes ("small", "medium"...) are now proportional to Desktop.Scale by steps of 8 pixels. This is for HiDPI support.

  • Stock: Correctly detect KDE5 icon theme.

  • Stock: Fix breeze icon theme support.

  • Stock: Fix how theme-specific icons are handled. They are now tried on every possible size and other non theme-specific icons are ignored.

  • Stock: Support for Trinity desktop.

  • TableView: Raise a new Hide event when the editor is hidden.

  • TabPanel: Clicking with the middle mouse button on a tab button now closes it.

  • The Stock class does not use the Picture cache anymore. It is useless as normally the Stock class is accessed from the Picture[] method.

  • Use Desktop.Type to get the current desktop.

  • ValueBox: Setting the Type property does not hide the control contents anymore.

  • Wizard BeforeChange event can be cancelled now.

  • Wizard: Add Update() method to redraw the Wizard

GB.FORM.DIALOG

  • Dialog.Key is a new property that allows to define the sub-key used for storing dialog settings.

  • Dialog.SelectFont() now takes Dialog.Title into account.

GB.FORM.EDITOR

  • CTRL+ENTER does not crash anymore if there is nothing to fold or unfold.

  • Don't crash while deleting selection.

  • Don't raise Cursor event if we are between calls to Begin / End or during an undo or redo process.

  • Never jump to the beginning of the line when clicking on the text.

  • Refresh only the concerned lines when the selection changes.

  • "None" and "Custom" highlighting types are correctly interpreted now.

  • Correctly draw the first procedure limit.

  • CursorAt() is a new method that returns the cursor screen position from a line and a column.

  • Deleting one collapsed line correctly expands it and does not crash anymore.

  • Do not draw ending spaces on top of the indentation vertical lines.

  • Don't use bold text for displaying cursor information.

  • Don't use image line cache for lines too high.

  • Draw the procedure separator before its previous comments.

  • Each editor has now an internal line image cache to speed up redraws. This image cache is cleared as soon as the editor loses the focus, to save memory, or five seconds after the last redraw.

  • Fix page up and page down cursor moves.

  • Fix tab (t) character printing.

  • Image line cache is now limited by the visible height.

  • Limits of collapsed procedures are correctly drawn now.

  • Load() method now always move the cursor to the beginning, to avoid a possible crash.

  • Only change the contents of a line if the provided new content is different from the current one.

  • Print() modifications are not put in the undo buffer.

  • Reset the cursor position before actually setting the Text property, to avoid a possible crash.

  • SHIFT + PGUP or PGDOWN keys now works as expected.

  • SHIFT key + mouse click now selects text.

  • ShowIndent is a new property that make the editor draw a thin vertical line to emphasize corresponding indentations.

  • Some ANSI codes are taken into account by the Print() method.

  • The cursor position label background is now semi-transparent.

  • The Save() and Reset() methods now cancel any pending Change event.

  • Try to detect if the desktop is remote, and disable all optimizations based on image caches in that case.

  • TextEditor[].Limit correctly returns the real limit state, not the visible one.

  • The line cache is now based on Picture, not on Image.

  • The Margin event is now raised on double click only.

GB.FORM.MDI

  • Correctly read the action pictures in the archive they are declared.

  • Don't load gb.form.mdi action files. What for?

  • Dutch translations updated.

  • Toolbar tries to update the size of its icons when the font changes.

  • Use more granular sizes for stock icons, so that they are not too small for some font sizes.

  • When browsing actions, do not try to load an icon for actions that do not have one.

  • Workspace: Always shows the global close button, even if there is only one tab.

GB.FORM.TERMINAL

  • New component that provides TerminalView, a VT-100 terminal emulator control.

GB.GEOM

  • Move the declaration of alignment constants there.

  • Rect.Stretch() is a new method that stretches a rectangle so that it fits inside another rectangle frame while keeping its proportions.

  • RectF.Stretch() is a new method that stretches a rectangle so that it fits inside another rectangle frame while keeping its proportions.

GB.GTK

  • Assume that the contents of XDG_CURRENT_DESKTOP is the current desktop as soon as other detection methods have failed.

  • Detection of Cinnamon desktop.

  • Button grab is correctly released now when a modal dialog is opened after a button click.

  • Change the name of NewChild event argument.

  • ComboBox: CursorAt() is a new method that returns the cursor screen position from a text position.

  • Control.Reparent() now works as expected when the new Parent inherits UserContainer.

  • Correctly initialize resolution when drawing on a DrawingArea.

  • Fix a uninitialized variable that can lead to a crash when creating a window.

  • Fix a warning on NULL constant use.

  • Fix crashes on desktops not defining some X11 properties.

  • Fix detection of KDE4 and KDE5 desktops in Desktop.Type.

  • Fix detection of XFCE desktop.

  • Fix Image.Rotate() routine.

  • Fix ScrollView ClientWidth and ClientHeight properties.

  • Fix Window Close event signature.

  • Initialize the root window event mask when setting the X11 event filter.

  • Menu.Close() is a new method that hides a popup menu from the screen.

  • Menu.Proxy is a new property that allows a menu to popup the children of another menu.

  • Mouse.ScreenX and Mouse.ScreenY now always query the pointer.

  • Newly opened windows are centered by default, to mimic the gb.qt4 and gb.qt5 behaviour.

  • No GTK+ warning message anymore when a TextArea or TextBox gets the focus using some input methods.

  • Prevent a crash when a non-void TabStrip is deleted.

  • Raise an error now when calling WAIT during a repaint event. This is -not- a good idea that can crash everything.

  • Remove the Picture[] array accessor and the Picture.Flush() method. They are now implemented in the gb.gui.base component.

  • Remove use of g_mem_set_vtable() deprecated Glib API.

  • Remove use of some GtkStatusIcon deprecated functions.

  • Setting PictureBox.Picture to NULL with PictureBox.Stretch set now works as expected.

  • SvgImage.H is new property that is a synonymous of SvgImage.Height.

  • SvgImage.Paint() now takes optional X, Y, Width and Height arguments. These arguments define the target drawing rectangle, and the SVG image will be scaled to fit it.

  • SvgImage.W is new property that is a synonymous of SvgImage.Width.

  • TextArea.Paste() and CTRL+V works correctly now.

  • TextArea: CursorAt() is a new method that returns the cursor screen position from a text position.

  • TextArea: Shortcuts that could modify the text are now disabled if the TextArea is read-only.

  • TextArea: ToPos(), ToColumn() and ToLine() methods work correctly now.

  • TextBox: CursorAt() is a new method that returns the cursor screen position from a text position.

  • The minimum and maximum values of ScrollBar and Slider controls now can be equal, to mimic QT components behaviour.

  • Try to fix popup menu behaviour in X11 TrayIcon context.

  • Use cairo_paint() instead of cairo_fill() when Paint.Operator is not Paint.OperatorOver. Is it a Cairo bug?

  • Utility windows correctly take the focus when shown.

  • When searching for event targets, don't look at controls outside of containers client area.

  • Window now raises a Font event when its font changes.

  • Parent menus correctly destroy its children automatically now.

GB.GTK3

  • Assume that the contents of XDG_CURRENT_DESKTOP is the current desktop as soon as other detection methods have failed.

  • Background and Foreground colors should work as expected now.

  • Background and Foreground colors should work better with most of the controls.

  • Button grab is correctly released now when a modal dialog is opened after a button click.

  • Change the name of NewChild event argument.

  • Checked menus are now drawn correctly with all widget themes.

  • ComboBox: CursorAt() is a new method that returns the cursor screen position from a text position.

  • Control.Reparent() now works as expected when the new Parent inherits UserContainer.

  • Correctly initialize resolution when drawing on a DrawingArea.

  • Don't use gtk_widget_reparent() deprecated function anymore.

  • Fix a uninitialized variable that can lead to a crash when creating a window.

  • Fix a warning on NULL constant use.

  • Fix compilation with GTK+ version < 3.14.

  • Fix crashes on desktops not defining some X11 properties.

  • Fix detection of KDE4 and KDE5 desktops in Desktop.Type.

  • Fix detection of XFCE desktop.

  • Fix Image.Rotate() routine.

  • Fix ScrollView ClientWidth and ClientHeight properties.

  • Detection of Cinnamon desktop.

  • Fix Window Close event signature.

  • Initialize the root window event mask when setting the X11 event filter.

  • Menu.Close() is a new method that hides a popup menu from the screen.

  • Menu.Proxy is a new property that allows a menu to popup the children of another menu.

  • Mouse.ScreenX and Mouse.ScreenY now always query the pointer.

  • Newly opened windows are centered by default, to mimic the gb.qt4 and gb.qt5 behaviour.

  • No GTK+ warning message anymore when a TextArea or TextBox gets the focus using some input methods.

  • Prevent a crash when a non-void TabStrip is deleted.

  • Raise an error now when calling WAIT during a repaint event. This is-not- a good idea that can crash everything.

  • Remove the Picture[] array accessor and the Picture.Flush() method. They are now implemented in the gb.gui.base component.

  • Remove use of g_mem_set_vtable() deprecated Glib API.

  • Remove use of some GtkStatusIcon deprecated functions.

  • ScrollView with a border should not display scrollbars anymore when they are void.

  • Setting PictureBox.Picture to NULL with PictureBox.Stretch set now works as expected.

  • SpinBox: Minimum width is a bit larger now.

  • SvgImage.H is new property that is a synonymous of SvgImage.Height.

  • SvgImage.Paint() now takes optional X, Y, Width and Height arguments. These arguments define the target drawing rectangle, and the SVG image will be scaled to fit it.

  • SvgImage.W is new property that is a synonymous of SvgImage.Width.

  • TextArea.Paste() and CTRL+V works correctly now.

  • TextArea: CursorAt() is a new method that returns the cursor screen position from a text position.

  • TextArea: Shortcuts that could modify the text are now disabled if the TextArea is read-only.

  • TextArea: ToPos(), ToColumn() and ToLine() methods work correctly now.

  • TextBox: CursorAt() is a new method that returns the cursor screen position from a text position.

  • The minimum and maximum values of ScrollBar and Slider controls now can be equal, to mimic QT components behaviour.

  • Use cairo_paint() instead of cairo_fill() when Paint.Operator is not Paint.OperatorOver. Is it a Cairo bug?

  • Using colors with alpha component works correctly now.

  • Utility windows correctly take the focus when shown.

  • When searching for event targets, don't look at controls outside of containers client area.

  • Window now raises a Font event when its font changes.

  • Window.Resizable works correctly now when set to FALSE.

  • Parent menu correctly destroy its children automatically now.

GB.GUI.BASE

  • _Gui._Quit is a new method called by the GUI components during their "quit" hook. At the moment it releases Drag.Icon picture and voids the Picture cache.

  • Add support for dark theme specific icons. An icon named abc-dark.png will be the dark theme version of the abc.png icon.

  • Add support for right-to-left specific icons. For example, if an icon is named abc-ltr.png, then it will be considered as a left-to-right icon, and the abc-rtl.png icon will be used if the current langauge is right-to-left written.

  • Fix behaviour of shortcut text properties having ampersands inside.

  • GridView: Increase the size of the invisible row and column resize handles.

  • GridView: Best row height computation now correctly takes the borders into account.

  • GridView: Don't draw the background if the Background property is set to Color.Transparent.

  • GridView: Newlines in cells with WordWrap property set are now taken into account correctly.

  • GridView: Take Foreground property into account.

  • IconView: Add ScrollX, ScrollY, ScrollWidth, ScrollHeight, ClientWidth and ClientHeight properties.

  • IconView: Add the Scroll() method.

  • IconView: Fix item drawing when in horizontal orientation.

  • Paint.StretchImage() is a new method that scales an image to fit a rectangle, keeping the image proportions.

  • Picture: Use Color[].Luminance on default background color to detect dark themes.

  • Remove support for theme specific icons.

  • ScrollArea: Fix some number roundings in EnsureVisible() method.

  • ScrollArea: Ignore Style.ScrollBarSpacing when layouting scrollbars.

  • The Picture[] array accessor and the Picture.Flush() method are now implemented in that component.

  • TreeView item Clear() method does not crash anymore.

  • TreeView items height padding is now proportional to Desktop.Scale.

  • Use the new Component.FindFromPath() method.

  • Workaround a GTK+ crash. Apparently GTK+ does not like if Control.Lower() is called during an Arrange event handler.

GB.HTTPD

  • The standard error output of CGI scripts is not redirected to the HTTP client anymore, so that the IDE catch debugging messages printed by the DEBUG instruction.

GB.IMAGE

  • Color[].Luminance is a new property that returns the luminance information of a color.

  • Image.Desaturate() now works correctly on image alpha channel.

  • ImageStat() now return the correct dimensions of JPEG images.

GB.INOTIFY

  • Don't pass NULL key and zero length to GB.HashTable.Remove()

  • Don't rely on GB.NewString() to NUL-terminate the string

  • Now you can create as many watches on the same path as you want. Consequently, the Watch[] static array accessor, that returned the watch associated with a path, had to be removed.

  • The flags constants and the Watch.Events property are now associated with the Gambas events, not the internal inotify events.

  • Use GB.StringLength() where possible.

GB.MAP

  • SexToDec now convert float values with a dot.

GB.MARKDOWN

  • Fix generation of "[[ ... ]]" sections.

  • Fix simple table "[[ ... ]]" management.

  • Fix support of "[[ code ... ]]" section.

  • Markdown.Process() is new method that allows to process the contents of a specific "[[ ... ]]" block.

  • Markdown.Reinterpret is a new property to say if the next return of Command() should be reinterpreted as markdown or not. It is True by default for backwards compatibility.

  • Support for code highlighting through the "[[ code <language> ... ]]" block.

GB.MEDIA.FORM

  • Fix some refresh bugs, except when using GTK+3, which still does not like MediaView.

  • MediaView.Duration is a new property that returns the media duration in seconds.

  • MediaView.Position is a new property that returns or sets the media current position in seconds.

GB.NET

  • SerialPort: Correctly release the polling timer when the serial port is closed.

  • ServerSocket: Handle all error codes when listening.

GB.NET.CURL

  • Allow compilation with old versions of libcurl.

  • Closing a CURL stream object does not raise an error anymore. It just does nothing.

  • HttpClient.Head() is a new method to issue a HTTP HEAD request.

GB.NET.SMTP

  • SmtpClient.AddHeader() is a new method to add a custom specific header to the mail.

  • SmtpClient.Authentication is a new property that allows to define the authentication method explicitly.

  • SmtpClient.InReplyTo is a new property that allows to define the In-Reply-To header of the mail. It defines the References header as well with the same value.

  • SmtpClient.MessageId is a new property that allows to define the Message-ID header of the mail.

  • Support for PLAIN and CRAM-MD5 authentications.

GB.OPENAL

  • Fix return value of Al.GetBufferi(), Al.GetSourcei() and Al.GetListeneri().

GB.OPENSSL

  • Clear buffers on stack before passing them to OpenSSL.

  • Forward-compatibility with OpenSSL 1.1 (hopefully) (Bug #958).

  • Terminate return value of .Cipher.Method.Decrypt() properly.

GB.QT4

  • Assume that the contents of XDG_CURRENT_DESKTOP is the current desktop as soon as other detection methods have failed.

  • Breeze widget theme patch to fix its bugs on small TextBox, ComboBox and SpinBox controls.

  • Change the name of NewChild event argument.

  • ComboBox: Assigning zero to the Index property now works correctly in all cases if the ComboBox is editable.

  • ComboBox: CursorAt() is a new method that returns the cursor screen position from a text position.

  • Correctly initialize window properties when showing it in all cases.

  • Desktop.Scale is now updated before window Font events are sent.

  • Disable warning messages when rendering a SVG file.

  • Do nothing when showing or hiding a window, when it is already shown or hidden.

  • Don't send a move request for windows whose initial position is X = 0 and Y = 0, as gb.gtk does.

  • Draw masked windows the same way as in gb.gtk.

  • DrawingArea now can be resized during a paint event as soon as it is not cached.

  • Fix a crash when checking the current hovered widget.

  • Fix crashes on desktops not defining some X11 properties.

  • Fix detection of KDE4 and KDE5 desktops in Desktop.Type.

  • Fix detection of XFCE desktop.

  • Fix Style.FrameWidth and Style.BoxFrameWidth for Breeze style.

  • Cinnamon desktop detection.

  • Fix Window Close event signature.

  • Found a workaround for forcing Oxygen style to draw small push buttons correctly.

  • Menu.Close() is a new method that hides a popup menu from the screen.

  • Menu.Proxy is a new property that allows a menu to popup the children of another menu.

  • Message boxes do not support theme specific icons automatically anymore.

  • Modal dialogs now should be centered in the screen of their parent window, not always in the main screen anymore.

  • Mouse.ScreenX and Mouse.ScreenY now always query the pointer.

  • Paint.Dash correctly accepts an array with one single element.

  • Prevent Container.FindChild() from returning the container it applies to.

  • Raise an error now when calling WAIT during a repaint event. This is -not- a good idea tha can crash everything.

  • Raise an error when calling Screen[] with an incorrect index.

  • Remove the Picture[] array accessor and the Picture.Flush() method. They are now implemented in the gb.gui.base component.

  • Startup forms with Visible property set to FALSE are not shown at startup anymore.

  • Style.Name now returns "Breeze" if the patched breeze style is used.

  • SvgImage.H is new property that is a synonymous of SvgImage.Height.

  • SvgImage.Paint() now takes optional X, Y, Width and Height arguments. These arguments define the target drawing rectangle, and the SVG image will be scaled to fit it.

  • SvgImage.W is new property that is a synonymous of SvgImage.Width.

  • TextArea: CursorAt() is a new method that returns the cursor screen position from a text position.

  • TextArea: ToPos(), ToColumn() and ToLine() methods work correctly now.

  • TextBox: CursorAt() is a new method that returns the cursor screen position from a text position.

  • The parent window of a modal window is correctly set now.

  • Window now raises a Font event when its font changes.

  • Window.Border property works correctly again.

  • Window.TakeFocus works again.

  • Window.Visible property does nothing when set with its current value.

  • Workaround Enter & Leave events QT madness.

  • Workaround a race condition in X11 which prevents window attributes from being correctly set when setting a child DrawingArea's background color right afterwards.

GB.QT5

  • Assume that the contents of XDG_CURRENT_DESKTOP is the current desktop as soon as other detection methods have failed.

  • Breeze widget theme patch to fix its bugs on small TextBox, ComboBox and SpinBox controls.

  • Change the name of NewChild event argument.

  • ComboBox: Assigning zero to the Index property now works correctly in all cases if the ComboBox is editable.

  • ComboBox: CursorAt() is a new method that returns the cursor screen position from a text position.

  • Desktop.Scale is now updated before window Font events are sent.

  • Disable warning messages when rendering a SVG file.

  • Do nothing when showing or hiding a window, when it is already shown or hidden.

  • Don't send a move request for windows whose initial position is X = 0 and Y = 0, as gb.gtk does.

  • Draw masked windows the same way as in gb.gtk.

  • DrawingArea now can be resized during a paint event as soon as it is not cached.

  • Fix a crash when checking the current hovered widget.

  • Fix crashes on desktops not defining some X11 properties.

  • Fix detection of KDE4 and KDE5 desktops in Desktop.Type.

  • Fix detection of XFCE desktop.

  • Fix Style.FrameWidth and Style.BoxFrameWidth for Breeze style.

  • Cinnamon desktop detection.

  • Fix Window Close event signature.

  • Found a workaround for forcing Oxygen style to draw small push buttons correctly.

  • Leave events are now correctly sent after a popup menu has been closed. Workaround a QT5 bug.

  • Menu.Close() is a new method that hides a popup menu from the screen.

  • Menu.Proxy is a new property that allows a menu to popup the children of another menu.

  • Message boxes do not support theme specific icons automatically anymore.

  • Modal dialogs now should be centered in the screen of their parent window, not always in the main screen anymore.

  • Mouse.ScreenX and Mouse.ScreenY now always query the pointer.

  • Paint.Dash correctly accepts an array with one single element.

  • Prevent Container.FindChild() from returning the container it applies to.

  • Quickly apply the Breeze style workarounds to the Oxygen style. Some work is still needed on small buttons. And other places for sure!

  • Raise an error now when calling WAIT during a repaint event. This is -not- a good idea tha can crash everything.

  • Raise an error when calling Screen[] with an incorrect index.

  • Remove Mouse.ScreenX and Mouse.ScreenY optimization based on the contents of a mouse event. Apparently it works with QT4 but not with QT5.

  • Remove the Picture[] array accessor and the Picture.Flush() method. They are now implemented in the gb.gui.base component.

  • Startup forms with Visible property set to FALSE are not shown at startup anymore.

  • Style.Name now returns "Breeze" if the patched breeze style is used.

  • SvgImage.H is new property that is a synonymous of SvgImage.Height.

  • SvgImage.Paint() now takes optional X, Y, Width and Height arguments. These arguments define the target drawing rectangle, and the SVG image will be scaled to fit it.

  • SvgImage.W is new property that is a synonymous of SvgImage.Width.

  • TextArea: CursorAt() is a new method that returns the cursor screen position from a text position.

  • TextArea: ToPos(), ToColumn() and ToLine() methods work correctly now.

  • TextBox: CursorAt() is a new method that returns the cursor screen position from a text position.

  • The parent window of a modal window is correctly set now.

  • Window now raises a Font event when its font changes.

  • Window.TakeFocus works again.

  • Window.Visible property does nothing when set with its current value.

  • Workaround Enter & Leave events QT madness.

GB.QT5.EXT

  • New QT5 extension component that just includes the TextEdit control.

GB.REPORT2

  • A new class ReportSizeParser to replace TSizeParse. TSizeParse is maintained but deprecated.

  • Begin to implement ReportGridView. Not available yet.

  • Dutch translations updated

  • Finally , after 10 years, I managed to solve the numbering problem of cloned elements. This will allow to manage data groups.

  • Now the printer resolution is always 1200 dpi.

  • Preview: Fix the printer combo initial value.

  • Remove unneeded variable initialization.

  • ReportImage and ReportSvgImage was not able to use Autoresize.

  • ReportImage: Change the Matrix manipulation by the Print.DrawImage Function. It solves resolution problem on printing.

  • ReportImage: Remove an old size conversion and replace it by the Report Class One.

  • ReportView: Initialize the temporary image buffer contents when grayscale is enabled. Otherwise uninitialized pixels are painted.

  • The report preview dialog layout is changed to be more readable with less info.

  • The ReportViewer is updated when the report layout is finished.

  • Two new variable are supported in the expression evaluator: Page for the page number, and Index for the cloned element index.

  • Update icons.

  • Use the gambas internal Expression class to evaluate the ReportLabel Formulas.

GB.SDL2

  • Fix function name SDL_GetWindowID() in Window_Handle property.

GB.SETTINGS

  • Settings.Read and Settings.Write can take an absolute key as argument.

  • Settings.ToString() and Settings.FromString() are two internal methods now made public. They convert a value to its string representation, and the contrary.

GB.TERMAPP

  • New component for making terminal GUI applications.

GB.UTIL

  • Class.Stat() is a new static method that returns information about a project class without loading it. At the moment you only get the parent class name and if the class is exported.

  • Date.FromUnixTime() now correctly ignores the current timezone.

  • Shell.RmDir() works correctly now.

GB.UTIL.WEB

  • Always initialise JSON.Null, so that an entry in a JSONCollection with value JSON.Null appears in the Encode() string.

  • Fix collection generation in JSON.Encode().

  • JS is a new class that quotes a string for javascript when used as a static function.

  • JSON.Encode() is now a lot faster, thanks to Alexander Kuiper.

GB.WEB

  • Add SVG file mime type.

  • Fix Session.Keys for SQLite sessions.

  • Disable automatic session removal when creating a session.

  • Request.Language returns the main language requested by the HTTP client. This value can be directly assigned to System.Language.

  • Request.Referer is a new property that returns the request referer.

  • Request.UserAgent is a new property that returns the request user agent.

  • Response.Done is a new property that tells if Response.End has been called.

  • Session.Size returns the size of the session file in bytes.

  • Session.Type defines which kind of session store to use. At the moment, two are implemented. "file" (the old one), and "sqlite" (based on a sqlite database). The default type is "sqlite".

  • Session: Use buffered i/o when loading or saving session.

  • WebPage.ToString() now works correctly.

GB.WEB.FORM

  • A new component that allows to make the GUI of your web application from the Gambas IDE. Almost everything is done on the server side. The user browser is mainly used as an enhanced graphical terminal running the less JavaScript as possible. Events and page refresh flow between the browser and the server through XML HTTP requests.

GB.XML

  • Document: Fixed a memory leak when the instanciation failed due to a parsing exception.

  • Encountering a never-ended attribute does not crash the parser anymore.

  • Fix attribute initialization method.

  • Fix copy & paste error which creates CDATA nodes as comment nodes.

  • Fix Gambas headers inclusion in various places.

  • Fix off-by-one error in utils.cpp (cf. bug #894).

  • Optimized parser cleanup when an exception is thrown.

  • XmlElement: Internally setting an attribute with a NULL value does not crash anymore.

  • XmlReader: Fix text node management.

GB.XML.HTML

  • Encountering a never-ended attribute does not crash the parser anymore.

  • XmlElement: Fix infinite loop from MatchFilter()

Compilation and installation

Read the instructions there.

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

Enjoy it !

See also