Cinnamon: يتعطل برنامج الإعلام الخفي عندما يحتوي تلميح "مسار الصورة" على اسم رمز

تم إنشاؤها على ٢١ أبريل ٢٠١٨  ·  3تعليقات  ·  مصدر: linuxmint/cinnamon

""

  • القرفة والقرفة 3.6.7
  • توزيع Linux Mint 18.3 Sylvia
  • 64 بت
    ""

قضية

لا يدعم البرنامج الخفي للإعلام أسماء الرموز.

على جانب التطبيق ، أستخدم GApplication لإرسال الإشعارات. لقد قمت بتعيين رمز باستخدام هذا الرمز اللطيف:

icon = g_themed_icon_new("edit-copy");
g_notification_set_icon(notif, icon);
g_application_send_notification(app, "notif-id", notif);

سيؤدي هذا الرمز إلى تعطيل طلبي بشكل أساسي. سبب التعطل هو خطأ في glib ، والذي تم تشغيله بسبب انتهاء مهلة send_notification (). تنتهي المهلة نظرًا لأن البرنامج الخفي لإشعار Cinnamon لم يعد يرد ، وربما تعطل أيضًا.

لقد تعقبت ذلك بقدر ما أستطيع. على جانب المتصل أولاً (على سبيل المثال ، Bug 745634 ، وتمت إضافته في glib ec1edef3 .

الآن إذا نظرت إلى هذا الملف ، يمكنك أن ترى أن التنفيذ سيحفظ الرمز في النهاية في تلميح image-path . الأمر الذي يقودنا إلى خطوات التكاثر ...

خطوات التكاثر

لذا يمكننا إعادة إنشاء استدعاء dbus الذي يتم إرساله بواسطة g_application_send_notification() . بالنسبة للصورة ، يمكننا إما استخدام مسار كامل (هذا ما تحصل عليه إذا استخدم المتصل GFileIcon) ، أو ببساطة اسم الملف بدون الامتداد (هذا ما تحصل عليه إذا استخدم المتصل GThemedIcon).

إعداد مسار كامل يعمل:

IMAGE=/usr/share/icons/Adwaita/48x48/actions/edit-copy.png
python -c "import dbus; print dbus.Bus().call_blocking(\
    'org.freedesktop.Notifications', \
    '/org/freedesktop/Notifications', \
    'org.freedesktop.Notifications', \
    'Notify', \
    'susssasa{sv}i', \
    ('appname', 0, '', 'summary', 'body', [], {'image-path': '$IMAGE'}, -1))"

لا يتم تعيين اسم رمز ، فلا يوجد إخطار معروض:

IMAGE=edit-copy
python -c ... # copy-paste the snippet above

معلومات أخرى

الأمر متروك لك لتقرير ما إذا كنت تريد دعم الأيقونة ذات السمات أم لا في برنامج الإخطار الخفي ، ولكن على الأقل يجب أن يتعامل برنامج الإعلام الخفي بأمان مع أي إدخال غير هام يتم إرساله بواسطة التطبيقات في تلميح image-path .

أضفت بعض السجلات في Cinnamon Javascript ، وانتهى بي الأمر هنا في الملف js/ui/notificationDaemon.js :

       } else if (hints['image-path']) {
           return textureCache.load_uri_async(GLib.filename_to_uri(hints['image-path'], null), size, size);

لا يتم إرجاع هذه المكالمة أبدًا لأن GLib.filename_to_uri يثير استثناءً لم تتم معالجته. لقد لاحظت وجود عدد قليل من هذه المكالمة في الملف ، حيث لا يتم التعامل مع الاستثناءات.

لقد أضفت كشف حساب try catch ، ومع ذلك لا يزال الإخطار غير معروض. لم أذهب أبعد من ذلك.

آمل أن يساعدك هذا ، لا تتردد في الاتصال بي لمزيد من التفاصيل. هتافات،

أرنو

BUG BUG REPRODUCED

التعليق الأكثر فائدة

@ icarter09 نعم ، لا تزال هناك مشكلة هنا ، تستخدم فيدورا itzexor WIP لإصلاحها

https://github.com/itzexor/Cinnamon/commit/d56f1cca19867dfa44b79e654f729d2f27319e1f

ال 3 كومينتر

elboulangero هل ما زلت تواجه هذه المشكلة؟

@ icarter09 آسف لقد اكتشفت ذلك فقط أثناء إجراء بعض الاختبارات في Cinnamon VM ، بعد أن أبلغ المستخدم عن تعطل مع Goodvibes على Cinnamon. أنا لا أركض القرفة بنفسي لذلك لا أستطيع أن أقول.

هذا ما قيل أنه يمكنك تجربة "خطوات إعادة الإنتاج" أعلاه لمعرفة ما إذا كانت لا تزال تمثل مشكلة

في صحتك

@ icarter09 نعم ، لا تزال هناك مشكلة هنا ، تستخدم فيدورا itzexor WIP لإصلاحها

https://github.com/itzexor/Cinnamon/commit/d56f1cca19867dfa44b79e654f729d2f27319e1f

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات