New and Improved Features
Click each section header to show or hide that section.
- R340/R7202: Migration from old technologies
This release continues the migration to more modern technologies, replacing the old (PowerPlant) threading code with POSIX compliant threads, aka PThreads.
An unpleasant side-effect of this migration was that the instances of AcquireEventFromQueue and YieldToThread crashes spiked upward in Helix 6.2.2. Helix 6.2.3 tracks down and eradicates virtually every instance of these problems. (We can’t guarantee you’ll never see another, but we’ll be shocked if you do!)
- R8565/R8710/R8713: Collection buffer load time reduced
An issue in macOS that causes extreme slowness when a progress thermometer is updated too frequently is avoided by sending fewer updates when the collection buffer is loading during startup. Although the effect is faster loading for all collections, larger collections see the most dramatic improvement.
- R8612: AppleScript ‘use’ command (Helix Data Suite) changed for Mavericks compatibility
macOS 10.9 (Mavericks) has appropriated the use command for loading Frameworks and Libraries into scripts. This conflicts with the Helix Data Suite’s use command, making it impossible to compile a script that contains a use command, unless the command is converted into the raw syntax form.
Helix 6.2.3 changes the command from ‘use’ to utilize thereby avoiding the conflict. The underlying Apple event code is unchanged, so compiled scripts should automatically notice this change.
Helix 6.2.3 also adds synonyms for the utilize command: use (to compile scripts saved as text) and callhelix (for compatibility with CallHelix 1.0 scripts). It also adds a synonym for the to parameter: action.
In addition, the AppleScript dictionary now refers to actions as legacy actions, although this does not require any changes for script compatability.
- R8631: Helix applications now sort to the proper application categories
macOS 10.7 and later allow the user to sort the Applications folder by application category. All Helix applications now contain the necessary information to sort into the appropriate categories. Helix RADE sorts to the ‘Developer Tools’ section, Helix Utility sorts to the ‘Utilities’ section, and all other applications sort to the ‘Productivity’ section.
- AppleScript Data Suite access from Design Mode
The AppleScript Data Suite (which provides access to data via the ‘CallHelix’ legacy suite) no longer requires the view to be on the user’s menus if the username provided when establishing access has Design Mode access.
- R8639: Helix Utility now accepts documents with a path length greater than 255 characters
The Classic era, the OS limited the length of a file path to less than 255 characters. That limitation is increased to 1024 characters in macOS. Helix Utility was testing the file path of internally stored documents and flagging them as damaged when the path length exceeded 255 characters, since this would have indicated some form of corruption. Helix now assumes that any length greater than zero is legal, and trusts the OS to catch errors before the document gets to Helix.
Also, it was discovered that in some cases, Helix Utility is able to truncate a record instead of deleting it entirely, preserving the valid data. Consequently, the message that appears when damaged records are found has been changed to read “Damaged records were removed or modified in the following relations…”
- R8648: Helix Utility can now remove additional damaged records
Helix Utility is now able to fix record damage when the record’s internal pointer indicates that it is stored entirely beyond the end of the file.
Bug Fixes and Improvements
Click each section header to show or hide that section.
- R6989: Form Permissions are now properly updated when switching between primary and secondary user menus
In a situation where a view is available on a secondary user menu (formerly a ‘submenu’) but not on the primary user menu from which the user entered the secondary menu, switching to the secondary user menu, opening the view, and then switching back to the primary user menu (via the ‘Top Menu’ command) would fail to update the form permissions for that view to reflect the permissions of the primary user menu. This has been fixed.
- R8479: Pictures aligned to center or right now display properly
When the alignment of a picture was center or right, the image was being both clipped and shifted, causing it to be incompletely displayed. This has been fixed.
- R8526: Fixed a crash when opening a view when Full Keyboard Access is on
If all of the control elements (checkboxes, radio buttons, etc.) on a view have their “allow click” property turned off, a conflict ensued when Full Keyboard Access could find no control to focus on. The crash that resulted has been fixed.
- R8568: All clear forms now focus on first field when opened
The specification for Helix 6.2 is that when an entry view opens with a record being displayed, focus is not put on the first field, thereby avoiding the accidental write lock situation that frustrates users. But the specification also states that if there is no record displayed, focus should go to the first field, to facilitate entry of new records.
Because of a number of complex factors, this was working only for very simple entry views. Attaching a post or including a subform would disrupt the process and the first field would not acquire focus. This has been fixed.
- R8591: Modifying a record on a cold form with defaulted values now properly updates fields
On a cold form with data rectangles containing both a field and abacus, deleting the data in the field of an existing record (i.e. to allow the default value to be restored) would appear as though the default would be stored, but in fact the stored data would be retained. The calculated default value is now properly stored.
- R8594: Editing records sequentially once again pre-selects text when advancing
Helix 6.2.2 attempted to address a bug (see R8592) that was causing data in a field where the user had set the insertion point, but not yet modified the data, to reselect the entire field. Unfortunately, that fix caused the field data to fail to be selected when advancing from one record to the next. Helix now properly distinguishes between these two conditions, and selects (or does not select) data as intended.
- R8604: Reopening a collection with open views containing dynamic popups no longer crashes
If a collection was closed, and a view containing numerous dynamic pop-ups was left open, reopening the collection could trigger a crash due to a conflict between the pop-up code and autosave. Helix now defers autosave until all windows are reopened.
- R8613: ‘Lookup Summary In’ tile no longer returns stale data when a subform is on the view
The presence of a subform could cause a Lookup ◊ Summary In ◊ tile to fail to update when an e.g. “Max +1” construction is used on an entry form. The lookup now properly updates. (This bug has existed since Helix 6.1.11.)
- R8622: Double clicking a button no longer locks up Helix
It was possible to cause Helix to hang by double-clicking on a button. Helix now ignores the second click.
- R8640: An ad-hoc query no longer triggers “Lookup” tile failures
When one or more records is selected in a list, an ad-hoc query is created on the selected records. Opening an entry view attached to the list displays just the selected records. If the next action after opening the entry view is a ‘Find…’ command, the record is displayed properly, but changes to fields used in calculations, e.g: lookup ◊ for id = changed id in ◊ would fail. This has been fixed.
- R8653: AppleScript issues manipulating subform links are fixed
Multiple bugs in the AppleScript implementation of subform linking have been fixed.
- R8654: AppleScript can now address a collection by name
AppleScript can now address a collection by name (e.g. tell collection "sales") instead of strictly by index id (i.e: tell collection 1).
- R8657: Reply of subform data is no longer truncated when non-stripped delimiter is found in a field
If one or more of the “strip [delimiter]” properties is turned off, attempting to retrieve data from a subform via AppleScript would truncate the subform data at the first instance of a non-stripped delimiter. The exception is the ‘get view data as Helix data’ legacy action, which was working correctly. Now all actions return the whole record.
- R8680: A defaulted field no longer reverts when a data change arrives
First reported only recently, we have traced this ancient Helix data entry bug back to Helix Express 1.0. It probably goes all the way back to the beginning of Helix.
The bug occurred only when editing an existing record on a view using a template containing a rectangle with a field and a default abacus that contains a lookup or statistics tile.
In particular, if the user deleted the stored data from that rectangle, allowing the abacus value to appear, and at some point between that action and storing the modified record, a data change occurred on another Client, or from an Apple event or even from simply activating a different view and modifying a record, the rectangle would revert to the previously stored value.
Helix now properly uses the recalculated abacus value as an updated default for the rectangle.
- R8705: The “Replace Existing Document”" dialog text is fixed
Two escape sequences (\n) for the newline character were appearing instead of actually inserting new lines. This is fixed.
- R8708: The ‘Locate’ tile now works correctly with negative starting points
The specification for the Locate ◊ Starting At ◊ In ◊ tile states that if you can “… specify a negative ‘starting at’ value to search right to left instead of the traditional left to right.” However, the search would always start from the far right, regardless of the negative value supplied. Helix now properly moves to the correct offset before starting the right to left search.
- R8716: Changing HxWriteDebugFile while Helix is running no longer crashes
In Helix 6.2 most preferences can be changed while the program is running, with the change taking effect immediately. But changing HxWriteDebugFile while the program was running would trigger a crash. This has been fixed.
In addition, Helix RADE would crash on launch if HxWriteDebugFile was set to true. (HxWriteDebugFile was originally designed for debugging Client/Server, and RADE did not quite know how to initialize the file.) This too has been fixed.
- R8723: A rare abacus optimization flag bug is fixed
A bug in prior versions of Helix RADE could cause the ‘optimization flags’ (“Includes form tile” through “Is a summary calculation’ in the Inspector) to be set incorrectly. This would result in various subtle (or not-so-subtle) incorrect results when the collection is used in Client/Server.
Understanding the optimization flags requires some explanation: All that is necessary for a specific flag (e.g. “Includes use from tile”) to be set is that one of that type of object (a use ◊ from ◊ tile in this example) be found anywhere in the chain of icons contributing to that abacus. That is, if an abacus contains an abacus (that contains an abacus… tracing all the way back to the root) that has the object in question, then the optimization flag should be set for every abacus that includes that object.
When this happens, it should be possible to correct the problem simply by making any change to the abacus. This should trigger a re-evaluation, which should set the flags properly. Unfortunately, in some cases that propagation would not be committed along with the change, leaving the flags in their original, incorrect state.
Prior to Helix 6.2.3, the only solution was to rebuild the affected abacus from scratch, replacing the bad one with the correctly-flagged version. Helix 6.2.3 corrects the optimization flags when the collection is opened, resulting in a permanent fix for this bug.
- R8716: Turning HxWriteDebugFile on/off while Helix is running no longer leads to a crash
If the status of HxWriteDebugFile was changed while a collection was open, Helix would crash the next time debug data was generated. Helix now properly handles changes to the HxWriteDebugFile state.
- R8733: Simple failure to find a just-entered record
When a record was added or replaced on a query-restricted view, the new record was not properly checked to see if it met the query criteria. Consequently, a Find operation could not always find a record that was just entered or replaced. Helix now correctly re-evaluates the query, so the record can be found by the query.
- R8734: Certain large collections no longer crash on open
For collections in the (approximately) 1.75 to 2.0 GB range, the automatic allocation of the collection buffers was calculated as a negative number, causing a crash in Mavericks. This is now handled properly.
- R8573/R8607: Server now properly releases Clients from the ‘logged in’ list
Helix Server was not updating its connection list when a Client disconnected, making it impossible for a user to log back in until somebody manually updated the list by opening the Server Info window and clicking the ‘Refresh’ button. It now updates immediately upon client disconnect (or crash).
- R8576: Unsuccessful Client connection time is now correct
What a Helix Client unsuccessfully attempts to connect to a collection, the attempt is noted in the Client Information window. Previously the ‘Logged In’ time of such a connection was noted as ‘1/1/1904’ — Helix Server now logs the correct time for the connection attempt.
- R8599: Cold entry view now respond correctly to a Refresh
When a cold entry view is open and the underlying query is changed, the query would not update in response to a ‘Refresh’ command, requiring that the view be closed and reopened. This has been fixed.
- R8609/R8615: Communication speed restored to previous levels (and better)
As a result of our need to quickly provide Mavericks compatibility, performance of Helix Client 6.2.2 was measurably slower than Helix Client 6.2.1. Helix Client 6.2.3 restores performance to 6.2.1 levels.
- R8681: AcquireEventFromQueue and other Helix Client/Server crashes
A bug in macOS causes applications (including Helix) to crash with an AcquireEventFromQueue error on certain systems. Defensive programming in Helix 6.2.3 eliminates every instance we can find of this crash in Helix Server. (Helix Client may still experience this problem; please report these to us via our standard bug reporting channel.)
- R8617: Using AppleScript to create relations in Server (and Engine) no longer damages the collection
If AppleScript was used to create a new relation while a collection was running in Helix Server or Helix Engine, the collection would be damaged. This has been fixed.
- R8715: A Client or Server running in macOS 10.4 or 10.5 no longer crashes on disconnect
A Client or Server would consistently crash when a Client was disconnected from the Server if that application was running in macOS 10.4 or 10.5. That is, a Client running in macOS 10.4 or 10.5 crashes on disconnect, and a Sever running on macOS 10.4 or 10.5 would crash when any Client disconnected. This has been fixed.
- R8369: Closing an abacus used to link a subform no longer generates a 6507 error
If a view using a template with a subform is open while an abacus used to link that subform is being edited, RADE would crash when the abacus editor window is closed. The problem was that the open view would attempt to redraw while the abacus and its associated index were in the process of being updated, and the abacus/index were unavailable at that time. The view now waits for the abacus/index re-evaluation to complete before redrawing.
- R8476: Un-defining a previously defined constant is now possible
The code that detects a legal value in a tile socket dialog did not consider ‘undefined’ legal, making it impossible to reset the constant to an undefined value via the dialog. Undefined is now considered a legal state.
In addition, minor maintenance is no longer required after changing constant.
- R8566: Applying structure with missing subform references no longer crashes
A crash occurred when a clipping containing templates that have subforms, but not the subform templates themselves, was applied to a collection. This is now handled correctly.
- R8577: A specific set of steps in a template editor no longer crashes
In prior versions, if you created a label rectangle, then immediate reverted the template and switched to the selection tool, a crash would occur when you clicked on the template. This has been fixed.
- R8593: Editing a collection’s ‘custom name’ property in the Inspector no longer crashes
The code for committing an icon name change assumed that the icon has a parent, but the collection icon has no parent, so setting the custom name for the collection resulted in a crash. This has been fixed.
In addition, there was confusion between how to handle the custom name, comments, and a background color properties, making it impossible at times to set these properties. These properties are now all set immediately upon change (i.e. no commit is required) which resolves both the crash and the confusion.
- R8619: The “About…” menu item can no longer be removed from user menus
When no “About…” menu item is found, macOS inserts its own generic version. Consequently, removing “About…” from the user menu is now prohibited.
In addition, it is noted that the “Check for Updates” command is included when a new user is created, but is not retroactively added to existing users. Collection designers should either add this command to their user menus, or instruct users to close existing collections in order to access it from the basic menu set. Note also that if “Check for Updates” is placed anywhere other than in the application menu, the user is incompatible with Classic.
- R8624: Clicking ‘cancel’ while deleting data from multiple unused fields no longer triggers a 7602 error
When deleting more than one unused field that still contains data, a dialog asks the user to confirm the data loss for each field. if the user clicked the ‘Cancel’ button for any of these dialogs, Helix would eventually crash with a 7602 error. This bug is fixed.
- R8632: Applying structure no longer allows Autosave to interfere
Applying structure to a collection could result in damage if an autosave occurred during the process. Helix now defers autosave until until the process is completed.
- R8636: Creating a Quick Entry view no longer resets the field formatting
If a flag type field is formatted as a checkbox or radio button at the field icon level, creating a Quick Entry view would reset the field format to plain text. This has been fixed.
- R8642: Dragging a fixed point field or abacus to a rectangle now correctly sets the format
When dragging a fixed point icon into a new data rectangle, the formatting information was not being correctly copied. If the designer subsequently checked the “use custom display” property before setting any custom attributes, the improper information would become trapped in the rectangle. This was most evident when attempting to change the number of decimal places displayed.
- R8644: Duplicating a label containing a large picture no longer leads to a crash
When a label rectangle containing a large picture was duplicated, the picture was moved to the new rectangle, leaving the original empty, and setting the stage for an eventual crash. Now the picture stays in the original and the new label rectangle is empty.
- R8656: Double clicking a socket of picture datatype no longer crashes
Attempting to open a tile socket (to enter a constant) that is expecting picture data no longer crashes. In addition, other tiles in the abacus that were mis-identified as containing picture data (as indicated by a blue background) no longer crash when double clicked.
- R8666: Formatting multiple custom labels simultaneously now processes each in turn
Attempting to set the ‘Custom labels’ property for multiple data rectangles at the same time was leading to a 7602 error. This has been fixed.
Note that when setting custom labels for multiple rectangles, the dialog is presented once for each rectangle. Since there is no visual clue as to which rectangle is being defined by any given dialog, this is of limited usefulness.
- R8674: Configuring multiple post operations is no longer allowed
It was possible to select more than one post icon and then click the “Post Operations” button in the Inspector, but this would result in an immediate crash. Helix now disables that button when more than one post icon is selected.
- R8742: Crash when closing an abacus with relation and list open
Since 6.2b21 (Helix RADE Preliminary Release 21) closing an abacus editor window while both the editor for the relation the abacus is in and a view containing a command rectangle whose sequence starts with “Select All Rows” was open would result in a crash. This has been fixed.