blob: e59a0ec6db168b3466d78e3f837c2956d3490ce4 [file] [log] [blame] [edit]
/*
* Copyright © 2018-2019 Canonical Ltd.
*
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 3,
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* Authored by: William Wold <william.wold@canonical.com>
*/
#include "layer_shell_v1.h"
#include "in_process_server.h"
#include "version_specifier.h"
wlcs::LayerSurfaceV1::LayerSurfaceV1(
wlcs::Client& client,
wlcs::Surface& surface,
zwlr_layer_shell_v1_layer layer,
wl_output* output,
const char *_namespace)
: client{client},
layer_shell{client.bind_if_supported<zwlr_layer_shell_v1>(AnyVersion)},
layer_surface{wrap_wl_object(
zwlr_layer_shell_v1_get_layer_surface(
layer_shell,
surface,
output,
layer,
_namespace))}
{
static struct zwlr_layer_surface_v1_listener const listener {
[](void* data,
struct zwlr_layer_surface_v1 *zwlr_layer_surface_v1,
uint32_t serial,
uint32_t width,
uint32_t height)
{
auto self = static_cast<LayerSurfaceV1*>(data);
self->last_size_ = {width, height};
self->configure_count++;
(void)zwlr_layer_surface_v1;
(void)serial;
zwlr_layer_surface_v1_ack_configure(zwlr_layer_surface_v1, serial);
},
[](void* /*data*/,
struct zwlr_layer_surface_v1 */*zwlr_layer_surface_v1*/)
{
}
};
zwlr_layer_surface_v1_add_listener(layer_surface, &listener, this);
}
void wlcs::LayerSurfaceV1::dispatch_until_configure()
{
client.dispatch_until([prev_config_count = configure_count, &current_config_count = configure_count]
{
return current_config_count > prev_config_count;
});
}