// Accessibility. // // Pointer size and text scale have to agree across three consumers that share // no configuration system -- the compositor, GTK applications, and the shell. // Panama's store is the source of truth and services/Accessibility.qml pushes // the value to the other two. import QtQuick import qs.config import qs.services SettingsPage { id: root title: "Accessibility" lede: "Make the desktop easier to see and easier to hit." SettingsCard { title: "Pointer" subtitle: "Applied to the compositor and to applications at the same time." SliderRow { setting: "cursorSize" } SliderRow { setting: "cursorInactiveTimeout"; zeroLabel: "Never"; divider: false } } SettingsCard { title: "Text" subtitle: "Scales text in applications. The shell's own panels are drawn at their design size, so they are unaffected." SliderRow { setting: "textScale" } // Reaches GTK4 applications through the desktop portal, which // republishes it as org.freedesktop.appearance contrast. No // high-contrast theme is involved, and none is installed here -- older // GTK3 applications will not change. ToggleRow { setting: "highContrast"; divider: false } } SettingsCard { title: "Motion" subtitle: "Nothing animates while idle. This affects motion you asked for — windows opening, workspaces sliding, panels appearing." ToggleRow { setting: "animationsEnabled"; divider: false } } // Zoom, done by the compositor rather than handed to GNOME. Hyprland has a // real magnifier (cursor:zoom_factor) that follows the pointer, so there is // no reason to send someone to another application for it. SettingsCard { title: "Magnifier" subtitle: "Magnifies the screen around the pointer. Set the magnification to 1× to turn it off." SliderRow { setting: "magnifierFactor"; zeroLabel: "Off" } ToggleRow { setting: "magnifierRigid"; divider: false } } SettingsCard { title: "Contrast" subtitle: "Unfocused windows can be faded or darkened to make the focused one obvious, or left alone if that is harder to read." SliderRow { setting: "inactiveOpacity" } ToggleRow { setting: "dimInactive" } SliderRow { setting: "dimStrength"; divider: false } } // What this session genuinely cannot do, said plainly -- and for the // right reason. On Wayland there is no protocol for sticky, slow or // bounce keys: each compositor implements its own (mutter does, which is // how GNOME has them on Wayland), and Hyprland does not yet. An earlier // version blamed "X11 feature with no Wayland equivalent", which sent // anyone who needs sticky keys to the wrong conclusion about the whole // platform. There is also deliberately no handoff to GNOME's // universal-access panel: its toggles are applied by GNOME Shell, and // the few that work through plain gsettings (cursor size, text scale, // high contrast) are owned by the controls above on this very page. SettingsCard { title: "Keyboard accessibility" subtitle: "Sticky, slow and bounce keys are implemented by each Wayland compositor for itself; Hyprland does not implement them yet, so they are unavailable in this session. Offering switches here would store preferences nothing acts on." ActionRow { label: "Screen reader" detail: "Orca reads the screen aloud and works over the accessibility bus, which does run here" action: "Start Orca" divider: false onTriggered: SystemSettings.openApplication("orca") } } SettingsCard { visible: Accessibility.lastError !== "" title: "Could not apply" subtitle: Accessibility.lastError } }