+struct shell_container {
+ struct agl_shell *agl_shell;
+ struct agl_shell_desktop *agl_shell_desktop;
+ // used to propagate events from C/C++ event handlers from the protocol
+ // to the QML in case we need them
+ Shell *a_shell;
+ ApplicationLauncher *launcher;
+};
+
+static void
+application_id_event(void *data, struct agl_shell_desktop *agl_shell_desktop,
+ const char *app_id)
+{
+ // this event is sent only when surfaces are being created. we call
+ // setCurrent() to take care of this the first time, with later state
+ // event changes being handled by the application_state_event()
+ struct shell_container *sc = static_cast<struct shell_container *>(data);
+ sc->launcher->setCurrent(QString(app_id));
+}
+
+static void
+application_state_event(void *data, struct agl_shell_desktop *agl_shell_desktop,
+ const char *app_id, const char *app_data,
+ uint32_t app_state, uint32_t app_role)
+{
+ struct shell_container *sc = static_cast<struct shell_container *>(data);
+ sc->launcher->setCurrent(QString(app_id));
+}
+
+static const struct agl_shell_desktop_listener agl_shell_desktop_listener = {
+ application_id_event,
+ application_state_event,
+};
+
+