From 5cc08794ee5893685914dd6a3db9a878bac474df Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Mon, 8 Jan 2018 11:13:36 -0500 Subject: [PATCH] handle passed output resource for xdg-shell fullscreen request --- src/bin/e_comp_wl.c | 4 ++++ src/bin/e_comp_wl.h | 1 + src/modules/wl_desktop_shell/xdg6.c | 13 ++++++++++++- 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/bin/e_comp_wl.c b/src/bin/e_comp_wl.c index 320830451..fa83d2d07 100644 --- a/src/bin/e_comp_wl.c +++ b/src/bin/e_comp_wl.c @@ -1392,6 +1392,10 @@ _e_comp_wl_surface_state_commit(E_Client *ec, E_Comp_Wl_Surface_State *state) "min surface height cannot be larger than max surface height"); if (ec->comp_data->shell.set.fullscreen && (!ec->fullscreen)) { + E_Zone *zone = e_comp_zone_id_get(ec->comp_data->shell.set.fs_zone); + + if (zone && (zone != ec->zone)) + e_client_zone_set(ec, zone); e_client_fullscreen(ec, E_FULLSCREEN_RESIZE); } if (ec->comp_data->shell.set.unfullscreen) diff --git a/src/bin/e_comp_wl.h b/src/bin/e_comp_wl.h index 1569bf1b8..5235508c2 100644 --- a/src/bin/e_comp_wl.h +++ b/src/bin/e_comp_wl.h @@ -325,6 +325,7 @@ struct _E_Comp_Wl_Client_Data Eina_Bool maximize E_BITFIELD; Eina_Bool unmaximize E_BITFIELD; Eina_Bool minimize E_BITFIELD; + int fs_zone; } set; } shell; struct diff --git a/src/modules/wl_desktop_shell/xdg6.c b/src/modules/wl_desktop_shell/xdg6.c index da1807e19..4b5ea7cac 100644 --- a/src/modules/wl_desktop_shell/xdg6.c +++ b/src/modules/wl_desktop_shell/xdg6.c @@ -582,7 +582,7 @@ _e_xdg_toplevel_cb_maximized_unset(struct wl_client *client EINA_UNUSED, struct } static void -_e_xdg_toplevel_cb_fullscreen_set(struct wl_client *client EINA_UNUSED, struct wl_resource *resource, struct wl_resource *output_resource EINA_UNUSED) +_e_xdg_toplevel_cb_fullscreen_set(struct wl_client *client EINA_UNUSED, struct wl_resource *resource, struct wl_resource *output_resource) { E_Client *ec; @@ -596,6 +596,17 @@ _e_xdg_toplevel_cb_fullscreen_set(struct wl_client *client EINA_UNUSED, struct w } if (ec->lock_user_fullscreen) return; + if (output_resource) + { + Eina_List *l; + E_Zone *zone; + E_Comp_Wl_Output *wlo = wl_resource_get_user_data(output_resource); + EINA_LIST_FOREACH(e_comp->zones, l, zone) + if (zone->output == wlo) + ec->comp_data->shell.set.fs_zone = zone->id; + } + else + ec->comp_data->shell.set.fs_zone = ec->zone->id; _xdg_shell_surface_send_configure(resource, 1, !!ec->maximized || ec->comp_data->max, 0, ec->zone->w, ec->zone->h); }