اختيار نظام النوافذ X

تُستخدم آليات التحديد ، وقص البيانات ، والسحب والإفلات في نظام X Window لتمكين المستخدم من نقل البيانات بين النوافذ . يُستخدم التحديد وقص البيانات عادةً عندما يُحدد المستخدم نصًا أو بيانات أخرى في نافذة ويلصقها في نافذة أخرى. أما السحب والإفلات، فيُستخدم عندما يُحدد المستخدم عنصرًا في نافذة، ثم ينقر على التحديد ويسحبه إلى نافذة أخرى.

بما أن نافذتي العرض قد تُداران بواسطة تطبيقين مختلفين، فإن هذه الآليات تتطلب عميلين مختلفين متصلين بخادم X نفسه لتبادل البيانات. يتضمن البروتوكول الأساسي لنظام X Window بعض الطلبات والأحداث الخاصة بتبادل التحديد، ولكن يتم النقل بشكل رئيسي باستخدام إرسال الأحداث وخصائص النافذة، وهي ليست خاصة بنقل التحديد.

يمكن نقل أنواع مختلفة من البيانات: عادةً ما تكون نصًا، ولكن يمكن أن تكون أيضًا صورة أو رقمًا أو قائمة بالأشياء، وما إلى ذلك. فيما يلي، سيتم النظر فقط في حالة النص.

الاختيارات النشطة والاختيارات السلبية

يمكن تصنيف طرق نقل البيانات إلى طرق نشطة وأخرى سلبية، وذلك بناءً على ما إذا كان على العميل الذي يتعامل مع البيانات المختارة المشاركة بنشاط في عملية النقل إلى العميل الذي يطلبها:

سلبي
عند تحديد بعض البيانات، يقوم العميل الذي يتعامل مع النافذة التي يتم فيها هذا التحديد بنقلها إلى مكان آخر، ولم يعد بحاجة إلى الاهتمام بها؛
نشيط
يتطلب نقل البيانات إلى العميل أن يشارك العميل "الذي يحتفظ" بالاختيار بنشاط في عملية التبادل.

تُعدّ عمليات التحديد والسحب والإفلات آليات فعّالة: فبعد تحديد نصٍّ ما في نافذة، يجب على البرنامج الذي يُدير النافذة دعم بروتوكول لنقل البيانات إلى التطبيق الذي يطلبها. في المقابل، تُعدّ مخازن القصّ آلية سلبية: فبعد تحديد نصٍّ ما، يُنقل إلى مخزن قصّ ويبقى هناك حتى بعد إغلاق التطبيق الذي يُدير النافذة وإغلاق النافذة. تُعتبر حافظة X آلية سلبية من وجهة نظر البرنامج الذي يُدير التحديد، ولكنها تتطلّب من البرنامج xclipboardدعم أي عملية نقل بيانات لاحقة.

تتمثل إحدى مزايا الآليات النشطة في إمكانية تحويل البيانات إلى تنسيق مختلف قبل نقلها. فعلى سبيل المثال، يمكن للعميل المُستقبِل للبيانات طلب تحويل البيانات المُختارة إلى تنسيق مناسب. وإذا رفض العميل المُرسِل ذلك، فيمكن للمُستقبِل طلب تنسيق مختلف. فعلى سبيل المثال، يمكن نقل نص مُعرَّف ككود HTML كنص إلى مُستقبِل لا يدعم سوى النصوص، أو ككود HTML إذا كان المُستقبِل يدعمه. لا يُمكن إجراء هذا التفاوض على التنسيق عبر الآليات السلبية، حيث يقوم العميل الذي يحتفظ بالبيانات المُختارة (ويُضفي عليها دلالات) بنقلها دون أن يُشارك في عملية النقل اللاحقة إلى العميل الذي يطلبها.

من مزايا الآليات النشطة الأخرى إمكانية نقل كميات كبيرة من البيانات عبر سلسلة من عمليات النقل بدلاً من عملية واحدة. أما الآليات السلبية، فتتطلب نقل جميع البيانات من مالك التحديد إلى مكان ما، ثم نقلها مرة أخرى إلى العميل الذي يطلبها.

تتمثل ميزة الآليات السلبية في إمكانية إتمام عملية النقل حتى بعد انتهاء خدمة العميل الذي يحتفظ بالبيانات. وهذا غير ممكن في الآليات النشطة، التي تتطلب مشاركة العميل الذي يحتفظ بالبيانات بشكل فعلي في عملية النقل.

