New in LiveCode 4.5

Find out what is new in the release of LiveCode 4.5

 

LiveCode 4.5 is a major new release containing a number of new features together with a streamlined install process and improved web-plugin. This document describes all the changes that have been made – including bug fixes and new syntax. At the time of writing, this information has yet to been integrated into the dictionary or User's Guide.

Known issues

• The installer will currently fail if you run it from a network share on Windows. Please copy
the installer to a local disk before launching on this platform.
• The Oracle dbdriver for Mac (PowerPC) is not present in this build.

Platform support

The engine supports a variety of operating systems and versions. This section describes the
platforms that we ensure the engine runs on without issue (although in some cases with reduced
functionality).

Windows

The engine supports the following Windows OSes:

  • Windows 2000 SP4
  • Windows XP SP2 and above
  • Windows Server 2003
  • Windows Vista SP1 and above (both 32-bit and 64-bit)
  • Windows 7 (both 32-bit and 64-bit)
  • Windows Server 2008

Note: On 64-bit platforms the engine still runs as a 32-bit application through the WoW laye

Linux

The linux engine requires the following:

  • 32-bit installation, or a 64-bit linux distribution that has a 32-bit compatibility layer
  • 2.4.x or later kernel
  • X11R5 or later
  • glibc 2.3.2 or later
  • gtk/gdk/glib (optional – required for native theme support)
  • pango/xft (optional – required for pdf printing, anti-aliased text and unicode font support)
  • lcms (optional – required for color profile support in JPEGs and PNGs)
  • gksu (optional – required for elevate process support)

Note: The optional requirements (except for gksu and lcms) are also required by Firefox and
Chrome, so if your linux distribution runs one of those, it will run the engine.
Note: If the optional requirements are not present then the engine will still run but the specified
features will be disabled.

Mac OS X

The Mac OS X engine supports:

  • 10.3.9 (Panther) on Intel and PowerPC
  • 10.4.11 (Tiger) on Intel and PowerPC
  • 10.5.8 and later (Leopard) on Intel and PowerPC
  • 10.6.x (Snow Leopard) on Intel

Note: The engine runs as a 32-bit application regardless of the capabilities of the underlying
processor.

Changes at version 5.0

The supported platforms that will be supported in 5.0 is currently being reviewed. However, it is
likely that the following will be the case:

  • The engine will no longer support Mac OS 10.3.9 (Panther)
  • The engine will require gtk, gdk, glib, pango and xft on Linux

Improved installation

Layout

The structure of the IDE install has changed significantly in this release.
Each distinct version has its own complete folder – multiple versions will no longer install side-byside:
on Windows (and Linux), each distinct version will gain its own start menu (application menu)
entry; on Mac OS X, each distinct version will have its own app bundle.

The default location for the install on the different platforms when installing for 'all users' are:

  • Windows: /RunRev/ LiveCode 4.5
  • Linux: /opt/runrev/livecode-4.5
  • Mac OS X: /Applications/ LiveCode 4.5.app

The default location for the install on the different platforms when installing for 'this user' are:

  • Windows: /RunRev/Components/LiveCode 4.5
  • Linux: ~/.runrev/components/livecode-4.5
  • Mac OS X: ~/Applications/ LiveCode 4.5.app

Getting folder locations within the IDE

If you write plugins, or have code that relies on the location of IDE files then please ensure you use
the following access functions to locate them:

revEnvironmentToolsPath() The location containing the main IDE files.

revEnvironemntExternalsPath() The location of the externals that come with the IDE.

revEnvironmentPluginsPath() The location of the plugins that come with the IDE.

revEnvironmentRuntimePath() The location of the standalones that come with the IDE.

revEnvironmentDocumentationPath() The location of the documentation files.

revEnvironmentResourcesPath() The location of the resources that come with the IDE.

revEnvironmentUserCachePath() The location of the folder to use for caching files.

revEnvironmentUserPreferencesPath() The location of the folder to use for preference files.

revEnvironmentUserExternalsPath() The location of the folder to use for additional externals.

revEnvironmentUserPluginsPath() The location of the folder to use for additional plugins.

Important: Third-party IDE extensions must avoid placing any files inside the application
bundle or under revEnvironmentToolsPath() (not least because you will probably not have
privileges to do so!). Instead, they should use the user-externals and user-plugins paths as
provided. These paths are determined by the user's customization path setting, configurable in
the preferences.

New installer

The installer has been entirely replaced in this version. It is (hopefully!) a vast improvement over
the old installer, and now runs on Windows, Mac OS X and Linux.

At release the intention is that the installer will automatically detect whether authentication is
required for the install and request it if needed.


Note: If your linux distribution does not have the necessary support for authentication (gksu) then
the installer will run without admin privileges so will have to manually run it from an admin
account to install into a privileged location.

