Επισκόπηση

Κάπου-κάπου, μπορεί να είναι χρήσιμο να μπορείτε να ενσωματώσετε ένα γραφικό συστατικό από μια άλλη εφαρμογή στην εφαρμογή σας. Η gtkmm επιτρέπει να το κάνετε αυτό με τις κλάσεις Gtk::Socket και Gtk::Plug. Δεν είναι αναμενόμενο ότι πάρα πολλές εφαρμογές θα χρειαστούν αυτήν τη λειτουργία, αλλά στην σπάνια περίπτωση που χρειαστείτε να εμφανίσετε ένα γραφικό συστατικό που εκτελείται σε μια ολότελα διαφορετική επεξεργασία, αυτές οι κλάσεις μπορεί να είναι πολύ χρήσιμες.

Η επικοινωνία μεταξύ μιας Socket και μιας Plug ακολουθεί το πρωτόκολλο XEmbed. Αυτό το πρωτόκολλο έχει επίσης υλοποιηθεί σε άλλα πακέτα εργαλείων (π.χ. Qt), που επιτρέπουν το ίδιο επίπεδο ενσωμάτωσης όταν ενσωματώνεται ένα γραφικό συστατικό Qt σε GTK+ ή αντίστροφα.

Ο τρόπος που οι Sockets και Plugs δουλεύουν μαζί είναι μέσα από τα αναγνωριστικά του παραθύρου τους. Και οι δυο Socket και Plug έχουν αναγνωριστικά που μπορούν να ανακτηθούν με τις συναρτήσεις μέλους τους get_id(). Η χρήση αυτών των αναγνωριστικών θα εξηγηθεί παρακάτω στο Ενότητα 22.1.3 ― Σύνδεση δοτών και δεκτών.

22.1.1. Δότες (Sockets)

Μια Socket είναι ένα ειδικό είδος γραφικού συστατικού περιέκτη που παρέχει την ικανότητα ενσωμάτωσης γραφικών συστατικών από μια διεργασία σε μια άλλη διεργασία με έναν τρόπο που είναι διαφανής στον χρήστη.

22.1.2. Δέκτες (Plugs)

Μια Plug είναι ένα ειδικό είδος παραθύρου που μπορεί να συνδεθεί με μια Socket. Εκτός από τις κανονικές ιδιότητες και μεθόδους της Gtk::Window, μια Plug παρέχει έναν κατασκευαστή που παίρνει το αναγνωριστικό μιας Socket, που θα ενσωματώσει αυτόματα την Plug στην Socket που ταιριάζει αυτό το αναγνωριστικό.

Αφού μια Plug είναι απλά ένας ειδικός τύπος μιας κλάσης Gtk::Window, μπορείτε να προσθέσετε περιέκτες ή γραφικά συστατικά σε αυτή όπως μπορείτε να κάνετε με οποιοδήποτε άλλο παράθυρο.

22.1.3. Σύνδεση δοτών και δεκτών

Αφού ένα αντικείμενο Socket ή μια Plug πραγματοποιηθεί, μπορείτε να πάρετε το αναγνωριστικό του με τη συνάρτησή του get_id(). Αυτό το αναγνωριστικό μπορεί έπειτα μοιράζεται με άλλες διεργασίες έτσι ώστε οι άλλες διεργασίες να ξέρουν πώς να συνδεθούν μεταξύ τους.

There are two basic strategies that can be used:

  • Create a Socket object in one process and pass the ID of that Socket to another process so that it can create a Plug object by specifying the given Socket ID in its constructor. There is no way to assign a Plug to a particular Socket after creation, so you must pass the Socket ID to the Plug's constructor.
  • Create a Plug independantly from any particular Socket and pass the ID of the Plug to other processes that need to use it. The ID of the Plug can be associated with a particular Socket object using the Socket::add_id() function. This is the approach used in the example below.