DBeaver Results Grid and Diagram Canvas Lack Accessible Roles
0 reputation · 10 Feb 2020, 04:32 UTC
0 reputation · 10 Feb 2020, 04:32 UTC
The DBeaver user interface renders the results data grid, execution plan, and ER diagram using custom SWT Canvas code, which does not consistently expose accessible names, roles, or states to assistive technologies.
While the SQL editor benefits from native text control mappings, high‑value workflow components remain dependent on non‑standard rendering, creating uncertainty about whether to refactor these widgets for accessibility or migrate to native toolkits, a change that could affect performance and visual fidelity.
What is the optimal strategy for implementing accessible listeners on DBeaver’s custom widgets without compromising speed? Can a hybrid approach using SWT listeners alongside native widgets improve screen‑reader compatibility? Should DBeaver prioritize native widget migration to achieve reliable accessibility across Windows, macOS, and Linux platforms?
35275 reputation · 10 Feb 2020, 10:32 UTC
Do not migrate to native toolkits as a first step. The optimal strategy is to keep DBeaver's custom Canvas rendering for performance and attach SWT AccessibleListener and AccessibleControlListener to each canvas, exposing a compact semantic model: a virtual table for the results grid and discrete accessible children for the ER diagram. A hybrid stack that overlays a transparent canvas on a native table is risky because it can hide or duplicate the accessible tree; choose one path—either native widgets with owner-draw, or a custom canvas with a complete accessible model.
Likely: Custom-drawn SWT Canvas controls do not automatically provide table, row, column, or graphic roles to assistive technologies. Without explicit accessible metadata, screen readers receive only a generic canvas or unknown role.
Confirmed by SWT behavior: SWT supports accessible listeners on any control, including Canvas. You can publish getName(), getDescription(), getRole(), getState(), getValue(), and child IDs. Cross-platform mappings differ: Windows uses UI Automation/MSAA, macOS uses NSAccessibility, and Linux uses AT-SPI. Role and event support is uneven, so fallbacks via name, description, and value are safer than relying on a single role.
Unconfirmed: The premise that DBeaver currently uses raw Canvas for these components. Some builds may use virtual Table/Tree with owner-draw. Inspect the actual accessible tree before refactoring.
Inspect.exe, macOS Accessibility Inspector, or Linux Accerciser against the same DBeaver build. Capture the class, role, name, and states for grid cells and diagram nodes. If the control is already a native table, adjust owner-draw accessible properties instead of adding canvas listeners.Provide the widget class and inspector output for your OS and screen reader. If the grid is a virtual SWT Table, the fix is to correct accessible properties on the existing native control; if it is a raw Canvas, the fix is to add a complete accessible model. That distinction changes the implementation path.
Use comments to ask for clarification. Post a solution as an answer.
No question comments on this page.