Uninstallation

On Windows, the installer hooks into the standard Windows uninstall mechanism. This is accessible
from the appropriate pane in the control panel.
On Mac OS X, simply drag the app bundle to the Trash.
On Linux, the situation is currently less than ideal:

  • open a terminal
  • cd to the folder containing your rev install. e.g.
    cd /opt/runrev/livecode-4.5-dp-5
  • execute the .setup.x86 file. i.e.
    ./.setup.x86
  • follow the on-screen instructions.

Reporting installer issues

At this stage there are likely to be issues with installs in certain situations. If you find that the
installer fails to work for you then please file a bug report in the RQCC or email
This e-mail address is being protected from spambots. You need JavaScript enabled to view it so we can look into the problem.
In the case of failed install it is vitally important that you include the following information:

  • Your platform and operating system version
  • The location of your home/user folder
  • The type of user account you are using (guest, restricted, admin etc.)
  • The installer log file located as follows:
    • Windows 2000/XP: //Local Settings/
    • Windows Vista/7: //AppData/Local/RunRev/Logs
    • Linux: /.runrev/logs
      Mac OS X: /Library/Application Support/Logs/RunRev

Improved licensing

The license system has been replaced in this release.
The new system ties your product licenses to a customer account system, meaning that you no longer have to worry about finding a license key after installing a new copy of LiveCode. Instead,you simply have to enter your email address and password that has been registered with our customer account system and your license key will be retrieved automatically.
Alternatively it is possible to activate the product via the use of a specially encrypted license file.
These will be available for download from the customer center after logging into your account. This
method will allow the product to be installed on machines that do not have access to the internet.

Engine changes

Non-blocking DNS resolution

The open socket command no longer blocks on DNS resolution. Instead, if resolution is required
the command will return immediately and the DNS lookup will happen in the background. If
resolution fails, then a socketError message is sent in the same was as if connection fails.
For applications using hostNameToAddress directly, its syntax has been augmented:
hostnameToAddress(hostname, [ callback ])
If the callback parameter is specified then the call will return immediately and upon completion of
the lookup, the callback will be invoked with the resolved address as a parameter.

Improved cursor support

Cursor support has been improved in several ways.
The image will now automatically process any image to convert to a form suitable for display on the current platform and screen depth taking this burden off the developer. Specifically, the engine
will scale the image down to the appropriate size, and reduce the number of colors to the appropriate number of colors. Additionally, the engine has been updated to take advantage of support for larger and potentially alpha-blended cursors on platforms that support this. Specifically:

  • Windows XP and above support full alpha-blended cursors up to 64x64
  • More recent Linux distributions support alpha-blended cursors up to a size of 64x64
  • Mac OS X supports alpha-blended cursors up to 256x256

Note: It appears that alpha-blending support depends on the current screen depth on some platforms.

Improved image export

BMP Export

The export command can now produce Windows BMP format images in the same was at it previously did for gif and png:
export target as bmp

Palette reduction

The export command can now perform color reduction. To support this, the following new forms have been added:
export target as ( gif | png | bmp ) with palette colors
export target as ( gif | png | bmp ) with ( standard | optimized ) palette
export target as ( gif | png | bmp ) with count color optimized palette
The first form allows you to specify a list of up to 256 colors to use in the final palette. The second form will use either the standard 'websafe' palette, or will compute an optimized palette with at most 256 colors. The third form allows you to choose the size of the optimized palette to be generated. The number of colors can be at most 256. If the image has any sort of transparency, then this will utilize one palette entry. (In particular if you ask for a 256 color palette with a transparent image, you may get only 255 colors). In all cases, optional dithering will be performed as determined by its dontDither property.
Note: It is a (relatively) slow process to compute an optimized palette and then remap an image against it – it should not be considered a real-time operation except for very small images.

Note: There is no support for exporting a JPEG with a reduce palette as this format is for continuous-tone images and as such the notion of palette makes no sense.

Raw data export (experimental)

It is possible to export raw image data using the following forms:

export target as raw with palette colors

export target as raw with ( standard | optimized ) palette

export target as raw with count color optimized palette

export target as raw [ argb | bgra | abgr | rgab ]

The first three of these operate in the same way as for the other formats as described above except that instead of formatted image data you get the raw palette indices packed appropriately depending on the size of the palette:
<= 2 colors will be 1 bpp
<= 4 colors will be 2 bpp
<= 16 colors will be 4 bpp
<= 256 colors will be 8 bpp
The final form allows export of the full 32-bit data of the image with 8 bits per component. In this case, the components are not pre-multiplied with any alpha channel, and appear ordered in memory in increasing bytes.
e.g. The argb form will give you:

byte 0 = alpha

byte 1 = red

byte 2 = green

