sh->shell =
static_cast<struct agl_shell *>(wl_registry_bind(reg, id,
&agl_shell_interface,
- std::min(static_cast<uint32_t>(3), version)));
+ std::min(static_cast<uint32_t>(5), version)));
agl_shell_add_listener(sh->shell, &shell_listener, data);
sh->version = version;
} else if (strcmp(interface, "wl_output") == 0) {
sh->shell =
static_cast<struct agl_shell *>(wl_registry_bind(reg, id,
&agl_shell_interface,
- std::min(static_cast<uint32_t>(3), version)));
+ std::min(static_cast<uint32_t>(5), version)));
agl_shell_add_listener(sh->shell, &shell_listener_init, data);
sh->version = version;
}
void
Shell::DeactivateApp(const std::string &app_id)
{
- (void) app_id;
+ struct agl_shell *shell = this->m_shell.get();
+
+ agl_shell_deactivate_app(shell, app_id.c_str());
+ wl_display_flush(m_shell_data->wl_display);
}
void
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.
</copyright>
- <interface name="agl_shell" version="4">
+ <interface name="agl_shell" version="5">
<description summary="user interface for Automotive Grade Linux platform">
Starting with version 2 of the protocol, the client is required to wait
for the 'bound_ok' or 'bound_fail' events in order to proceed further.
<arg name="width" type="int" summary="width of rectangle"/>
<arg name="height" type="int" summary="height of rectangle"/>
</request>
+
+ <request name="deactivate_app" since="5">
+ <description summary="de-activate/hide window identified by app_id">
+ Ask the compositor to hide the toplevel window for window
+ management purposes. Depending on the window role, this request
+ will either display the previously active window (or the background
+ in case there's no previously active surface) or temporarily (or
+ until a 'activate_app' is called upon) hide the surface.
+
+ All the surfaces are identifiable by using the app_id, and no actions
+ are taken in case the app_id is not/was not present.
+
+ See xdg_toplevel.set_app_id from the xdg-shell protocol for a
+ description of app_id.
+ </description>
+ <arg name="app_id" type="string"/>
+ </request>
</interface>
<interface name="agl_shell_ext" version="1">
ivi_layout_activate(output, app_id);
}
+static void
+shell_new_deactivate_app(struct wl_client *client, struct wl_resource *shell_res,
+ const char *app_id)
+{
+ struct ivi_compositor *ivi = wl_resource_get_user_data(shell_res);
+
+ ivi_layout_deactivate(ivi, app_id);
+}
+
static void
shell_desktop_activate_app(struct wl_client *client,
struct wl_resource *shell_res,
.set_panel = shell_set_panel,
.activate_app = shell_activate_app,
.destroy = shell_destroy,
- .set_activate_region = shell_set_activate_region
+ .set_activate_region = shell_set_activate_region,
+ .deactivate_app = shell_new_deactivate_app,
};
static const struct agl_shell_ext_interface agl_shell_ext_implementation = {
ivi_shell_create_global(struct ivi_compositor *ivi)
{
ivi->agl_shell = wl_global_create(ivi->compositor->wl_display,
- &agl_shell_interface, 4,
+ &agl_shell_interface, 5,
ivi, bind_agl_shell);
if (!ivi->agl_shell) {
weston_log("Failed to create wayland global.\n");