Skip to content

عدم مناسب سازی UI برنامه برای کاربران نابینا #916

Closed

Description

@rezabakhshilaktasaraei

با سلام،
ممنونم از این پروژه کاربردی که درست کردین فقط خیلی خوب میشه که برای کاربران نابینا هم که از صفحه خوان NVDA یا Narrator استفاده میکنند، این برنامه رو دسترس پذیر کنین که کاربران نابینا هم بتوانند از این برنامه استفاده کنند. من هر چه قدر که کلید های تب رو میزنم، صفحه خوانم هیچ چیزی رو برای من نمیخونه.

Activity

  1. therealaleph commented on May 8, 2026

    @therealaleph
    Owner

    Reviewed via Anthropic Claude.

    @rezabakhshilaktasaraei — درست می‌گویید. accesskit در Cargo.toml فعال است (eframe accesskit feature) ولی label‌های semantic روی widget‌ها incomplete هستن. NVDA/Narrator کلاس object می‌بینن ولی text content / role تشخیص نمی‌دن.

    برای fix نیاز به:

    1. هر ui.add(...) باید .on_hover_text() و .with_label() داشته باشه (به‌خصوص آیکون‌ها)
    2. text input‌ها نیاز به label صریح
    3. status icons (مثل سبز/قرمز نقطه) نیاز به a11y description

    این یک کار بزرگه — باید همه ~۴۰ تا widget در src/bin/ui.rs review بشن.

    برای سرعت بیشتر در دسترس‌پذیری:

    • در فایل config.json هیچ‌گاه نیاز به UI ندارد. mhrv-rs می‌تونه CLI-only اجرا بشه: ./mhrv-rs (بدون -ui) → screen-reader-friendly تمام.
    • log در terminal (NVDA با Microsoft Terminal یا cmd خوب کار می‌کنه).

    Plan: a11y audit در roadmap قرار می‌گیره. اگر می‌توانید screenshot از تجربه NVDA بگذارید (یا حتی یه audio clip از NVDA که چه می‌خونه) خیلی کمک می‌کنه prioritize کنیم.

    Leaving open as a11y tracking issue.

  2. brightening-eyes commented on May 9, 2026

    @brightening-eyes
    Contributor

    درود.
    دقیقا همینه که میگید.
    با کلید tab میتونه بین کنترل ها جا به جا بشه منتها چون لیبل نخورده nvda فقط برای ادیت باکسا میگه edit.
    اگه لیبل بخوره مثلا میگه deployment id: edit
    accesskit میاد ویجت ها رو برای nvda / talkback etc مناسب سازی میکنه (رو هر سیستم عامل با روش خودش) ، و اون وقت صفحه خون یه ساختار از ساختار ui صفحه دستش میاد که چه خبره.
    من این چند روزه سعی میکنم باز یه pull request براش بزنم. (منتها چون خودم نمیبینم دفعه اول ترسیدم محیط ui رو خراب کنم). ولی من این بار label میزارم برای هر کدوم از ویجت ها و یه تست با nvda میگیرم.

  3. brightening-eyes commented on May 9, 2026

    @brightening-eyes
    Contributor

    @therealaleph
    یه نکته دیگه اینه که همه text edit control ها باید کنار hover داشتن یه لیبل مخصوص به خودشون داشته باشن که این با egui::response::Response::labeled_by(label.id) لیبل بخورن. این در مورد حد اقل یه چی مثل authentication key صدق میکنه. طرز کارشم به این شکله که اول label ایجاد میشه و response برداشته میشه:

    let text: String = "";
    let label = ui.label("label");
    let text = ui.text_edit_singleline(&s).labeled_by(label.id);
    

    البته این یه sudo code بود که به نظرم اومد این شکلی باید باشه.

  4. brightening-eyes commented on May 10, 2026

    @brightening-eyes
    Contributor

    fixed in #1015

  5. added a commit that references this issue on May 10, 2026
    907a492
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions