+/* this could be a combintion or some sort */
+#define OUTPUT_ID "Virtual-1"
+
+static void
+global_add(void *data, struct wl_registry *reg, uint32_t name,
+ const char *interface, uint32_t)
+{
+ struct agl_shell_desktop **shell = static_cast<struct agl_shell_desktop **>(data);
+
+ if (strcmp(interface, agl_shell_desktop_interface.name) == 0) {
+ *shell = static_cast<struct agl_shell_desktop *>(
+ wl_registry_bind(reg, name, &agl_shell_desktop_interface, 1)
+ );
+ }
+}
+
+static void
+global_remove(void *data, struct wl_registry *reg, uint32_t id)
+{
+ /* Don't care */
+ (void) data;
+ (void) reg;
+ (void) id;
+}
+
+static const struct wl_registry_listener registry_listener = {
+ global_add,
+ global_remove,
+};
+
+static struct agl_shell_desktop *
+register_agl_shell_desktop(QPlatformNativeInterface *native)
+{
+ struct wl_display *wl;
+ struct wl_registry *registry;
+ struct agl_shell_desktop *shell = nullptr;
+
+ wl = static_cast<struct wl_display *>(native->nativeResourceForIntegration("display"));
+ registry = wl_display_get_registry(wl);
+
+ wl_registry_add_listener(registry, ®istry_listener, &shell);
+
+ /* Roundtrip to get all globals advertised by the compositor */
+ wl_display_roundtrip(wl);
+ wl_registry_destroy(registry);
+
+ return shell;
+}
+
+static QScreen *
+find_qscreen(const char *screen_name)
+{
+ QList<QScreen *> screens = qApp->screens();
+ QScreen *found = nullptr;
+ QString qstr_name = QString::fromUtf8(screen_name, -1);
+
+ for (QScreen *xscreen : screens) {
+ if (qstr_name == xscreen->name()) {
+ found = xscreen;
+ break;
+ }
+ }
+
+ return found;
+}
+
+