مختارات

يدعم نظام X Window عددًا غير محدود من التحديدات؛ ويتم تعريف كل تحديد بواسطة سلسلة نصية (أو بالأحرى، سلسلة نصية atom). التحديد الأكثر استخدامًا هو PRIMARYالتحديد.

الطلبات التالية خاصة بنقل الاختيارات، على الرغم من أن النقل يشمل أيضاً طلبات أخرى:

  1. طلب معرفة النافذة التي تحتوي على التحديد
  2. طلب تحديد النافذة التي تحتوي على التحديد
  3. طلب تحويل التحديد

عادةً ما تكون النافذة التي يوجد بها النص المحدد هي مالكة النص المحدد، إن وُجدت. عندما يحدد المستخدم نصًا ما في نافذة، يجب على البرنامج الذي يتعامل مع النافذة إبلاغ الخادم بأن هذه النافذة هي مالكة النص المحدد.

عندما يحاول المستخدم لصق النص المحدد في نافذة أخرى، يبدأ معالج تلك النافذة بروتوكولًا لجلب النص المحدد من العميل الآخر. يتضمن هذا البروتوكول الطلبين الثاني والثالث المذكورين أعلاه، وهو غير محدد في بروتوكول X، بل هو اتفاقية في دليل اتفاقية الاتصال بين العملاء (ICCCM).

يبدأ العميل المُستقبِل، على وجه الخصوص، باستعلام الخادم عن النافذة التي تحتوي على الجزء المُحدد. ثم ينقل العميلان الجزء المُحدد عبر الخادم. يتضمن هذا التبادل خاصيةً من خصائص النافذة، وجزءًا عشوائيًا من البيانات مُرفقًا بها. إذا كان محتوى الجزء المُحدد صغيرًا بما يكفي لنقله دفعةً واحدة، فإن الخطوات التي تتم هي:

  1. يطلب متلقي التحديد تحويل التحديد، مع تحديد خاصية نافذة (قد تكون هذه هي النافذة التي يجب لصق النص فيها).
  2. ورداً على ذلك، يرسل الخادم حدثاً إلى المالك الحالي للاختيار SelectionRequest؛
  3. يضع المالك النص المحدد في خاصية النافذة التي حددها مقدم الطلب عن طريق إرسال ChangePropertyطلب فاصلة منقوطة (;) إلى الخادم.
  4. يرسل المالك طلبًا إلى الخادم لإرسال إشعار إلى مقدم الطلب SelectionNotifyلإبلاغه بنقل الاختيار.
  5. يمكن للمرسل الآن قراءة التحديد في خصائص النافذة عن طريق إرسال GetPropertyطلب واحد أو أكثر إلى الخادم؛
  6. يقوم مقدم الطلب بتدمير الممتلكات؛ وإذا طلب المالك إبلاغه بذلك، فسيتم إرسال PropertyNotifyحدث إليه.

إذا كان المحتوى كبيرًا، فينبغي نقله على أجزاء. في هذه الحالة، يُبدي كلا الطرفين اهتمامًا PropertyNotifyبالأحداث: بهذه الطريقة، يعرف مالك التحديد متى تمت قراءة التحديد، ويعرف طالب النقل متى تم وضع جزء آخر في الخاصية.

تتيح إضافة XFixes للعملاء الاستماع إلى تغييرات التحديد. [ 1 ]

لوحة كتابة

يُعدّ التحديد الأكثر استخدامًا PRIMARY، ويُستخدم عندما يُحدّد المستخدم بيانات معينة. يُستخدم التحديد عندما يُحدّد المستخدم بيانات معينة ويطلب صراحةً نسخها إلى الحافظة، كما في حالة اختيار "نسخ" من قائمة "تحرير" في أحد التطبيقات. ويؤدي طلب "لصق" المرتبط به إلى استخدام CLIPBOARDالبيانات المحددة .CLIPBOARD

على مستوى البروتوكول الأساسي، لا يختلف التحديدان. لكن PRIMARYالعميل هو من يُغيّر سلوكهما. فعندما يُؤكد عميل آخر ملكية التحديد ، يطلب هذا البرنامج التحديد ويعرضه في نافذة. ويتم التعامل مع أي طلب لاحق لهذا التحديد بواسطة البرنامج . وبهذه الطريقة، يبقى محتوى التحديد محفوظًا حتى بعد نسخه من قِبل العميل.CLIPBOARDxclipboardCLIPBOARDxclipboard

