doc • release • 3.2.0

Gambas 3.2.0

What's new

This new release fixes more than 100 bugs and adds more than 100 new features.

All Gambas 3.x versions will be backward-compatible, i.e. a program written in Gambas 3.0 version will be able to run unchanged with any Gambas 3.x version. But the contrary is false: a program written with a specific Gambas 3.x version will not run with an older version.

The main new feature of Gambas 3.2 is the new just-in-time compiler made by Emil Lenngren, that can make a function or an entire class up to 100 times faster.

Otherwise the other main changes are:

  • gb.gtk.opengl is a new component that allows to use OpenGL in GTK+ applications.

  • is a new component based on GStreamer.

  • gb.ncurses is a new component based on the ncurses library made by Tobias Boege.

  • gb.xml has been entirely rewritten from scratch by Adrien Prokopowicz.

  • gb.xml.html is a new HTML generator component based on gb.xml.

  • The IDE now has an integrated profiler.

  • The IDE packager is more robust.

  • SidePanel now can be transparent.

  • New ON GOTO and ON GOSUB instructions.

  • New Base64() and UnBase64() conversion functions.

  • A new real-time Mandelbrot fractal generator that uses the JIT compiler.

  • Almost all gb.gtk controls are now transparent as in gb.qt4.

  • A new MediaPlayer example based on the component.

Enjoy it!


* BUG: Fix component TEMPLATE directory.
* BUG: Adapt to the verbosity output when a pkg-config component isn't
* NEW: Support for new gb.xml component family.
* NEW: Update *.component files to the new format.
* NEW: Replace the old "INCLUDES" directive by "xxx_CPPFLAGS" in all files.
* NEW: Print disabled components individually.
* NEW: Add more verbosity about the failing pkg-config requirement.

* BUG: Fix a possible crash when refreshing project tree inheritance.
* BUG: Correctly import translations whose original string begins or ends
  with spaces.
* BUG: Correctly show error tooltip in splitted editors.
* BUG: Do not fail when a library is not found.
* BUG: The packager now generates correct dependencies on libraries whose
  major and minor version are both zero.
* BUG: Fix dependencies on libraries in the packager.
* BUG: When creating dependencies on libraries, the packager now takes into
  account if the library package name is prefixed with the vendor name.
* BUG: Now always use the release version number in the package name,
  otherwise the Debian/Ubuntu packager cannot compare versions reliably.
* BUG: Fix XML component names.
* BUG: Do not handle Data event of controls in the form editor, because the
  signature of the event handler depends on the control type.
* BUG: Packager: Replace spaces with underscores when using the vendor name
  as package name prefix.
* BUG: Packager: Fix "make uninstall" in autoconf packages.
* BUG: Don't crash if there is a compilation error in a form file.
* BUG: Autotools packager "make uninstall" should be definitely fixed.
* BUG: The report border dialog works well now.
* BUG: Do not display a spurious message anymore when clicking in a void
  part of the project tree view with the right mouse button.
* BUG: CFlt() is now replaced by CFloat() when converting a Gambas 2
* BUG: Toolbars and popup-menus are correctly updated at first load form
  text, source and form editors.
* BUG: Do not show or hide toolbars buttons outside of the toolbar
  'Configure' event.
* BUG: Fix generation of action and toolbar information so that the IDE
  does not crash anymore when having no custom toolbar definition.
* BUG: Autotools packager now respects the vendor name prefix option.
* NEW: Support for new gb.xml component family.
* NEW: Add a "project type" option in the project properties dialog. It
  makes the difference between a normal project, a library project, and a
  component project.
* NEW: The packager takes the project type into account. A library and a
  component do not install a *.desktop file, has no icon and has no menu
  entry. But a library has the same package name than a normal project.
* NEW: Define the 'Exec' preprocessor constant when making an executable.
* NEW: Add some debugging options directly in the 'Debug' menu.
* NEW: A new option to activate the profiling of the debugged project.
* NEW: Profiling windows.
* NEW: Adapt GUI to the new SidePanel look.
* NEW: Handle the FAST keyword in function declaration.
* NEW: ReportLabel and ReportTextLabel show a blue dashed border, so they
  are more easy to find.
* NEW: Add global packaging identity preferences.
* NEW: Do not set the APPMENU_DISPLAY_BOTH environmental variable anymore.
  It seems to work now.
* NEW: The gb.form.stock component now can be explicitely checked in the
  project property dialog.
* NEW: The IDE now depends on gb.form.stock.
* OPT: Use Stream.Lines enumeration instead of LINE INPUT. It is a little bit
* OPT: Use JIT compiler to speed-up the loading of profile files.
* OPT: Use Application.Busy earlier when opening a project.

* BUG: Handle public variables like properties.
* BUG: Fix links with explicit version.
* NEW: Add "@since" special keyword.

* BUG: MediaPlayer: Forgot to add a picture.
* NEW: A new PhotoTouch example I made so that my father can edit its photo
  with a simple software.
* NEW: Move Sound and Video examples to a new Multimedia folder.
* NEW: Remove Sound and Video folders.
* NEW: New MediaPlayer example based on the new GStreamer
* NEW: A new Fractal example that draws the Mandelbrot set with an option
  to enable just-in-time compilation.
* OPT: Little optimization in GameOfLife example.

* BUG: Freeing any Stream object now automatically closes it.
* BUG: Stream.ReadLine() with no second argument does not crash anymore.
* BUG: gb.MediumTime does not try to use AM/PM if AM/PM is not supported
  by the current language.
* BUG: Remove the use and the definition of long double mathematic
  functions. They are not used anymore.
* BUG: Ignore non-significant decimal digits when converting a String to a
  Float. In other words, now 2.0 = 2.
* BUG: Fix precision in both string to Float and Float to string
* BUG: The byte position to utf-8 position caching routine now works in all
* BUG: Allow to override native array classes without crashing.
* BUG: Fix a crash when using 'gb.Like' comparison flag.
* BUG: Fix a crash in the &/ operator.
* BUG: Fix a crash that could occur if a error is raised inside an event
* BUG: Fix a crash that could occur if a error is raised inside a signal
* BUG: Html$() works correctly again.
* BUG: GP must be NULL for new void stack frames.
* BUG: Fix IIf() function when its arguments have different types.
* BUG: Enumerating the Param class does not leak memory in some cases
* BUG: Fix use of static classes as extern function argument.
* BUG: Fix class loading so that circular dependencies between class
  initialization is possible.
* BUG: "Read ... As String"  now correctly returns a void string instead
  of NULL, if it reads an empty string.
* BUG: If there is an error, wake up the debugger on the current stack
  position. Return to the last encountered line break after, not before.
* BUG: Correctly load the "npvar" field for Gambas functions.
* BUG: Add a check to not create array classes when reimplementing or
  inheriting native array classes. Hope that check is not wrong...
* BUG: Correctly release or keep the return value of a function when
  destructors are called during epilogue.
* BUG: Fix Format$() when using "AM/PM" just after a date formatting
* BUG: Fix race conditions in signals management routines.
* NEW: Do not raise an error when a file path cannot be converted to the
  local charset. Just do not make the conversion.
* NEW: Change the 'main' hook syntax. Add a macro to call the previous
  'main' hook, so that several hooks can be declared.
* NEW: Rename all API related to components, and fix components using them.
* NEW: New signal API that allows to catch signals from the event loop.
* NEW: Support for profiling.
* NEW: gb.ShortDate and gb.MediumDate predefined date formats now always
  display years with four digits.
* NEW: Base64() is a new function to encode a string in Base64.
* NEW: UnBase64() is a new function to decode a Base64 string.
* NEW: ON ... GOTO and ON ... GOSUB instructions.
* NEW: System.Profile is a new property to deactivate the instruction
  profiling at runtime. Function calls keep being profiled.
* NEW: Switch to JIT compiler if available, and make it able to talk to
* NEW: Support for variable number of arguments in extern functions.
* NEW: Exported classes are now completely initialized at startup. It may
  break some things...
* NEW: Always put a space between international currency symbol and amount
  when formatting a currency.
* OPT: Make API arrays constant.
* OPT: Don't allocate array for jit functions if not necessary.

* BUG: Display the right line number if there was a parser error inside a
  form class file.
* BUG: Fix CASE LIKE syntax. Now all CASE LIKE arguments are compared with
  the LIKE operator. Not just the first one.
