TGViewer
کانال اطلاع‌رسانی توزیع پارچ کانال اطلاع‌رسانی توزیع پارچ @parchlinux · 2.15K subscribers
Post #1374 463
یکی از مشکلاتی که با پروژه کالامارس داشتیم، کدبیس لگسی اون بود که در هر به‌روزرسانی یکجا رو خراب می‌کرد.


در این نسخه‌های آتی پارچ که ما نصب کننده رو بازطراحی کردیم؛ یک سری مشکلات با کالامارس پیش اومده بود من‌جمله اینکه بخش‌هایی از qmlها رو با qt5 مدیریت می‌کرد که باعث می‌شد textboxها کار نکنن و براش نیازمند پاس دادن وریبل xcb باشیم که در گنوم و هایپرلند کار نمی‌کنه.

درنهایت هم کالامارس رو فورک کردیم؛ و این پچ رو روش اعمال کردیم:

https://github.com/parchlinux/calamares/commit/7cac7c222ab5d51ed83aefea379f05bcc1dc9c8f

توضیحات فنی برای افراد فنی:

علت اصلی این بود که QQuickWidget به‌جای داشتن یک پنجرهٔ Wayland واقعی، سین QML رو داخل یک QQuickWindow آف‌اسکرین رندر می‌کنه و فقط نتیجه رو داخل ویجت میزبان کپی می‌کنه. در نتیجه آبجکتی که QGuiApplication::focusObject گزارش می‌ده با آبجکتی که واقعاً داخل سین QML فوکوس گرفته یکی نیست. پروتکل‌های متن‌ورودی Wayland مثل text-input-v3 دقیقاً بر همین focusObject تکیه دارن، برای همین کامپوزیتور هیچ‌وقت نمی‌فهمید فیلدی برای تایپ فوکوس شده. روی X11 این مشکل اصلاً خودش رو نشون نمی‌داد چون فوکوس اونجا در سطح پنجره مدیریت می‌شه و ربطی به اینکه محتوای داخلی چطور رندر شده نداره، برای همین با فورس کردن xcb کار می‌کرد.

راه‌حلی که در پچ اعمال کردیم یک پل فوکوس بین QQuickWindow و QQuickWidget میزبانشه. تابع installQuickWidgetFocusBridge به سیگنال QQuickWindow::focusObjectChanged وصل می‌شه، با Qt::UniqueConnection که اگه چندبار صدا زده بشه دوباره کانکت نکنه. هر بار که آبجکت فوکوس داخل سین عوض می‌شه، اگه اون آبجکت یک QQuickItem باشه که پرچم ItemAcceptsInputMethod روش ست شده، یعنی واقعاً قراره چیزی توش تایپ بشه، فوکوس واقعی ویجت رو با setFocus می‌ذاریم و بعدش روی windowHandle پنجرهٔ اصلی درخواست activate می‌فرستیم. این کار باعث می‌شه focusObject سراسری برنامه با چیزی که کاربر واقعاً داره باهاش کار می‌کنه هماهنگ بمونه و کامپوزیتور بتونه فوکوس متن‌ورودی رو درست مسیر بده.

این پل رو هم توی سازندهٔ QmlViewStep صدا زدیم و هم توی onActivate، همراه با یک setFocus صریح روی m_qmlWidget، چون هر بار صفحهٔ جدیدی از کالاماریز فعال می‌شه باید فوکوس دوباره صراحتاً ست بشه وگرنه اولین فیلد صفحه اصلاً فوکوس نمی‌گیره. با این پچ مشکل روی گنوم و هایپرلند بدون نیاز به فورس کردن QT_QPA_PLATFORM=xcb حل شد.



@ParchLinux | پارچ لینوکس
GitHub libcalamaresui: install QQuickWidget focus bridge for Wayland text input · parchlinux/calamares@7cac7c2 Contribute to parchlinux/calamares development by creating an account on GitHub.
  • 🔥 10
  • ❤‍🔥 2
More from @parchlinux
  1. Sep 25, 2026یکی از ویژگی‌هایی که در پارچ استور به زودی پیاده‌سازی میشه برای افرادی که برنامه تولید می‌…
  2. Sep 22, 2026انتشار نسخه ۰.۲.۵ فروشگاه پارچ در این نسخه پشتیبانی کامل از AUR اضافه شد؛ جستجو، نصب و برو…
  3. Sep 21, 2026کانال اطلاع‌رسانی توزیع پارچ pinned a photo
  4. Sep 21, 2026دسترسی به مستندات و راهنماهای آزاد به زبان فارسی، یکی از گام‌های مهم برای رشد جامعه کاربری…
  5. Sep 20, 2026دورهمی روز آزادی نرم‌افزار شماره ۲۸۲ 🎉 به مناسبت روز آزادی نرم‌افزار تصمیم گرفتیم که در ت…
  6. Sep 20, 2026مفتخریم که عرضه عمومی نسخه اولیه پارچ استور را با پشتیبانی از مدیربسته آرچ اعلام کنیم 🥳 پ…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →