Search code examples
clinuxgtkgtk3

is it possible run an app inside another app in GTK?


My question was about weather it would be possible to embed the contents of a window (such as a terminal emulator, browser, game, or any other X org app) inside of a GTK3 application. This means that the user can still interact with the app and see contents of it. I am running Debian 11 64-bit and I want to make the app using C.


Solution

  • The closest I have seen is using a GtkPlug and a GtkSocket:

    Together with GtkSocket, GtkPlug provides the ability to embed widgets from one process into another process in a fashion that is transparent to the user. One process creates a GtkSocket widget and passes the ID of that widget’s window to the other process, which then creates a GtkPlug with that window ID. Any widgets contained in the GtkPlug then will appear inside the first application’s window.

    The communication between a GtkSocket and a GtkPlug follows the XEmbed Protocol. This protocol has also been implemented in other toolkits, e.g. Qt, allowing the same level of integration when embedding a Qt widget in GTK+ or vice versa.

    An example of this is the xfce-settings-manager, which you can study here (search for "socket-id" in the repo).

    Notes:

    1. GtkPlugs and GtkSockets are X11 specific. If you are looking for something cross platform, this might not be it.
    2. It seems both of these no longer exist in Gtk4.