* BUG: The token following a CONST keyword is now assumed to always be an
* BUG: ByRef keyword is now correctly forbidden in extern functions now.
* BUG: '...' syntax is now correctly forbidden in event description.
* BUG: Make the internal "$load" form method private. Why was it public?
* BUG: Write correct disassembly for PUSH INTEGER.
* NEW: New '-x' option to define the 'Exec' preprocessor constant.
* NEW: Base64() is a new function to encode a string in Base64.
* NEW: UnBase64() is a new function to decode a Base64 string.
* NEW: ON ... GOTO and ON ... GOSUB instructions.
* NEW: 'Fast' keyword means the class should be JIT-compiled.
* NEW: Each function can be declared individually FAST. The keyword must be
  the first one on the line.
* NEW: Support for variable number of arguments in extern functions.

* BUG: Do not crash when compiling a program again.

* BUG: Fix internal structure of Uncompress object.

* BUG: Fix use of old GridView property in DataComboView.

* NEW: Support for profiling.
* NEW: GB_PROFILE_MAX environment variable now can take the maximum size of
  a profile file in megabytes. The default value is 512 Mb. The minimum
  value is 128 Mb, and the maximum value is 4096 Mb.

* BUG: Fix Draw.Picture() when using the transformation matrix and not
  specifying height or width.

* BUG: Highlight.TextAfter returns the code as it should be displayed, even
  if the Rewrite argument of Highlight.Analyze() is FALSE.
* NEW: Handle the FAST keyword in function declaration.

* BUG: GridView.SelectAll() now works correctly.
* BUG: The GridView headers now use the Button foreground color so that
  they are visible with a dark color theme.
* BUG: The last column of a GridView with AutoResize set is not frozen
  anymore when the number of columns grows.
* BUG: GridView: The WordWrap property is now correctly taken into account
  for cells having normal text.
* BUG: IconView: Item text is ellipsized without printing GTK+ warnings
* BUG: Fix a crash when changing the IconPanel Count property.
* BUG: GridView.AutoResize property now works correctly.
* BUG: GridView: Automatic column widths now take the sorted indicator into
* BUG: Movement keys are not eaten by the GridView anymore.
* NEW: IconView.Key is now writable, so that we can define the current
* NEW: GridView row and column width now can be set to zero so that they
  are completely hidden.
* NEW: GridView now raises a Sort event when the sort properties are
* NEW: GridView: Add a Scroll() method.
* NEW: FileChooser now can handle *.tgz archives.
* NEW: GridView: If the Grid property is FALSE, do not draw row and column
* NEW: Hidden SidePanel now has two toggle buttons that appear when the
  mouse moves on the two ends of the hidden panel.
* NEW: SidePanel has a new Transparent property to define if the SidePanel
  has a border handle or not. By default, SidePanel are not transparent as
* NEW: GridView: Setting the height of a row to -1 now makes it fit its
* NEW: FileChooser and DirChooser: It is now possible to move up one
  directory even if we are on the root of the current bookmark.
* NEW: ButtonBox use the new Style.BoxFrameWidth and Style.BoxFrameHeight
  properties to draw itself.
* NEW: Ignore errors when loading the gb.form.stock component. Display a
  warning message on the standard error output and use a dummy icon
* NEW: SidePanel: Add a popup menu to show or hide the panel, and to toggle
  the panel transparency.
* NEW: SidePanel: Transparency is stored in SidePanel settings now.

* NEW: Configured toolbars are drawn with a red frame.
* NEW: Do not disable toolbars when they are configured. Otherwise drag &
  drop does not work with gb.gtk.
* NEW: Toolbar: You can add a space element between buttons now.
* NEW: Toolbar: New layout for the configuration dialog.

* BUG: Add the 'earth' icon in the stock.
* NEW: Some icons have been updated.

* BUG: Fix timer management so that it is compatible with the GB.Every()
  interpreter API.
* BUG: Utility windows are make transient the same way as in gb.qt4.
* BUG: Use g_object_unref() instead of rsvg_handle_free() now.
* BUG: ScrollBars are correctly initalized now.
* BUG: Container.Find() does not take hidden controls into account anymore.
* BUG: Window state (Minimized, Maximized and FullScreen properties) is now
  accurately returned.
* BUG: Fix ScreenX and ScreenY properties for Window controls.
* BUG: Windows with a menu bar work correctly again.
* BUG: Fix the Font.Copy() method.
* BUG: Automatic pointer grab on mouse events now do not confuse TreeView
  and ColumnView controls anymore.