قطع الحواجز

تُعدّ مخازن القص آلية أخرى لنقل البيانات، وخاصة النصوص المحددة. وهي خصائص نافذة تابعة للنافذة الجذرية ، وتُسمى CUT_BUFFER1، وما إلى ذلك. على عكس التحديدات، لا تتضمن مخازن القص تفاعلاً مباشراً بين المستخدمين. فعند تحديد نص في نافذة، يقوم مالك النافذة بنسخ هذا النص إلى خاصية النافذة الجذرية المسماة CUT_BUFFER1. وعندما يلصق المستخدم النص في نافذة أخرى، يقرأ مالك النافذة هذه الخاصية من النافذة الجذرية.

يقوم البرنامج xcutselبنقل البيانات بين التحديدات ومخازن القطع، كما xcbيسمح البرنامج بأنواع مختلفة من الوصول إلى مخازن القطع.

تعتبر مخازن القطع قديمة الطراز. [ 2 ]

XDND

تُنظَّم عملية السحب والإفلات في نظام X Window وفقًا لاتفاقية Xdnd. [ 3 ] عندما يسحب المستخدم النص المحدد إلى نافذة ويحرر زر الماوس، يتم تبادل البيانات كما لو كان النص المحدد هو النص الأصلي. وتزداد عملية السحب والإفلات تعقيدًا بسبب ما يحدث أثناء السحب. فعندما يسحب المستخدم النص المحدد إلى أجزاء مختلفة من سطح المكتب أو النافذة، يتوقع أن يكون قادرًا على معرفة ما إذا كان النص قابلًا للإفلات أم لا. وعلى وجه الخصوص، يجب أن يُظهر العنصر المستهدف مؤشرًا مرئيًا يُفيد بقبول الإفلات من عدمه، وأن يتغير شكل المؤشر للإشارة إلى الإجراء المطلوب تنفيذه، مثل النسخ أو النقل.

في بروتوكول Xdnd، تُسمى النافذة التي يُحدد فيها النص ويبدأ السحب "المصدر" ، بينما تُسمى النافذة التي يُحوم فوقها المؤشر " الهدف ". يتم التحكم في الاتصال بين المصدر والهدف من قِبل المصدر لأنه "يستحوذ" على المؤشر. لذا، يُعد تبادل البيانات بين المصدر والهدف ضروريًا لكي يعرف الهدف بحدوث عملية السحب والإفلات. وبما أن المصدر هو من يُحدد شكل المؤشر، فيجب أن يتلقى استجابة من الهدف لتحديثه. إضافةً إلى ذلك، ولأن الهدف قد يحتاج إلى رسم مؤشر لتحديد مكان الإفلات، ولأن قبول الإفلات قد يعتمد على الموقع الدقيق للمؤشر، يجب أن يتكرر هذا التبادل باستمرار مع تحرك المؤشر. في الواقع، حتى لو لم يتحرك المؤشر، يجب تبادل الرسائل للسماح للهدف بالتمرير عندما يكون المؤشر قريبًا من حافة منطقة العرض. وإلا، فلن يتمكن المستخدم من الإفلات إلا على الجزء المرئي من الهدف.

يمكن للبرنامج تحديد إمكانية استهداف نافذة معينة بعملية إسقاط (drop) من خلال إنشاء خاصية تحمل اسمًا XdndAwareيحتوي على أعلى إصدار من البروتوكول الذي يدعمه البرنامج. بهذه الطريقة، يمكن للتطبيقات التي تدعم الإصدارات الأحدث الرجوع إلى الإصدارات الأقدم لضمان التوافق. بالإضافة إلى ذلك، سيتم تجاهل جميع التطبيقات التي لا تدعم بروتوكول Xdnd.

عندما يدخل المؤشر إلى النافذة المستهدفة، يتحقق المصدر من وجود الخاصية XdndAwareفي تلك النافذة. إذا كانت هذه الخاصية موجودة، يبدأ تبادل البيانات.

  • يُبلغ المصدر الهدف بأن المؤشر قد دخل الهدف أثناء سحب بعض البيانات عن طريق إرسال حدث.XdndEnter
  • يمكن للمستخدم المستهدف معرفة نوع البيانات التي تم سحبها (نص، صورة، إلخ) من خلال النظر إلى هذا الحدث، وربما من خلال مزيد من التفاعل مع المصدر.