byte 3 = blue

Important: This feature is currently experimental. This means that it may not be complete, or may fail in some circumstances that you would expect it to work. Please do not be afraid to try it out as we need feedback to develop it further.

Color profile support

The engine will now attempt to use any embedded ICC color profile information that is present in JPEGs and PNGs.
If a JPEG contains a color profile then the engine will attempt to use it to translate the image's colors to the default screen color space before display.
When printing JPEGs, the original JPEG data will now be sent to the printer directly whenever possible, In particular, this means that any intermediate color matching for the screen that the
engine performs does not affect the printed output.
As an additional side-effect of color profile support, the engine now also supports YCCK and CMYK JPEG images.
Note: Support for color profiles depends on the OS - in particular Windows XP and earlier only support ICC v2 profiles, Vista onwards supports ICC v4.

Print to pdf support

The engine printing system has been augmented with the ability to print to pdf. This feature uses the existing print-loop model and virtually no code changes are needed to make existing code use it.

Print loop integration

To start a print loop that outputs directly to a pdf rather than the currently configured printer, use the following form:
open printing to pdf filename [ with options optionArray ]
This should be performed instead of the usual open printing command.
Note: It is not necessary (and unwise!) to set the formatForPrinting option on stacks which are being printed to PDF.

Options

The options array which can be optionally specified when opening a print loop for pdf allows you to add entries to the resulting PDF's Document Information Dictionary.
The following keys are supported:
Title, Author, Subject, Keywords, Creator, Producer
Their values can be any string.

Hyperlink support

When inside a pdf print loop you can use additional commands to define hyperlinks and their targets.
To define a target for an internal hyperlink, use the following form:
print anchor name at anchorPoint
Here name is used to identify the anchor in related print link commands, and anchorPoint is the location on the current page to which any such link should jump to.
To define a hyperlink use the following form:
print link to target with rect linkRectangle
If target is a url, then the given rectangle will jump to that url when it is clicked. If target is not a url, it is assumed to be the name of an internal anchor as specified by the print anchor command
and clicking in the given rectangle will jump there instead.
When printing fields, any text that has its linkText property set will be treated as if a print link command had been executed with the contents of the property as target, and the formattedRect of
the text as rectangle.

Runtime dependency

The implementation of pdf printing resides in a dynamic library called revpdfprinter. The standalone builder will automatically include this in the appropriate place when building standalones.
Any custom code that deals with standalones which use this feature must make sure that the revpdfprinter library resides next to the engine executable (On Mac OS X, this is inside the Contents/MacOS folder, not next to the bundle).

Elevated process support (experimental)

Sometimes it is necessary to perform operations on the local machine as an administrator, and a typical pattern for a GUI application doing this is for it to prompt for authentication at certain points.
Modern operating systems do not permit a process to elevate itself, nor grant itself increased privilege. Instead, they only allow a running process to launch another process with increased privilege. Therefore, in order to support this, a new form of the open process command has been introduced that can launch a slave process with elevated permissions:
open elevated process process [ for [ text | binary ] ( read | write | update | neither ) ]
This form operates identically to the normal version, except that engine will ask the system to launch the given process with admin/root privileges.
The standard way for a GUI application that needs to perform privileged operations to be structured is to split the application into two parts: a GUI front-end that interacts with the user, and a command-line  back-end that is run with elevated permissions. These two parts can then talk to each other using a standard master-slave approach, or some other form of IPC such as sockets.
Important: This feature is currently experimental. This means that it may not be complete, or may fail in some circumstances that you would expect it to work. Please do not be afraid to try it out as we need feedback to develop it further.

Slave process improvements

A number of issues with the open process command and the engine itself have, up until now, conspired to make it difficult (if not impossible!) to either run a slave process, or use the engine as slave on all platforms.
These issues have been resolved in this version, thus making it straightforward to run another process and poll for input and output over stdin/stdout.

The typical form for this is along the following lines:
local sSlaveProcess
command startSlave pProcess
open process sSlaveProcess for text update
send “monitorSlave” to me in 50 millisecs
end startSlave
command monitorSlave
repeat forever
# Loop until there are no more lines to read.
read from process sSlaveProcess for 1 line in 0 millisecs
if the result is empty then
# The slave has sent us something, so process it and loop for
# (potentially) more data.
else if the result is “timeout” then
# There is nothing waiting for us, so exit repeat
exit repeat
else if the result is “eof” then
# The slave has terminated, so do any final processing and finish
# monitoring.
close process sSlaveProcess
exit monitorSlave
else
# Some error has occurred!
exit monitorSlave
end if
end repeat
send “monitorSlave” to me in 50 millisecs
end monitorSlave

Videograbber improvements

Some work has been done on storing and fetching settings from the videograbber.
On Windows and Mac OS X, audio and video settings are now correctly retrieved and set using revVideoGrabSettings and revSetVideoGrabSettings.
On Windows (when using DirectShow), the 'Camara Control' settings are now saved and restored via the grab settings commands. Specifically: pan, tilt, roll, zoom, exposure, iris, focus and flash.

Status icon support (experimental)

Windows, Linux and Mac OS X all have an area where so-called 'status icons' can be displayed. On Windows this is the system tray on the bottom right of the start bar, on Linux this is typically the right of the panel at the top of the screen, and on Mac OS X this is on the menubar.
The engine has support for adding a single status icon, and it can be configured using the statusIcon, the statusIconTooltip and the statusIconMenu:
set the statusIcon to imageId
set the statusIconMenu to iconMenuSpec
set the statusIconToolTip to toolTip
Here imageId is the id of the image you wish to use as the icon. It will be scaled down automatically to the appropriate size for the platform and then set. The toolTip specifies what message appears when  the user hovers over the status icon.
The iconMenuSpec allows you to configure a menu that will appear when the user does a 'menu' click on the icon. This string uses a subset of the standard engine menu specification:
[ * ] [ '(' ]

Listing sub-keys in the registry (experimental)

To get a list of sub-keys in the Windows registry use the following function:
listRegistry(parentKey)
This will return a return-delimited list of sub-keys, i.e. those keys which are direct children of the given parentKey. The specified key should be in the same format as the other registry functions.
Important: This feature is currently experimental. This means that it may not be complete, or may fail in some circumstances that you would expect it to work. Please do not be afraid to try it out as we need feedback to develop it further.

Cryptographic-quality random data (experimental)

A randomBytes() function has been added to enable generation of arbitrary amounts of cryptographic-quality random data. To use this feature, the syntax is:
randomBytes(byteCount)
The function will return byteCount random bytes and uses the OpenSSL library's random data generator to do so.
Note that the random data is derived from non-predictable sources where possible, meaning that it can (for the most part) be considered truly random. This is contrast to the random function which uses a pseudo-random number generator and randomSeed value.
Important: This feature is currently experimental. This means that it may not be complete, or may fail in some circumstances that you would expect it to work. Please do not be afraid to try it out as we need feedback to develop it further.

SHA-1 digest support (experimental)

The SHA-1 digest of a block of data can now be computed by using the following form:
the sha1Digest of data
sha1Digest(data)
This function returns the sha-1 digest in the form of 20 (binary) bytes.
Important: This feature is currently experimental. This means that it may not be complete, or may fail in some circumstances that you would expect it to work. Please do not be afraid to try it out as we need feedback to develop it further.

Public key encryption support (experimental)

The encrypt and decrypt commands now support RSA public key encryption. The new forms supporting this are:
encrypt message using rsa with ( public | private ) key key [ and passphrase passphrase ]
decrypt message using rsa with ( public | private ) key key [ and passphrase passphrase ]
Here key should be in PEM format, optionally protected by passphrase.
The maximum length of a message that can be encrypted using RSA is the size of the key in bytes – 11. So, for a 512-bit key pair, the maximum encryptable message size is 53 bytes.

Generating key pairs

Public-private key pairs can be generated using the OpenSSL suite of command-line tools. For example:
openssl genrsa -out private_key.pem 512
openssl rsa -pubout -in private_key.pem -out public_key.pem

Will generate a key pair of size 512-bits, placing the private key in private_key.pem and the public key in public_key.pem.
For more information on these utilities see http://www.openssl.org/docs/apps/rsa.html and http://www.openssl.org/docs/apps/genrsa.html.

Command variants

Use encrypt with a public key to encode a message that you only want to be decoded the holder of the private key.
Use decrypt with a private key to decode a message that a sender has encrypted with its corresponding public key.
Use encrypt with a private key to encode a message that a receiver can then verify has come from one of the holders of the private key (this is a signing operation).
Use decrypt with a public key to verify that a message has been encoded with the corresponding private key, and there has come from one of its holders (this is a verify operation).

Encrypting longer messages

For signing, the maximum length of an encryptable message isn't really an issue since typically in that scenario it will be some sort of hash that would be being encrypted.
For the more traditional encrypting scenario, however, the standard approach is to use public key cryptography to encrypt a random password which is then used with a symmetric cipher to actually encrypt the payload.
Important: This feature is currently experimental. This means that it may not be complete, or may fail in some circumstances that you would expect it to work. Please do not be afraid to try it out as we need feedback to develop it further.

HTTPS – automatic root certificate discovery (experimental)

In previous versions it was necessary to set the sslCertificates property to the root certificates that HTTPS connections should be verified against. Support has now been added to locate and load the root certificates installed (and kept up to date) as part of the OS.
This uses the standard root certificate keychain on Mac OS X, the standard root certificate store on Windows and uses a number of heuristics to locate this information on Linux.
You can easily find out if the system-installed root certificates are being found by running the following command in the message box:
get “https://www.google.com
put the result & return & it
If this results in an error about verification failure then it is likely that root certificates have not been found. Please let us know (particularly on Linux) if you find this simple test fails, making sure you give us full details of your system (e.g. Linux distribution and version).
Important: This feature is currently experimental. This means that it may not be complete, or may fail in some circumstances that you would expect it to work. Please do not be afraid to try it out as we need feedback to develop it further.

Linux – font support improvements

The font support in the Linux engine has been completely overhauled.
The engine now uses the pango library for all text layout, and renders text using the xft library.
Additionally, the fontNames and related global properties will now reflect the full collection of fonts installed on the system via the fontconfig mechanism (this is the font selection system that
powers pango).

Legacy font support

If the linux distribution does not have the necessary libraries installed, the engine will fallback to using the old X11 font mechanism. This has vastly reduced support for unicode text, and renders without anti-aliasing.
You can force this fallback by passing -xftoff as a command-line parameter to the engine.

Linux – themeing improvements

Some work has been done to improve the appearance of applications on Linux. Although still not perfect, the native theme support should now correctly handle themes that have a transparent/alpha blended  background on some of their parts.
In particular, the default theme in the latest distributions such as Ubuntu 10 look much improved.

Linux – ssl improvements

In order to provide ssl and industrial strength encryption, the engine utilizes the OpenSSL library.
However, the OpenSSL team does not, unfortunately, guarantee binary compatibility between different versions. This has long caused an issue for the engine on Linux where the specific version the engine  needs may not be present.
In order to solve this issue, the linux engine no longer depends on any installed OpenSSL library and will, instead, (attempt to) load revsecurity.so.
This loadable library is a custom build of the latest OpenSSL distribution (1.0.0a at time of writing) and includes both the ssl and crypto components.

Runtime dependency

This change introduces a new (optional) runtime dependecy for linux standalones. The standalone builder will automatically include this in the appropriate place when building standalones that have specified a need for the 'SSL and Security' library.
Any custom code that deals with standalones which use this feature must make sure that the revsecurity library resides next to the engine executable.

Mac OS X – bundle changes

In previous engines there were various support bundles present in the PlugIns folder inside the engine bundle. These are no longer required as their functionality has been integrated into the main engine executable.

Any code that builds standalones, or manipulates built standalones will need to be updated to not expect these to be present.

Mac OS X – dock icon support

Previously unsupported syntax for manipulating the dock icon on Mac OS X is now experimental.

Choosing an image

The current dock icon image can be set by using the global icon property:
set the icon to imageId
The engine will attempt to find an image with the given id, resize it to 128x128 and then set it as the dock icon for the application.
This property has no effect on other platforms.
Note: The image is only guaranteed to persist while the application runs, although in some cases the OS does appear to cache it beyond this.

Configuring the dock icon menu

In addition to changing the dock icon image, you can also configure the menu that appears when the user clicks on it.
To set the dock icon menu use the global iconMenu property:
set the iconMenu to iconMenuSpec
Here, iconMenuSpec is a string describing the menu. This uses a subset of the standard menu specification syntax. The string should be a return-delimited list of items specified as follows:
[ * ] [ '(' ]

Specific bug fixes

(bug fixes specific to the current build are highlighted in bold, bug fixes that have been reverted are stricken through)
'open elevated process' fails on Linux if spaces in engine or command path
crash when using 'open elevated process' on Mac
Engine fails to launch on Mac 10.3.9.
8968 Manipulating the currentCard of the templateStack causes a crash
8969 shell() does not block when it should on Windows

Crash after setting the label of a graphic to empty in certain circumstances
Volume control slider inaccessible in QT players on Windows
VideoGrabber settings can be reset to defaults before showing dialogs when using DirectX
The 'shortfilepath()' function does not clear the result on success on Windows.
Switching a button to default to non-default causes redraw problem on Mac OS X
revBrowser crash on Windows when setting selected text to empty
Poor display of field borders on Linux
Pasting unstyled text in Mac OS X can cause nothing to be pasted
On Windows and Mac OS X, 'read from stdin in ' does not function correctly in the
case of a piped child process
No output from PDF printing when running as PPC on Mac OS X
Mouse position 'drifts' away from click point on scrollbar as it is dragged
If a child process quits, data sent to the parent can be lost on Windows.
First item of option menu doesn't hilite until another item has been.
Failed Oracle connections don't report any error message
Errant mouse focusing can occur after showing a modal dialog
DirectX VideoGrabber's compression dialogs don't work
Crash when printing zero sized objects in some cases
Crash when opening an option menu with look and feel set to Motif
Certain VideoGrabber properties are not saved with settings when using DirectX
Cannot set the title of a stack if a QT player is present on Windows
'the params' includes two copies of the handler name
'Camera Control' properties including 'Exposure' are now saved in the videograbber's
GrabSettings call, when using DirectX on Windows.
5 Images needs to be RLE compressed to be used as cursors
1413 Some PNGs do not import correctly
1690 'beep n' beeps (n-1) times
2117 Engine blocks on DNS query
2398 Cursor size limit
3568 Crash on using a non-RLE compressed/color image when setting a cursor
3977 Mac OS X cursors are scaled down to 16x16
6215 Arrow keys give keyUp message after typing into field
6506 the watchedVariables doesn't support globals
6753 Rotated image moves when toggling dontDither
6866 Crash when fetching htmlText of field under certain circumstances
7490 Default buttons render incorrectly on Linux
7613 Crash when throwing an error in newButton handler
7649 Filter command incorrectly removing empty lines
7652 Some cursors turn white on Mac OS X
7666 revDatabaseCursors function adds trailing comma
7744 Parser allows duplicate parameters
7792 Handlers can be compiled with builtin function names even though they cannot be invoked
7815 Ask file can't handle folder name in path longer than 31 characters on Mac OS X
7872 Crash on testing if path containing ~ exists
8064 Flip command crashes rev in certain circumstances
8143 Left and right quotes and double-quotes don't appear when pasted into Rev from WordPad
8264 Crash when using replaceText function in certain specific circumstances
8268 Crash when compacting stack after deleting cards with background group
8273 revDatabaseColumnIsNull reports False for NULL columns in SQLite
8280 Stack behavior not resolved on open
8327 Copying text from Safari can cause dataloss and strange characters on Mac OS X
8351 SQLite query errors returning unhelpful generic error messages
8427 Crash when exporting JPEG images in certain circumstances
8549 revBrowser not loading htmlText before a url has been opened on Windows.
8559 Setting the menuHistory of an option menu does not change the scroll position on Windows
8560 Incorrect hiliting of tab buttons after using menuHistory
8562 Crash when calling 'cancel printing' after 'open printing to pdf'
8564 Image borders don't print to PDF
8571 Setting the icon fails to set the dock icon on Mac OS X unless the image is edited first
8572 printMargins causes issues when printing to pdf
8573 Menu separators and disabled menu items not working in OS X Plugin.
8593 Scrollbar thumb on list field can disappear
8595 CMYK jpegs without an ICC profile fail to display
8597 Crash in some cases when using graphic effects on images
8598 Mac OS X tab buttons render with increased margin
8601 Cannot slide a slider is startValue > endValue
8610 Passkey property doesn't give any indication of whether the script is available
8620 revDatabaseTableNames truncating data with large number of tables
8621 revDatabaseTableNames doesn't remove trailing return character
8622 Buttons not working properly in licensing dialog
8624 Standalones not made executable on OS X if they had accented chars in path
8627 Spanish dates have no spaces on Mac OS X
8628 Problem when moving between different types of pulldown menu in specific circumstances
8644 Empty line appears in openStacks on Windows when a menu is showing
8650 Crash when operating ComboBox using keyboard on OS X
8661 show/hide with visual effect doesn't take into bitmap effects
8662 Printing to pdf doesn't take account of the printPaperOrientation
8671 SQLite incorrectly returning empty for columns in some queries
8716 Stacks containing large custom prop arrays won't load
8746 Resizing a menubar group, or a menu button causes its accelerators to stop working.
8769 Crash when using graphic effects on Linux in some cases
8773 Player object cannot use https streams
8848 Context menu clicks on datagrids in the IDE causes contents of the datagrid to be lost
8888 In list behavior mode, 'the hilitedLines' are not preserved across fetching htmlText chunks
8889 Video grabber set settings crashes if given an invalid parameter
8929 Shell command blocks when it shouldn't
8936 HTTPS only works if sslCertificates has been set correctly
8943 Blocking url call doesn't start until an event message has been sent
8946 Crash in script editor when editing specific script
8947 Drag cursor doesn't get set to 'not allowed' on Mac OS X
8956 QT Unloaded when it shouldn't be causing delay in first visual effect.

IDE changes

Update checker

The update checker and its corresponding menu item in Help have been temporarily removed in dp-4. The version checking method is changing, and this option will re-appear in a subsequent build.

Affiliate registration

The affiliate registration item in the Help menu has been temporarily removed in dp-4. The method of affiliate registration is changing, and this option will re-appear in a subsequent build.

Database query builder

Use of the database query builder has been deprecated.
To access its functionality, choose the Enable database query builder option on the Compatibility & Updates pane of the preferences.
Note: The database query builder will be removed entirely in version 5.0.

