// 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. // // Sticky keys, slow keys, bounce keys and mouse keys are AccessX, which is // an X11 SERVER feature. XKB under Wayland has no accessx option group at // all, and Hyprland does not implement one. The compositor will accept // "accessx:enable" as a keyboard option and store it, and nothing will ever // act on it -- so there is no switch here, and pointing at GNOME's panel // would be no better, since the daemon that applies those keys is not // running either. SettingsCard { title: "Keyboard accessibility" subtitle: "Sticky, slow and bounce keys are an X11 feature with no Wayland equivalent, so they are unavailable in this session. Offering them here would store a preference that 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" onTriggered: SystemSettings.openApplication("orca") } ActionRow { label: "GNOME accessibility settings" detail: "For the parts GNOME's own stack still owns" action: "Open" divider: false onTriggered: SystemSettings.openGnomePanel("universal-access") } } SettingsCard { visible: Accessibility.lastError !== "" title: "Could not apply" subtitle: Accessibility.lastError } }