بينما يكون المؤشر داخل النافذة المستهدفة:

  • يرسل المصدر XdndPositionأحداثًا لإبلاغ الهدف بمكان وجود المؤشر حاليًا
  • يرد الهدف XdndStatusبأحداث لإبلاغ المصدر ما إذا كان يمكن إسقاط البيانات في الموضع الحالي
  • يرسل المصدر رسالةً XdndLeaveعند XdndDropمغادرة المؤشر للنافذة أو عند تحرير الزر، على التوالي.

إذا قام المستخدم بإسقاط العنصر، يطلب الجهاز المستهدف تحديد العنصر من المصدر كالمعتاد. وعند اكتمال نقل العنصر المحدد، يرسل الجهاز المستهدف إشعارًا XdndFinishلإعلام المصدر بنجاح عملية النقل.

باختصار، يعتمد البروتوكول على المصدر، الذي يُبقي الهدف على اطلاع بما يحدث مع المؤشر. في المقابل، يُخبر الهدف المصدر ما إذا كان سيتم قبول عملية الإفلات أم لا. كما يجب إبلاغ الهدف عند تحرير المستخدم زر الفأرة، لأن هذا الحدث يُطلق طلبًا دوريًا للاختيار، وهو بروتوكول يعتمد على الهدف.

ما سبق هو وصف لاتفاقية Xdnd الخاصة بالسحب والإفلات. وتُستخدم اتفاقيات مختلفة للسحب والإفلات في Motif وOffiX وAmulet.

إكس دي إس

بروتوكول الحفظ المباشر ، المختصر بـ XDS ( اختصارًا لـ X Direct Save Protocol)، هو بروتوكول برمجي يدعم حفظ الملفات عن طريق سحبها إلى نوافذ مدير الملفات . يعتمد XDS على بروتوكول XDND . [ 4 ] [ 5 ]

البرامج

تعتمد البرامج التالية تحديدًا على آليات نقل البيانات:

  • يقوم برنامج xcutsel بنقل البيانات من التحديدات إلى مخازن القطع أو العكس.
  • xclipboard و glipper ( في بيئة جنوم ) و parcellite ( في بيئة LXDE ) و klipper ( في بيئة KDE ) هي برامج لإدارة الحافظة ، وربما wmcliphist أيضاً.
  • يعرض xcb محتوى مخازن القطع ويسمح للمستخدم بالتحكم بها
  • تُعدّ xselection و xclip و xsel و xcopy برامج سطر أوامر تُستخدم لنسخ البيانات من وإلى تحديد X. يحتوي xcopy على خيار تفصيلي يُساعد في تشخيص مشاكل تحديد X. كما يُتيح parcellite إمكانية القراءة والكتابة من وإلى تحديدات X مُحددة عبر سطر الأوامر.
  • برنامج Synergy هو أداة متعددة المنصات تتيح لك مشاركة الحافظة عبر أجهزة كمبيوتر متعددة تعمل بأنظمة تشغيل متعددة
  • xfce4-clipman-plugin هو "إضافة لسجل الحافظة للوحة Xfce4" وهو أيضًا مدير للحافظة
  • يقوم برنامج xtranslate بالبحث عن الكلمات في Xselection في قاموس متعدد اللغات
  • يقوم برنامج autocutsel بمزامنة مخزن القطع ومخزن التحديد

انظر أيضاً

مراجع

  1. "c - X11 Wait for and Get Clipboard Text" . Stack Overflow . تم الاطلاع عليه بتاريخ 27-07-2021 .
  2. زاوينسكي، جيه دبليو (2002). عمليات التحديد X، ومخازن القطع، وحلقات الحذف. تم استرجاعه في 13 يوليو 2010 من http://www.jwz.org/doc/x-cut-and-paste.html
  3. بروتوكول السحب والإفلات لنظام X Window، من https://www.freedesktop.org/wiki/Specifications/XDND/
  4. ليندال، جون. "حفظ الملفات عبر السحب والإفلات: بروتوكول الحفظ المباشر لنظام X Window" . مؤرشف من الأصل في 5 مارس 2016.
  5. "حفظ الملفات عبر السحب والإفلات: بروتوكول الحفظ المباشر لنظام X Window" . freedesktop.org . مؤرشف من الأصل بتاريخ 22 مارس 2015. تم الاطلاع عليه بتاريخ 20 سبتمبر 2018 .