Standalone builder

MacOS Classic

Support for MacOS classic building has been removed. If you wish to build MacOS classic applications then you must use a previous version to do so.

Windows – U3 Support

Support for building for U3 on Windows has been removed. If you wish to build applications for U3 then you must use a previous version to do so.

Windows – UAC Manifest

It is now possible to specify what action UAC should take on Windows Vista and higher when the standalone is launched. You can choose one of the following options:

Default No UAC option is provided in the manifest.
Save as Invoker The application will run with the same privileges as the process that invoked it.
Highest available The application will be elevated to the highest privilege level the current user is allowed.
Require administrator The application will be run as administrator after prompting the user for appropriate login/elevation rights.

Web

Using the 4.5 standalone builder to build for Web will create revlets. These are compatible with the existing revWeb plug-in available from revweb.runrev.com.

An updated version of the IDE for producing LiveCode Applets and the associated LiveCode player will be made available in due course.
Note: As the currently available revWeb plug-in uses the 4.0 engine, you must be careful to only use features that are present in that version.

Datagrid

The datagrid has been updated to version 1.0.2 build 10. The following changes have been made to it since 1.0.1:
1.0.2 build 10 ColumnControlOfIndex now returns the long id of the control. The id being returned was only to be used internally and would not work outside of a script running in the data gid group itself.
1.0.2 build 9 RefreshList now maintains the hilited line (index) in the data grid.
1.0.2 build 8 Removed unnecessary lock/unlock screen in dgMouseDown when clicking with left mouse button.
You can now pass multiple key/value pairs to SetDataOfIndex/Line.
RefreshList now works with cached controls.
_CreateDragImageFromIndex and _CreateDragImageFromControl now reset the templateImage.
Fetching dgText and dgData now restore persistent data if the control has yet to be opened.
1.0.2 build 7 "column labels" was returning a comma delimited list instead of a line delimited list.
arrowKey message is always passed now. Previously it was not passed if the data grid acted on the arrowKey message.
The internal function that returned the list of visible controls was not always returning the proper controls and/or order of controls for tables.
When refreshing data in indexes when the data grid had focus the focused control would revert to the card rather than staying within the data grid.
Message catcher in dgList behavior was watching for setProp dgDataControl instead of getProp dgDataOfControl.
Clicking in the vertical scrollbar area no longer selects rows when the scrollbar isn't displaying a thumb.
Added dgClickLine, dgClickIndex and dgClickedInDataView.
You can now set "dimmed hilite color".
Added getprops for "text color", "effective text color", "header text color" and "effective header text color".
_table.RepositionColumns was not setting "lock messages" to value it had when entering the handler.

Added in getProp for "border color" and "effective border color".
1.0.2 build 6 AddLine now returns the line number of the newly added data.
Added ColumnControlOfLine.
Registry is no longer accessed unless registryRead is among the items of the securityPermissions property.
Column header label, horiztonal and vertical scrollbars no longer have traversalOn set to true.
The Data Grid no longer deletes row/column controls when setting the dgData/dgText or deleting the last row in a data grid.

This means no more error messages if any of the above events occur as the result of a handler called within a row/column behavior script.
A ResetData message is now sent to rows (form) or column (tables) instances of the templates whenever it is being hidden and the data being displayed is empty. This allows the developer to reset any controls and clear any caches.
Instances of a data grid form row/table column templates now receive the PreFillInData message when data in the row is being cleared and new data inserted.
This allows the developer to clear any caches if need be.
Messages sent to rows/columns are now trapped before getting to the Data Grid group. This insulates the outside world from these internal messages if not handled
in the template behavior script.
1.0.2 build 5 dgColumn name no longer accepts an empty string for a column name.
1.0.2 build 4 Internal private function that returned list of visible controls would return more controls than there were actual records for tables that had less records than visible rows. This caused issues with visual feedback during drag reordering.
When drag reordering the drop indicator was not being positioned properly when dragging above the first line of the grid.
Drop indicator now draws all the way to the right in Data Grid forms.
1.0.2 build 3 Custom column controls now inherit the standard column behavior or the "default column behavior" (if set) if no behavior has been assigned to the control.

1.0.2 build 2 Column headers were not properly aligned when redrawing the Data Grid.Column header labels were not being properly positioned when rednering if header alignment was centered.

1.0.2 build 1 If a Data Grid table didn't have any data in it then the horizontal scrollbar would not keep the column headers and columns in sync if the column width was wider than the visible area of the Data Grid.

Setting "fixed row height" now calls ResetList internally. This ensures that all dataand accompanying row hilites are redrawn properly based on new setting.
_VisibleSequences was not returning proper values in all cases. This affected dgVisibleLines.
Added "header divider color" and "header divider threed color"
AddData could potentially send "FillInData" with messages locked if a developer had locked messages before calling it.

Specific bug fixes

(bug fixes specific to the current build are highlighted in bold)
User image libraries created with conflicting ID ranges
User image libraries not sorted in drop-down lists
Standalone settings does not update 'PDF Printer' check box correctly
Changed references to Revolution to LiveCode in various dialogs and windows
8970 Ctrl-C fails in variable visualizer

Standalone Builder doesn't include revsecurity.so when needed on Linux
Standalone Builder doesn't include externals
revPrintField does not work well with 'open printing to pdf'
Revolution appears in the re-license dialog.
Resource Center can open in a corrupted state.
Corrected 'LiveTalk' reference in about dialog.
Standalone builder creates incorrect plist for Mac and fails to include default icon.
5117 Custom functions called from msg box can't use variable values from debugger
6505 WatchedVariables not supporting globals.
7031 Icon chooser does not display user image libraries
7136 lockMessages being displayed in the Message Box list makes no sense
7291 Property inspector windowShape field behavior not the most friendly
7700 Property inspector doesn't allow firstIndent to be set back to zero
7879 Standalone builder won't allow custom plist to be removed from settings
7929 revNumberOfRecords function incorrectly documented return value
7970 Standalone builder gives unhelpful warning when attempting to include Oracle driver in
Linux build
7992 Data Grid cannot be created from main IDE menu bar
8002 Property inspector doesn't allow changing stack name where only case is different
8023 Inconsistency between creating Data Grid by dragging and by double clicking
8046 Column resizing button in Data Grid inspector not disabling correctly
8079 Dictionary doesn't reset scroll when changing entry
8088 Script editor resizing problem on Mac OS X
8142 Polygon tool can't draw polygons with more than 10 sides
8147 Duplicate stack error when resuming suspended development tools
8148 Various IDE windows resizing problems
8152 Recent stack icons in Start Center not responding to mouse click
8157 Stacks with "!" at beginning of name don't show properly in IDE Window menu
8179 Launch document documentation needed improvement
8206 Text clipping problem in Property Inspector
8236 Logging message left in IDE

8286 Message box not showing error hints
8291 Command + A doesn't work to select all in script editor find field
8299 Command+w closes debugger when variable visualizer is focused
8300 Documentation incorrect for password property
8311 Documentation example problem for preOpenControl message
8321 Script editor documentation pane doesn't disambiguate clashing keywords
8376 Cancelling revBrowser navigation using browserCancel doesn't work
8388 Script editor handler list not updating when closing tab
8400 Build for Mac OS Classic checkbox incorrectly enabled on Windows and Linux
8431 Typo in message box scrolling code throws error
8438 Installer is PowerPC only and requires Rosetta to run
8450 Messages sent to stack while building standalone with externals
8454 revStudio dock icon badging is wrong
8470 Standalone build fails when building for multiple platforms and using cursors
8486 Dictionary resizing error
8491 Documentation entries for revTalk objects contained incorrect syntax section
8497 Variable viewer panes being incorrectly hidden when debugger regains focus
8523 Line number in Script Editor overlaps horizontal scrollbar
8536 Database external not included in Linux standalone with search for inclusions
8546 Message box too picky about function syntax
8548 Script editor handler list not updating after unlocking passworded script
8579 Menu builder preview bar not working properly due to extra controls
8608 Stacks with trailing spaces in their names fail to build on Windows
8651 Graphic with showName and lineSize of zero breaks property inspector
8655 LibUrl sending incorrect content-length header
8715 Command-A not working on dictionary
8719 Mnemonics for View and Edit in the main IDE menubar are the same
8734 Application browser not working well with edit group mode
8744 Images emptied by standalone builder with Copy Referenced files turned on
8965 Pasting text into the S/E find field causes it to be overwritten rather than inserted
8966 Cancelling installation does not work correctly.

Revisions

Revision 1 MW Document created for issue with 4.5-dp-4.
Revision 2 MW Updated engine bug fix list for 4.5-dp-5.
Updated IDE bug fix list for 4.5-dp-5.
Added section on new public-key cryptography support.
Added section on new randomBytes support.
Added section on SHA-1 digest support.
Added section on root certificate discovery support.
Revision 3 MW Updated engine bug fix list for 4.5-rc-1.
Updated IDE bug fix list for 4.5-rc-1.
Revised section on new licensing system
Revision 4 MW Fixed broken engine bug fix list.
Revision 5 MW Updated engine bug fix list for 4.5-rc-2.
Updated IDE bug fix list for 4.5-rc-2.
Updated standalone builder 'Web' section.

Revision 6 MW Updated engine bug fix list for 4.5 release.
Updated IDE bug fix list for 4.5 release.
Updated licensing section.