* BUG: Fix cached drawing areas.
* BUG: Fix mouse event management for controls having scrollbars.
* BUG: Fix cursor management for DrawingArea.
* BUG: Screen geometry and available geometry is now computed the same way
  as in gb.qt4. In other words, it is screen based, and does not crash
  with Xinerama anymore.
* BUG: 'Default' or 'Cancel' buttons now take the focus when they are
  activated by the ENTER key.
* BUG: Remove warnings displayed by the Control Raise() and Lower()
* BUG: Draw.Style methods now are correctly clipped.
* BUG: Fix drag & drop management, so that it behaves as in gb.qt4 as much
  as possible. At the moment, disable controls cannot be a drop target,
  contrary to gb.qt4.
* BUG: The DrawingArea draw event is raised before other internal drawing
  events now, not after.
* BUG: Workaround GTK+ limitations and make containers clip their children
  like in gb.qt4. Not perfect yet, as Enter and Leave events may not take
  the clipping into account, and some GTK+ widgets like TextBox cannot be
  clipped as they still have their own X11 window (why???).
* BUG: Splitter children coordinates are accurate now.
* BUG: Control.Hovered now works the same way as in gb.qt4.
* NEW: Allows multiple 'main' hooks.
* NEW: A new interface to allow gb.gtk.opengl to create its GLArea widget.
* NEW: Make GTK+ controls borderless, so that they are "transparent" like
  gb.qt4 controls. The PhotoTouch example now works correctly with gb.gtk,
  the brightness dialog excepted.
* NEW: Implement the _NET_MOVERESIZE_WINDOW way of moving windows.
* NEW: MovieBox is not opaque anymore.
* NEW: Desktop.HasSystemTray is a new property that returns if a system
  tray has been detected.
* NEW: Profile time spent waiting for events.
* NEW: Draw.Tile() does not transform pixbufs into a pixmaps anymore.
* NEW: Style.BoxFrameWidth and Style.BoxFrameHeight are two new properties
  that replace Style.TextBoxFrameWidth.
* NEW: Mouse.Forward is a new property that returns if Mouse.Delta is
* NEW: Mouse.Inside() is a new method that returns if the mouse cursor is
  inside a specific control.
* OPT: Optimize GTK+ widget -> gb.gtk control lookup everywhere.

* NEW: New component that allows to do OpenGL with GTK+. It is based on the
  gtkglext library.

* NEW: That new switcher component chooses between gb.gtk.opengl and
  gb.qt4.opengl according to the current desktop in use.

* NEW: Image.Opacity() is a new method that changes the opacity of an

* NEW: JIT Compiler.
* NEW: If GB_JIT environment variable is set to "info", LLVM code dumps
  will be printed to stderr.
* NEW: If LLVM version is lesser than 3.1, a warning message is printed.
  Normally, a crash should occur just after. :-)

* NEW: Rename the gb.xml component as gb.libxml.
* NEW: Remove gb.libxml.xslt component. It is unneeded.
* NEW: Remove gb.libxml.rpc component. It is unneeded.
* NEW: Keep gb.libxml only, for compatibility reasons, as an equivalent of
  gb.xml based on libxml.

* NEW: New multimedia component based on GStreamer.

* NEW: New component based on the NCurses library made by Tobias Boege.

* BUG: ServerSocket: Do not use the static string returned by inet_ntoa()
  for the Connection event argument. It can be erased by ohter calls to

* BUG: Initialize the curl library correctly now.

* BUG: Initialize GLEW once.

* BUG: Fix building with poppler-0.20.x

* BUG: Fix first drawing of a cached DrawingArea.
* BUG: Fix Foreground property for TreeView, ListView, ColumnView and
  ListBox controls.
* BUG: Fix Background property of ListBox,ListView,TreeView and ColumnView
* BUG: Fix
* BUG: ComboBox background color is correctly handled now.
* BUG: If there is no system tray, showing a TrayIcon now raises an error
  instead of crashing.
* BUG: Using Draw on a DrawingArea correctly initializes the drawing
  properties from the control colors.
* BUG: Background color of cached DrawingArea is correctly initialized now.
* BUG: Control.Hovered does no computation anymore, it returns an internal
  flag set when the Enter event is raised, and unset when the Leave event
  is raised.
