Glue42 Enterprise is now io.Connect Desktop! The new documentation site for all interop.io products is located at docs.interop.io.

Changelog

Glue42 Desktop

Release date: 11.04.2023

Components Version
Electron 23.2.1
Chromium 110.0.5481.208
Node.js 18.12.1

New Features

Workspace Window Groups

The @glue42/workspaces-ui-react library now offers new customizable elements and zones for the headers of window groups in a Workspace.

The following example demonstrates using custom components for the Before Tabs zone, as well as for the Workspace Window Tab and the Group Header Buttons elements:

import React from "react";
import Workspaces from "@glue42/workspaces-ui-react";
import CustomWorkspaceWindowTab from "./CustomWorkspaceWindowTab";
import CustomGroupHeaderButtons from "./CustomGroupHeaderButtons";
import CustomBeforeTab from "./CustomBeforeTab";

const App = () => {
    return (
        <Workspaces
            components={{
                groupHeader: {
                    WorkspaceWindowTabComponent: CustomWorkspaceWindowTab,
                    ButtonsComponent: CustomGroupHeaderButtons,
                    BeforeTabsComponent: CustomBeforeTab
                }
            }}
        />
    );
};

export default App;

Group Header

Web Groups Loading Animation

The @glue42/groups-ui-react library now enables you to use your own loading animation for the windows participating in your your custom Web Group App:

import React from "react";
import Group from "@glue42/groups-ui-react";
import CustomLoadingAnimation from "./CustomLoadingAnimation";

const App = () => {
    return (
        <Group
            components={{
                frame: {
                    LoadingAnimation: CustomLoadingAnimation
                }
            }}
        />
    );
};

export default App;

Web Groups Stickiness

Runtime Configuration

Stickiness of windows when using Web Groups can now be configured at runtime by using the configure() method of the Window Management API:

// Disabling window stickiness.
const config = { sticky: false };

await glue.windows.configure(config);

Sticky Button

The "Sticky" Button that lets users control window stickiness manually, is now available when using Web Groups.

Sticky Button

The "Sticky" button can be enabled globally from the system configuration of Glue42 Enterprise by using the "showStickyButton" property of the "windows" top-level key of the system.json file:

{
    "windows": {
        "showStickyButton": true
    }
}

The "Sticky" button can also be enabled or disabled per app from the app configuration file by using the "showStickyButton" property of the "details" top-level key:

{
    "details": {
        "showStickyButton": true
    }
}

Custom Protocol Handlers

Glue42 Enterprise now supports registering custom global protocol handlers in addition to the default Glue42 global protocol handler. The "protocolHandler" top-level key of the system.json configuration file of Glue42 Enterprise now can be set either to an object or to an array of objects defining one or more global protocol handlers:

{
    "protocolHandler": [
        {
            "enabled": true,
            "protocol": "my-custom-protocol",
            "type": "custom",
            "customHandler": "My.Custom.Protocol.Handler"
        },
        {
            "enabled": true,
            "protocol": "my-other-custom-protocol",
            "type": "custom",
            "customHandler": "My.Other.Custom.Protocol.Handler"
        }
    ]
}

Your custom protocol handlers must be registered as Interop methods by your system apps. They will be invoked when Glue42 Enterprise receives a command for your custom protocol. The following example demonstrates a minimal protocol handler implementation:

// Name of the protocol handler as defined in the configuration.
const name = "My.Custom.Protocol.Handler";
// Protocol handler implementation.
const handler = (data) => {
    console.log(data);

    // If nothing or `{ handled: false }` is returned,
    // the next available protocol handler will be invoked.
    return { handled: true };
};

await glue.interop.register(name, handler);

Streaming & Consuming System Logs

It's now possible to configure Glue42 Enterprise to stream the system logs so that they can be consumed by your apps. You can specify the log level and the interval at which the logs to be streamed. Use the "streaming" property of the "logging" top-level key of the system.json configuration file of Glue42 Enterprise to specify the log streaming configuration:

{
    "logging": {
        "streaming": {
            "enabled": true,
            "minLevel": "warn",
            "interval": 60
        }
    }
}

To consume the log entries in your apps, you must implement and register an Interop method named "T42.Logs.Listen". This method will be invoked whenever Glue42 Enterprise streams the system logs. The method handler will receive an object with an entries property as an argument which holds an array of objects each describing the individual log entries:

const name = "T42.Logs.Listen";
const handler = logs => logs.entries.forEach(e => console.log(e.source, e.logEntry));

await glue.interop.register(name, handler);

Flashing Window Tabs

The tabs of windows in a tab group can now be made to flash programmatically using the flashTab() method of the GDWindow object. The tab will stop flashing automatically when the user clicks on it to focus the tab window. This may be useful when you want to prompt the user to take action in a window that is currently behind other tabbed windows:

// Pass a Boolean value as an argument to make the window tab start or stop flashing.
await myWindow.flashTab(true);

Tab Flash

Restricting Window Stickiness

Using the "stickyGroup" property of the "details" top-level key in the app configuration file, you can create groups of windows that will stick to each other, but not to other windows that don't have the same sticky group:

{
    "details": {
        "stickyGroup": "my-sticky-group"
    }
}

You can also use the stickyGroup property of the WindowCreateOptions or ApplicationStartOptions objects to specify a sticky group when opening windows or starting app instances at runtime:

const name = "glue42-docs";
const url = "https://docs.glue42.com";
const options = {
    stickyGroup: "my-sticky-group"
};

// Opening a Glue42 Window.
await glue.windows.open(name, url, options);

// Starting a Glue42 app instance.
await glue.appManager.application("getting-started").start(null, options);

Improvements and Bug Fixes

  • Upgraded to Electron 23 (Chromium 110).

  • Improved compatibility with NVDA screen reader.

  • Improved handling file naming when saving files with Native File Drag & Drop.

  • Glue42 Enterprise now shows a dialog window instead of the Feedback Form if connecting to the Glue42 Server fails.

  • Fixed a bug where an error would be thrown when a window gets focus programmatically.

  • Fixed scaling issues when starting the embedded Glue42 Toolbar as minimized.

  • Minor improvements and bugfixes.