// 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"; 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
    }
}