* BUG: 'Default' or 'Cancel' buttons now take the focus when they are
  activated by the ENTER key.
* BUG: Setting the Text property of a TextArea control takes the foreground
  color into account now.
* BUG: Postpone enter and leave events when a popup is displayed, like in
* NEW: Allows multiple 'main' hooks.
* NEW: Desktop.HasSystemTray is a new property that returns if a system
  tray has been detected.
* NEW: Profile time spent waiting for events.
* NEW: Style.BoxFrameWidth and Style.BoxFrameHeight are two new properties
  that replace Style.TextBoxFrameWidth.
* NEW: Mouse.Forward is a new property that returns if Mouse.Delta is
* NEW: Mouse.Inside() is a new method that returns if the mouse cursor is
  inside a specific control.
* OPT: A little optimization when using Draw.Begin() on a cached

* NEW: Editor: Add a ScrollBar property.
* NEW: Editor: Add ScrollX and ScrollY properties.
* NEW: Editor: Add a Scroll method.
* NEW: Procedures are folded or unfolded on mouse button release now, not
  on mouse button press.
* NEW: Editor: Line numbers are not drawn behind a procedure separator.
* NEW: Editor.NoFolding is a new flag to disable procedure folding support.
* NEW: Editor.LineOffset is a new property to define the line number just
  before the first displayed line (zero by default).

* NEW: Remove the Update() and the Select() methods.

* OPT: Remove an unused function.

* NEW: Setting.Clear() without arguments now entirely clears all settings.

* NEW: Call previous signal handlers automatically when a specific signal
  is catched.

* NEW: New XML component written from scratch by Adrien Prokopowicz.

* NEW: New HTML component based on gb.xml written from scratch by Adrien

* BUG: Fix component requirements.

* NEW: When output document is invalid, shows the error message on the
  standard error output.
* BUG: Solved an 'undefined symbol' error.
* BUG: XSLT document parsing now correctly works.
* BUG: No more excessive line-breaks and spaces added to the output


To compile Gambas, you must install the following libraries on your system :


Compilation gcc g++ automake autoconf libtool > 2.4
(See requirements on autotools versions below)
Interpreter libffi
gb.cairo cairo
gb.gtk All GTK+ libraries >= 2.14 cairo gdk-pixbuf
gb.image.imlib imlib
gb.opengl gb.opengl.glsl,
gb.qt4 gb.qt4.ext gb.qt4.opengl gb.qt4.webkit All qt 4 libraries >= Qt 4.5
gb.v4l,,Video4Linux >= 2.0
gb.xml libxml-2.0
gb.xml.xslt libxslt

And do not forget to install all related development packages!

Try to always use a recent version of these libraries.

In order to compile the development environment, you have to compile the following components:

You must have the right to write to /tmp, otherwise Gambas will not work.

This package was done with the following versions of GNU tools on Ubuntu 11.10:

  • automake 1.11.1

  • autoconf 2.68

  • libtool 2.4

Compiling with older version may or may not work!

Compilation & Installation

Check installation

First, check that you installed all the needed libraries, and especially all the development packages.

Do not forget to look at the Compilation & Installation page. Maybe you will find important information specific to your distribution.

Source package configuration

When you are sure that everything is installed, type the following magic sentences in a shell.

'$' represents your shell prompt, and '...' are the messages printed during the configuration and compilation.

First, type that to create the configuration scripts.

$ ./reconf-all

Then type that to analyze the current system and configure the package:

$ ./configure -C

If a library or a development package is missing, then you will be warned that some components are disabled.

There are more 'configure' specific explanations in the INSTALL file located in the top-level source directory. I invite you to read them.


If everything is configured without error, then run this command to compile the program:

$ make


If everything compiles without error, then enter this command to install everything:

You must be root to install Gambas on your system.

$ su -c "make install"
Password: <Type the root password here>


$ sudo make install
Password: <Type your password here>


If you did several successive compilations, after having updated the source from the subversion repository for example, and if something fails during all this process, you can try to "reconfigure" the configuration scripts by typing the following command:

$ ./reconf-all

Then you can run ./configure -C again

If it does not work, I need to know what happened exactly. To do so, type the following command :

$ ( ./configure -C; make; make install ) > output.txt 2>&1

And send me the file "output.txt" by mail, with every other detail about your computer and your distribution you find useful.

Running Gambas

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

Enjoy it !

See also